【问题标题】:Chef recipe node hash doesn't have the same data as in chef server node data厨师食谱节点哈希与厨师服务器节点数据中的数据不同
【发布时间】:2015-04-03 09:54:03
【问题描述】:

我在一个检查某些节点数据的配方中有一个条件:

if node[:etc][:group].has_key?('someuser') and node[:etc][:group][:someuser][:gid] == 12345
    # do something...
else
    # do something else...
end

我使用knife node edit hostname.mydomain.com将此数据添加到我的节点对象中,如

所示
$ knife node show hostname.mydomain.com -m
Node Name:   hostname.mydomain.com
Environment: ...
FQDN:        hostname.mydomain.com
IP:          ...
Run List:    ...
Roles:       ...
Recipes:     ...
Platform:    ...
Tags:        ...
Attributes:..
etc:
  group:
    someuser:
      gid:     12345
      members:

tags:        ...

但是,正在执行 else 子句而不是 if 子句。我检查了这是在节点上运行的配方的版本(查看下载到节点的配方)。我以为我已经正确设置了我的节点来执行 if 子句,那么为什么要执行 else 子句呢?谢谢。

【问题讨论】:

    标签: ruby chef-infra recipe


    【解决方案1】:

    节点 etc 键由 ohai 创建(并且在自动键下)并在每次运行时重写,试图在节点对象中设置这些属性是行不通的。

    您不能覆盖自动属性。

    您可以了解更多关于厨师运行here 的操作的详细信息以及有关属性here 的详细信息

    您可以在此处使用 group 资源在您的配方中创建组,并在进入循环之前重新加载 ohai 数据。

    示例(灵感来自 the doc):

    ohai "reload_passwd" do
      action :nothing
      plugin "etc"
    end
    group 'somegroup' do
      gid 12345
      notifies :reload, "ohai[reload_passwd]", :immediately
    end
    
    ruby_block "your code" do # in a ruby block to be run at converge time and not at compile time.
      if node[:etc][:group].has_key?('someuser') and node[:etc][:group][:someuser][:gid] == 12345
        # do something...
      else
        # do something else...
      end
    end
    

    但组创建可能在您的 else 块中,下一次厨师运行将进入 if 块,因为组将存在。

    【讨论】:

      猜你喜欢
      • 2014-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多