在Python中,我使用knife来启动服务器。
例如
knife ec2 server create -r "role[nginx_server]" --region ap-southeast-1 -Z ap-southeast-1a -I ami-ae1a5dfc --flavor t1.micro -G nginx -x ubuntu -S sg_development -i /home/ubuntu/.ec2/sg_development.pem -N webserver1
然后,我将使用 Chef-server api 检查 Bootstrap 何时完成,以便我可以使用 boto 和其他工具来配置新创建的服务器。伪代码如下所示:
cmd = """knife ec2 server create -r "role[nginx_server]...."""
os.system(cmd)
boot = False
while boot==False:
chefTrigger = getStatusFromChefApi()
if chefTrigger==True:
boot=True
continue with code for further proccessing
我的问题是: Chef 服务器中指示 Chef 何时完全处理节点的触发器是什么?请注意,我使用 -N 来命名服务器并将查询其属性,但我要查找什么?有 bool 吗?状态?
谢谢
最佳答案
TL;DR:使用 report/exception handler相反。
当节点成功运行chef-client
后,会将节点对象保存到Chef Server。 ohai 自动生成的属性之一Chef 每次运行的时间是 node['ohai_time']
,这是 ohai 执行时(Chef 运行开始时)的 Unix 纪元时间戳。未成功将自身保存到服务器的节点将根本没有ohai_time。但是,此属性仅跟踪 ohai 运行的时间,而不一定是 chef-client
保存到服务器的时间(因为这可能是几秒到几分钟,具体取决于您的 Recipe 正在执行的操作)。 注意如果 Chef 运行由于未处理的异常而退出,默认情况下不会保存到服务器。
在节点完成时收到通知的更可靠方法是使用报告/异常处理程序,它可以向各种位置和 API 发送消息。请参阅documentation了解更多信息。
关于python - 在 Chef 服务器中,如何确定节点何时完全引导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9986283/