38

cloud-init 用户数据对象的 cloud-config 部分中指令的顺序是什么。这对于避免竞争类型条件很重要。

我知道 bootcmd 在 runcmd 之前运行很早,但是是否有一个很好的所有方法顺序的列表?

4

1 回答 1

41

来自https://git.launchpad.net/cloud-init/tree/config/cloud.cfg(感谢 garbelini)

(截至 2017 年 9 月,上述链接不正确,现在是https://git.launchpad.net/cloud-init/tree/config/cloud.cfg.tmpl,请参见下面的注释)

# The modules that run in the 'init' stage
cloud_init_modules:
 - migrator
 - ubuntu-init-switch
 - seed_random
 - bootcmd
 - write-files
 - growpart
 - resizefs
 - set_hostname
 - update_hostname
 - update_etc_hosts
 - ca-certs
 - rsyslog
 - users-groups
 - ssh

# The modules that run in the 'config' stage
cloud_config_modules:
# Emit the cloud config ready event
# this can be used by upstart jobs for 'start on cloud-config'.
 - emit_upstart
 - disk_setup
 - mounts
 - ssh-import-id
 - locale
 - set-passwords
 - snappy
 - grub-dpkg
 - apt-pipelining
 - apt-configure
 - package-update-upgrade-install
 - fan
 - landscape
 - timezone
 - lxd
 - puppet
 - chef
 - salt-minion
 - mcollective
 - disable-ec2-metadata
 - runcmd
 - byobu

# The modules that run in the 'final' stage
cloud_final_modules:
 - rightscale_userdata
 - scripts-vendor
 - scripts-per-once
 - scripts-per-boot
 - scripts-per-instance
 - scripts-user
 - ssh-authkey-fingerprints
 - keys-to-console
 - phone-home
 - final-message
 - power-state-change

此外:

有配置合并“顺序如下:-cli配置文件覆盖环境配置文件覆盖实例配置覆盖数据源配置覆盖覆盖默认配置的基本配置。” (见变更日志)

在各个生成的脚本目录中,脚本按照 python "sorted()" builtin 给出的顺序运行

注意:虽然在回答时这是正确的,但查看上面提到的存储库(截至 2017 年 9 月),现在有一个 cloud.cfg.tmpl 模板文件,它针对不同发行版的设置略有不同

# The modules that run in the 'init' stage
cloud_init_modules:
 - migrator
 - seed_random
 - bootcmd
 - write-files
 - growpart
 - resizefs
{% if variant not in ["freebsd"] %}
 - disk_setup
 - mounts
{% endif %}
 - set_hostname
 - update_hostname
{% if variant not in ["freebsd"] %}
 - update_etc_hosts
 - ca-certs
 - rsyslog
{% endif %}
 - users-groups
 - ssh

# The modules that run in the 'config' stage
cloud_config_modules:
{% if variant in ["ubuntu", "unknown", "debian"] %}
# Emit the cloud config ready event
# this can be used by upstart jobs for 'start on cloud-config'.
 - emit_upstart
 - snap_config
{% endif %}
 - ssh-import-id
 - locale
 - set-passwords
{% if variant in ["rhel", "fedora"] %}
 - spacewalk
 - yum-add-repo
{% endif %}
{% if variant in ["ubuntu", "unknown", "debian"] %}
 - grub-dpkg
 - apt-pipelining
 - apt-configure
{% endif %}
{% if variant not in ["freebsd"] %}
 - ntp
{% endif %}
 - timezone
 - disable-ec2-metadata
 - runcmd
{% if variant in ["ubuntu", "unknown", "debian"] %}
 - byobu
{% endif %}

# The modules that run in the 'final' stage
cloud_final_modules:
{% if variant in ["ubuntu", "unknown", "debian"] %}
 - snappy
{% endif %}
 - package-update-upgrade-install
{% if variant in ["ubuntu", "unknown", "debian"] %}
 - fan
 - landscape
 - lxd
{% endif %}
{% if variant not in ["freebsd"] %}
 - puppet
 - chef
 - salt-minion
 - mcollective
{% endif %}
 - rightscale_userdata
 - scripts-vendor
 - scripts-per-once
 - scripts-per-boot
 - scripts-per-instance
 - scripts-user
 - ssh-authkey-fingerprints
 - keys-to-console
 - phone-home
 - final-message
 - power-state-change
于 2016-05-12T15:06:17.983 回答