在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
Run Code Online (Sandbox Code Playgroud)
然后,我将使用 Chef-server api 检查引导程序何时完成,以便我可以使用 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
Run Code Online (Sandbox Code Playgroud)
我的问题是:厨师服务器中指示厨师何时完全处理节点的触发器是什么?请注意,我使用 -N 来命名服务器并将查询其属性,但我要查找什么?有布尔吗?一个状态?
谢谢
TL;DR:改用报告/异常处理程序。
当节点chef-client成功运行完成后,会将节点对象保存到Chef Server。每次 Chef 运行时,ohai自动生成的属性之一是node['ohai_time'],它是 ohai 执行时(Chef 运行开始时)的 Unix 纪元时间戳。未成功将自身保存到服务器的节点将根本没有ohai_time。但是,此属性仅跟踪 ohai 运行时的时间,不一定是chef-client保存到服务器时的时间(因为这可能是几秒到几分钟,具体取决于您的食谱正在做什么)。请注意,如果 Chef 运行由于未处理的异常而退出,默认情况下它不会保存到服务器。
当节点完成时收到通知的更可靠方法是使用报告/异常处理程序,它可以向各种位置和 API 发送消息。请参阅文档以获取更多信息。