更改chef_environment

时间:2017-03-20 19:09:09

标签: ruby chef

我想实现一个配方,将节点分配给由外部条件选择的特定厨师环境(编译初期)(在本例中为Scalr环境变量APP_ENV),并立即(在现有流程树中)重新启动Chef运行

这样的代码:

if ENV['APP_ENV'] != node['chef_envronment']
  node.normal['chef_envronment'] = ENV['APP_ENV']
  node.save
  Chef::Client.new.run
end

不会工作,因为产生的客户会看到父母,并会等到它退出..任何想法?也许有办法强制Chef :: Client.new.run忽略锁定文件?

1 个答案:

答案 0 :(得分:0)

所以有几个问题。首先,这不是你设置一个节点的环境,所以这实际上什么也做不了。其次,在运行过程中调用node.save通常会导致部分数据在服务器上的错误,这取决于您运行此代码的位置。第三,没有特定的方法来重启Chef运行。您必须退出并让守护进程模式chef-client或其他某个间隔运行重新启动它。

if ENV['APP_ENV'] != node.chef_environment
  n = Chef::Node.load(node.name)
  n.chef_environment = ENV['APP_ENV']
  n.save
  raise "forcing run to fail to pick up new environment"
end

这仍然不是一个防弹选项,但至少在这三个方面都更好。