更改或 "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 的目的,有各种工具可以更优雅地处理这种情况。
我有一个问题,我有 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 的目的,有各种工具可以更优雅地处理这种情况。