【问题标题】:Pass Node Name as testing Condition in Chef Recipe在 Chef Recipe 中传递节点名称作为测试条件
【发布时间】:2016-08-31 09:11:44
【问题描述】:

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

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

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

谁能告诉我这样做的正确方法是什么?

【问题讨论】:

    标签: automation chef-infra conditional-statements chef-recipe


    【解决方案1】:
    package "vim" if node["name"] == "MyNode"
    

    但我猜你的第一个例子应该可以工作。可能是您节点上的 node["name"] 与 "MyNode" 不同?

    【讨论】:

      【解决方案2】:

      在为不同的服务部署不同的 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多