将节点名称作为Chef Recipe中的测试条件传递

时间:2015-03-10 07:08:04

标签: automation chef conditional-statements chef-recipe

我正在编写一个简单的方法来安装任何软件包。我想要实现的唯一变化是我的配方应该只安装包,如果节点名称匹配,否则它应该什么都不做。我的代码是

package "vim" do
  if node["name"] == "MyNode"
    action :install
  else
    action :nothing
  end
end

在这种情况下,即使在名为MyNode的节点上也不安装包。我也尝试使用only_if,如下所示:

package "vim" do
  only_if node["name"] == "MyNode"
    action :install
end

在这种情况下,它会在每个节点上安装软件包,而不管其名称是什么!我要么弄乱了缺少某些东西的语法。

有人可以告诉我这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

package "vim" if node["name"] == "MyNode"

但我想你的第一个例子应该可行。可能节点["名称"] 在您的节点上与" MyNode" 不同?

答案 1 :(得分:0)

在为不同的服务部署不同的datadog jmx配置时,我只需要这样做。 (因为datadog可以收集有限数量的指标) 我在食谱中用一个案例陈述做了。

case Chef::Config[:node_name]
  when 'host1.domain.name'
  cookbook_file '/etc/dd-agent/conf.d/jmx.yaml' do
    source 'default/host1/jmx.yaml'
    owner 'dd-agent'
    group 'root'
    mode '0644'
    action :create
  end
  when 'host2.domain.name'
  cookbook_file '/etc/dd-agent/conf.d/jmx.yaml' do
    source 'default/host2/jmx.yaml'
    ...
  end
end