Python 如何在cloud init中正确使用runcmd和用户脚本?
通过查看runcmd代码(/usr/lib/python2.6/site packages/cloudinit/config/cc_runcmd.py) 我注意到,与其他方法相比,没有指定“频率”。除此之外,脚本所做的唯一事情是将给定的脚本保存为/var/lib/cloud/instance/scripts/runcmd下的shell脚本 因此,如果我详细指定模块,我必须设置频率Python 如何在cloud init中正确使用runcmd和用户脚本?,python,cloud-init,Python,Cloud Init,通过查看runcmd代码(/usr/lib/python2.6/site packages/cloudinit/config/cc_runcmd.py) 我注意到,与其他方法相比,没有指定“频率”。除此之外,脚本所做的唯一事情是将给定的脚本保存为/var/lib/cloud/instance/scripts/runcmd下的shell脚本 因此,如果我详细指定模块,我必须设置频率 cloud_config_modules: - mounts - locale - set-passwords
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"
除此之外,我在脚本中找到了一个解释:
[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
但是我没有注意到“once”和“instance”之间的区别。因此,如果“once”中具有新实例id的相同映像(而不是快照)不会启动?如果是“instance”,则会启动?我认为,如果您创建的映像将用于启动更多实例,则差异很重要 假设您运行cloud init脚本来设置一个实例,稍后您将创建该实例的映像,从中可以启动更多实例 从映像启动新实例时:
- 频率为“once”的脚本将不会再次运行
- 频率为“instance”的脚本将在第一次启动时运行,并且在该实例的生命周期内不再运行
- 频率为“始终”的脚本将在每次启动期间运行