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

时间:2015-11-12 07:26:50

标签: 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
 - timezone
 - [ runcmd, always ]

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

并且这个特殊的脚本可以由'scripts-user'运行,所以我需要指定ie。

- [ 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

但我没有发现'一次'和'实例'之间的区别。因此,如果在“一次”情况下具有新实例ID的相同图像(相当快照)将无法启动?如果'实例'它会吗?

1 个答案:

答案 0 :(得分:1)

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

想象一下,您运行cloud-init脚本来设置实例。稍后,您可以创建该实例的图像,您可以从中创建更多实例。

从图像中启动新实例时:

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