2015-12-02 51 views
0

我有一个问题,我有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 

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

什么是临时改变从“开始”到“重启”的配方,然后通过各个节点,管理这整个环境,甚至某些角色的最佳方法?是否有机制通过编辑运行列表和/或使用属性来覆盖“开始”并强制“重新启动”?

+0

虽然答案已被接受,你想实现听起来像一个糟糕的设计是什么,你的问题是**是否可以做**? - 是的,这是可能的 - 你总是可以实现它根据计算的变量在您的配方中进行分支。另一种方法是使用数据包并将值设置在中央位置,这可以在'chef-client'运行期间检索。用数据包做这件事意味着你不会修改你的食谱,也不需要担心推出新版本的食谱。 – MrRoth

回答

0

厨师是不是一个远程执行框架,你在做什么是处理这个(虽然也许有更好的SSH客户端状织物,调用,或斯特拉努)的正确方法。

0

我会建议你有一个以上的食谱。一个配方将使用action :start另一个将使用action :restart。如果需要强制重新启动,则可以临时覆盖该运行列表。尽管如此,@coderanger是正确的。这不是厨师的目的,有各种各样的工具可以更好地处理这种情况。