ruby_block内部的Chef标签节点

时间:2018-11-05 12:47:27

标签: chef

问题: 我想根据节点的角色有选择地重启Chef中的服务。如果我不重新启动,我想标记节点以便以后重新启动。

当前,我有一些看起来像这样的代码

template '/etc/docker/daemon.json' do
  source 'daemon.json.erb'
  mode '0644'
  notifies :run, 'ruby_block[start_right_service]', :immediately
end

ruby_block 'start_right_service' do
  action :nothing
  block do
    if node.role?('dev') ||
       node.role?('desktop')
      Chef::Log.info('Fireing off a restart this node')
      resources(service: 'docker').run_action(:restart)
    else
      Chef::Log.info('Not allowed to restart this node')
      node.run_state['pending_docker_restart'] = true
    end
  end
end

所以我收到时不能在ruby_block内使用标签

  

Chef :: Resource :: RubyBlock的未定义方法`tag'

我也尝试用node.run_state传递变量,但这似乎也不起作用。解决此问题的任何想法将不胜感激

1 个答案:

答案 0 :(得分:0)

覆盖ruby_block中的node attribute。您可以尝试将node.run_state替换为node.default