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