据我所知,cloud-init
每次配置更改时都会运行。不仅在系统第一次启动时,而且在每次提供的配置更改时。这有点道理,因为我想很难定义“第一次”(克隆的 VM 在被冻结并用作模板之前已经运行,所以它从来都不是第一次)。但是,我不时地——很少,但仍然——发现cloud-init
它们在重新启动时在已配置的系统上重新运行。
cloud-init
但是,当在完全配置的系统上运行时,某些步骤似乎会搞砸设置。例如,如果它在初始设置后再次运行一次cloud-init
并将某些配置设置为 value X
,但之后您手动将其覆盖为Y
,现在cloud-init
重新运行以将其设置回X
. 或者,让系统重新创建您的 SSH 主机密钥。
因此,我发现手动运行非常有用:
sudo touch /etc/cloud/cloud-init.disabled
...在初始设置之后,以防止它cloud-init
再次运行。(在某些情况下,cloud-init
真的只用于初始的“克隆和设置 IP/主机名”类型的配置。)
但是有什么方法可以自动化吗?/etc/cloud/cloud.cfg
就像在下次运行后向禁用自身添加一些参数一样?
不同
cloud-init
的模块有不同的频率:once-per-instance
和always
。您可以在Modules 文档Module frequency
中检查每个模块的属性。例如,在每次启动时运行,但仅在第一次启动时运行。可以在 cloud-config 文件模块列表中覆盖频率-和. 示例覆盖:bootcmd
runcmd
cloud_init_modules
cloud_config_modules
cloud_final_modules