python - 如何在cloud-init中正确使用runcmd和scripts-user?

标签 python cloud-init

通过查看 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 和用户脚本以及如何使用它们的正确解释

我也不明白所有模式之间的区别,once(第一次实例启动),instance(???),always(我理解),????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 的相同图像(而不是快照)将不会启动?如果是“实例”,它会吗?

最佳答案

如果您要创建将用于启动更多实例的图像,我认为差异很重要。

假设您运行 cloud-init 脚本来设置一个实例。稍后您制作该实例的镜像,您可以从中启动更多实例。

当您从图像启动一个新实例时:

  • 频率为“一次”的脚本不会再次运行
  • 频率为“instance”的脚本将在第一次启动时运行,并且在该实例的生命周期内不再运行
  • 频率为“始终”的脚本将在每次启动时运行

关于python - 如何在cloud-init中正确使用runcmd和scripts-user?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33666237/

相关文章:

python - 图像中的对象检测 (HOG)

python - 语法 "exp1 << variable << exp2"在 Python 中如何工作?

amazon-web-services - AWS : Simple cfn-init fails on Amazon Linux 2 for no apparent reason

python - 升级到 Python 3.6 后启动时启动 cloud-init 失败

amazon-ec2 - cloud-init 未执行用户数据

python - pandas iterrows 和循环计数器的问题

python - 如何在作为参数传递的函数发生异常后获取完整的堆栈跟踪?

python - 在单个数据框中显示所有匹配对 - Python Record Linkage

terraform - 在cloud init yaml中生成ip列表

python - 升级urllib3导致cloud-init失败,显然urllib3和python请求存在版本兼容性问题?