9

我正在使用 cloud-init/cloud-config 配置一个 OpenStack 机器。我打算等到它完全配置好后再开始使用它。

使用一些标记文件或检测 cloud-init 进程是否仍在运行并不难,尽管在每个 cloud-init 脚本中这样做似乎很麻烦。有什么推荐的方法吗?理想情况下,由 cloud-init 原生支持?

4

5 回答 5

7

以下命令可以解决问题:

cloud-init status --wait

来自https://ubuntu.com/blog/cloud-init-v-18-2-cli-subcommands

cloud-init status为 cloud-init 正在做什么以及是否成功完成提供简单的人类可读或编程输出。它可以用作机器上的健全性检查或脚本中的阻塞,直到 cloud-init 成功完成。

于 2021-08-27T13:20:00.540 回答
3

另一种选择是在完成后让 cloud-init电话回家

于 2016-04-19T12:24:17.957 回答
3

最简单的答案是在实例上设置一个标签,以便您可以轮询它的存在。

如果您有 Linux 主机,请最后执行此操作:

aws ec2 create-tags --resources `ec2metadata --instance-id` --tags Key=BootstrapStatus,Value=complete

这避免了需要设置网络端点、创建故障点或 SSH 连接、创建安全凭证的需要。

于 2017-07-15T02:15:50.647 回答
2

正如@flyxiao 指出的那样, cloud-init 将状态信息放入文件系统上的专用目录中:(/run/cloud-init/首选,/var/lib/cloud/data/因为它保证描述最后一个 init 进程)。status.json包含有关所有初始化阶段的详细信息,并result.json表示整个初始化已完成。项目文档建议使用 python 脚本来检测 cloud-init 的完成情况:

 fin = "/run/cloud-init/result.json"
 if os.path.exists(fin):

   ret = json.load(open(fin, "r"))

   if len(ret['v1']['errors']):

     print "Finished with errors:" + "\n".join(ret['v1']['errors'])

   else:

     print "Finished no errors"

 else:

   print "Not Finished"
于 2016-02-20T07:02:54.350 回答
1

您可以检查 /var/lib/cloud/data/status.json 的 cloud-init 状态。或者如果主机使用upstart,在/etc/init/newprocess.conf 中添加一个init 进程,newprocess.conf 应该在cloud-final 之后启动。

于 2016-02-18T08:58:52.470 回答