2015-11-12 24 views
5

通過查看runcmd代碼(/usr/lib/python2.6/site-packages/cloudinit/config/cc_runcmd.py) 我注意到沒有指定與其他頻率相比的「頻率」。除了腳本所做的僅僅是將作爲shell腳本提供的腳本保存在/ var/lib/cloud/instance/scripts/runcmd下。如何在cloud-init中正確使用runcmd和scripts-user?

所以如果我詳細地指定模塊,我必須設置頻率。

cloud_config_modules: 
- mounts 
- locale 
- set-passwords 
- timezone 
- [ runcmd, always ] 

cloud_final_modules: 
- scripts-per-once 
- scripts-per-boot 
- scripts-per-instance 
- [ scripts-user, always ] 
- ssh-authkey-fingerprints 

,並通過這個特別的創建的腳本可以通過'腳本,用戶可以運行的,所以我需要指定即

- [ scripts-user, always ] 

使RUNCMD腳本工作

是不是正確的方法這樣做?該文檔(至少當前0.7.7)缺乏runcmd和用戶腳本的正確解釋,以及它們如何可以利用

我也不明白所有模式之間的差異,一次(第一次實例引導),實例(???),總是(即我的理解),????啓動(即一個存在,似乎不工作...

編輯:

好吧,我已經找到cloudinit/settings.py:

# Valid frequencies of handlers/modules 
PER_INSTANCE = "once-per-instance" 
PER_ALWAYS = "always" 
PER_ONCE = "once" 

和旁邊我在這個腳本中找到了一個解釋:

[[email protected] ~]# cloud-init-per -h 
Usage: cloud-init-per frequency name cmd [ arg1 [ arg2 [ ... ] ] 
    run cmd with arguments provided. 

    This utility can make it easier to use boothooks or bootcmd 
    on a per "once" or "always" basis. 

    If frequency is: 
     * once: run only once (do not re-run for new instance-id) 
     * instance: run only the first boot for a given instance-id 
     * always: run every boot 

但我沒有發現'once'和'instance'之間的區別。因此,如果在「一次」情況下使用新實例ID的相同圖像(而不是快照)不會啓動?萬一'實例'它會?

回答

1

我認爲如果您正在創建一個將用於啓動更多實例的映像,則區別至關重要。

想象一下,您運行cloud-init腳本來設置實例。之後,您可以製作一個可從中啓動更多實例的實例圖像。

當您從映像啓動一個新的實例:

  • 與頻率的腳本「一旦」會不會再次與頻率「實例」跑
  • 腳本會在第一次啓動運行,永不再次在這種情況下
  • 頻率「始終」的腳本將在每次啓動時運行