簡體   English   中英

如何在不重啟的情況下重新運行 cloud-init

[英]How to re-run cloud-init without reboot

我正在使用 openstack 使用“nova boot”命令創建 VM。 我的圖像啟用了 cloud-init。 我傳遞了一個 --user-data 腳本,它是 bash shell 格式,以便 cloud-init 在 VM 啟動期間運行。 這一切都順利發生。 現在我的用例是重新運行 cloud-init 以執行相同的用戶數據腳本,而無需重新啟動 VM。 我看到了 /usr/bin/cloud-init 選項,它們確實在談論運行特定模塊,但沒有什么能夠讓它執行相同的用戶數據腳本。 如何實現? 任何幫助,將不勝感激。

為了重置 cloud-init,您需要執行rm -rf /var/lib/cloud/instances

然后重新運行cloud-init start ,它將再次運行完整的啟動腳本過程。

命令已更新,因此要重新運行,您需要clean現有配置:

sudo cloud-init clean

然后使用init指令重新運行它:

sudo cloud-init init

當心:ssh 主機密鑰之類的東西可能會重新生成。

由於這不斷出現在搜索結果中,對我有用的是:

  1. 刪除/var/lib/cloud/instances/i-xxxxxxx/sem信號量。 如果這些文件存在,則 Cloud-init 將不會重新運行。

  2. 編輯/var/lib/cloud/instances/i-xxxxxxxx/scripts/part-001 這是您的用戶數據腳本。

  3. 執行 cloud-init 的用戶腳本模塊。 這不會重新下載用戶數據,而是執行步驟 2 中已下載(現在已修改)的腳本。

    sudo /usr/bin/cloud-init single -n cc_scripts_user

鑒於這篇文章在 6 個月前被積極觸及,我想在這里提供來自 cloud-init upstream 的更完整的答案。

最初的問題:“如何在以后使用 cloud-init 再次重新運行用戶數據腳本” 通常,用戶腳本僅由配置模塊 config-user-scripts 每個實例運行一次。 如果元數據中的 instance-id 沒有改變,它就不會重新運行。

可以使用以下命令行繞過每個實例的信號量,方法是告訴它運行用戶腳本模塊而不考慮實例 ID:

sudo cloud-init single --name scripts-user --frequency always

根據另一個建議在不重新啟動系統的情況下重新運行所有 cloud-init。 這不是推薦的方法,因為 cloud-init 的某些部分在 systemd 生成器時間范圍內運行以檢測新的數據源類型。 也就是說,以下命令將允許您在不重新啟動系統的情況下完成此操作。

cloud-init 支持一個clean子命令來刪除所有信號量文件並允許 cloud-init 再次重新運行所有配置模塊。 請注意,這將意味着重新生成 SSH 主機密鑰並重寫 ssh 配置文件,因此它可能會影響您返回虛擬機的能力。

要清除所有信號量,以便 cloud-init 模塊將在下次啟動時全部重新運行:

sudo cloud-init clean --logs

由於 systemd 服務依賴性,cloud-init 通常按順序運行多個引導階段 如果你想在不重啟的情況下重復該過程,你可以運行以下 4 個命令:

  1. 檢測本地數據源(雲平台):

    sudo cloud-init init --local

  2. 檢測任何需要網絡的數據源並運行 /etc/cloud/cloud.cfg 中定義的“cloud_init_modules”:

    sudo cloud-init init

  3. 運行 /etc/cloud/cloud.cfg 中定義的所有 cloud_config_modules:

    sudo cloud-init modules --mode=config

  4. 運行 /etc/cloud/cloud.cfg 中定義的所有 cloud_final_modules:

    sudo cloud-init modules --mode=final

要運行 cloud-init 的 cloud-config 部分的包模塊,您可以運行

# cloud-init-cfg all config

要運行 cloud-init 的 cloud-config 部分的 runcmd 模塊,您可以運行

# cloud-init-cfg all final

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM