更改或 "override" 厨师食谱中的操作的最佳方法

Best approach to change or "override" an action in a chef recipe

我有一个问题,我有 100 多台服务器,我需要确保特定进程是 运行...这 100 台服务器分为 4 个不同的环境,我配置了许多角色。在这种情况下厨师代码是最基本的:

service "some_process" do
    supports :status => true
    action :start
end

假设我想在特定环境、节点或角色上重新启动此进程。我使用了这样的东西:

knife ssh "name:node_name" "service some_process restart" -i id_rsa 
knife ssh "name:role_name" "service some_process restart" -i id_rsa 
knife ssh "name:environment_name" "service some_process restart" -i id_rsa 

然而,这已被我的内部安全团队标记为安全违规。所以我必须找到一个替代方案...

暂时将配方从 "start" 更改为 "restart",然后通过单个节点、整个环境甚至某些角色进行管理的最佳方法是什么?是否有一种机制可以通过使用属性编辑运行列表 and/or 来覆盖 'start' 并强制使用 'restart'?

Chef 不是远程执行框架,您正在做的是处理此问题的正确方法(尽管可能使用更好的 SSH 客户端,如 Fabric、Invoke 或 Capistrano)。

我建议你有不止一种食谱。一个食谱将使用 action :start,另一个将使用 action :restart。如果需要强制重启,您可以临时覆盖运行列表。尽管如此,@coderanger 是对的。这不是 Chef 的目的,有各种工具可以更优雅地处理这种情况。