如何仅在 Chef 更新所有节点后执行脚本?

如何仅在 Chef 更新所有节点后执行脚本?

我想制作一个配方,将我们的软件更新可执行文件部署到所有服务器,然后将新版本信息发布到数据库。如何制作脚本,仅在具有给定角色的所有节点部署新软件包版本后才发出数据库请求?

答案1

在部署可执行文件的配方中,我会考虑在部署可执行文件后将新软件版本存储在节点属性中。然后,在单独的配方中,在这些节点上运行搜索并验证所有结果是否仅包含新软件版本,即:

if search(:node, 'roles:role_for_your_app_servers').reject do |n|
  n['software']['version'] != target_version
end.empty?

  do_database_update

end

为了使其正常工作,您首先需要确保在添加此功能之前所有节点都包含软件版本属性。

相关内容