如何检测cloud-init完成初始化

时间:2015-10-08 14:46:41

标签: provisioning configuration-management cloud-init

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

使用某些标记文件或检测cloud-init进程是否仍在运行并不是很难,尽管在每个cloud-init脚本中执行此操作似乎非常麻烦。有一些推荐的方法吗? cloud-init本机支持,理想情况下?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

正如@flyxiao指出的那样,cloud-init将状态信息放入文件系统的专用目录:/run/cloud-init/(优先于/var/lib/cloud/data/,因为它保证描述最后的init进程)。 status.json包含所有init阶段的详细信息,result.json表示整个init已完成。 project documentation建议使用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"

答案 2 :(得分:1)

另一种方法是让cloud-init phone home一旦完成。

答案 3 :(得分:1)

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

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

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

这样可以避免需要设置网络端点,创建故障点或进入SSH,从而需要保护凭据。