【问题标题】:Best approach to change or "override" an action in a chef recipe更改或“覆盖”厨师食谱中的动作的最佳方法
【发布时间】:2015-12-03 23:12:26
【问题描述】:

我有一个问题,我有 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-client 运行期间检索。使用数据包这样做意味着您不会修改您的食谱,也无需担心推出新版本的食谱。

标签: chef-infra knife


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2015-05-31
      • 2017-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-04
      • 1970-01-01
      • 1970-01-01
      • 2015-04-12
      相关资源
      最近更新 更多