通过查看runcmd代码(/usr/lib/python2.6/site-packages/cloudinit/config/cc_runcmd.py),我注意到与其他代码相比没有指定“频率”。除了脚本所做的唯一事情是将给定的脚本作为 shell 脚本保存在 /var/lib/cloud/instance/scripts/runcmd 下。
因此,如果我详细指定模块,我必须设置频率。
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'运行,所以我需要指定即
- [ scripts-user, always ]
使 runcmd 脚本工作
这是正确的方法吗?文档(至少当前为 0.7.7)缺乏对 runcmd 和用户脚本以及如何使用它们的正确解释
我也不明白所有模式之间的区别,一次(第一次实例启动),实例(???),总是(我理解),????boot(那个存在?它似乎不去工作...
编辑:
好的,我在 cloudinit/settings.py 中找到了:
# Valid frequencies of handlers/modules
PER_INSTANCE = "once-per-instance"
PER_ALWAYS = "always"
PER_ONCE = "once"
除此之外,我在这个脚本中找到了一个解释:
[root@euca-10-254-97-216 ~]# 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
但我不明白“一次”和“实例”之间的区别。因此,如果在“一次”的情况下具有新实例 ID 的相同图像(相当快照)不会启动?万一“实例”呢?