我们正在使用 chef 部署多节点 PHP 环境。
我为特定的服务器角色编写了一些手册,用于安装应用程序使用的某些包(主要使用包管理器)。
现在,我希望 chef 能够让这些节点上的软件包保持最新状态。我们有两个环境:开发和生产。例如,当新版本的 PHP 发布时,我希望在我们的开发环境中测试这个新版本,然后将其推广到生产环境。我在安装 PHP 的配方中的软件包定义如下所示:
package 'php' do
action :install
version '5.3.27'
end
5.3.28 版本发布后我该采取哪些步骤?
答案1
Chef 的最佳实践是始终从相同的“进入”状态开始。如果您要部署到云,我会创建一个全新的 VM 并从头开始部署 PHP。
如果您没有这种奢侈,那么您将处于必须维持两个已知起始状态的境地。 (1) 未安装 PHP 和 (2) 安装了旧版本的 PHP。
您不能将它们链接在一起,总是先安装 5.3.27,因为这会破坏该资源的幂等性。
我建议您手动卸载 5.3.27 并重新开始安装 5.3.28 chef。
最后,我建议尽量避免使用 chef 角色。它们无法进行版本控制,而且当开发和生产系统共享同一角色时,更新会很困难(即,如何在不影响两个环境的情况下更改角色?)相反,请考虑使用父级 cookbook 进行协调。