如何确保 Cloud-Init 只运行一次?

如何确保 Cloud-Init 只运行一次?

据我所知,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-instancealways。您可以Module frequency模块文档。例如,bootcmd每次启动时运行,但仅runcmd在第一次启动时运行。可以在 cloud-config 文件模块列表中覆盖频率 -cloud_init_modules和。覆盖示例:cloud_config_modulescloud_final_modules

cloud_final_modules:
- [scripts-user, always]

相关内容