Chef infra 改变的最佳方法或;凌驾;厨师食谱中的动作

Chef infra 改变的最佳方法或;凌驾;厨师食谱中的动作,chef-infra,knife,Chef Infra,Knife,我有一个问题,我有100多个服务器,我需要确保一个特定的进程正在运行。。。这100台服务器分为4个不同的环境,我配置了许多角色。在这种情况下,厨师代码是最基本的: service "some_process" do supports :status => true action :start end 假设我想在特定环境、节点或角色上重新启动此进程。我用了这样的方法: knife ssh "name:node_name" "service some_process rest

我有一个问题,我有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 
但是,我的内部安全团队已将此标记为安全违规。所以我必须找到另一个选择


将配方从“开始”临时更改为“重新启动”,然后通过单个节点、整个环境甚至某些角色进行管理的最佳方法是什么?是否存在通过编辑运行列表和/或利用属性覆盖“启动”和强制“重启”的机制

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

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

虽然答案已经被接受,而且您想要实现的目标听起来像是一个糟糕的设计,但您的问题是它是否可以实现?--是的,这是可能的——您总是可以通过基于计算变量在配方中进行分支来实现它。另一种方法是使用数据包并在中心位置设置值,该值可在
chef client
运行期间检索。使用数据包这样做意味着您不需要修改您的烹饪书,也不需要担心推出新版本的烹饪书。