改变或“覆盖”厨师食谱中的动作的最佳方法

时间:2015-12-02 20:49:49

标签: chef knife

我有一个问题,我有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'并强制'重启'?

2 个答案:

答案 0 :(得分:0)

Chef不是一个远程执行框架,你正在做的是处理这个问题的正确方法(尽管可能有更好的SSH客户端,如Fabric,Invoke或Capistrano)。

答案 1 :(得分:0)

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