python - 在 Chef 服务器中,如何确定节点何时完全引导

标签 python chef-infra

在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/

相关文章:

ruby - Chef 没有运行 apt (apt-get update) 配方。返回 100

chef-infra - 如何在 RightScale Chef Recipe 中获取正在运行的 Recipe 的完整路径?

ruby - 无法通过SSH运行Chef-solo命令

ruby-on-rails - 带 rails 的 Chef : Handling asset precompiling during deploy

python - 使用 Python 2.7 从数据中删除反斜杠

python - 在两个类之间传递参数

python - 使用循环删除所有相邻的重复项

python - 格式字符串中遇到单个 '}'

python - 如何使用 OpenCV 制作反向填充的透明矩形?

linux - 我可以在 Linux 服务器上安装两个 Chef 客户端,以便两个客户端都可以管理 Linux 服务器吗?