我正在使用cloud-init / cloud-config配置OpenStack框。我打算等到它完全配置后再开始使用它。
使用某些标记文件或检测cloud-init进程是否仍在运行并不是很难,尽管在每个cloud-init脚本中执行此操作似乎非常麻烦。有一些推荐的方法吗? cloud-init本机支持,理想情况下?
答案 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,从而需要保护凭据。