【问题标题】:Using search in Chef cookbook在 Chef 食谱中使用搜索
【发布时间】:2017-06-01 19:24:28
【问题描述】:

我正在尝试使用 Chef 食谱中的搜索方法从远程节点检索 IP 地址属性,然后该 IP 地址将用于配置本地节点上的 DNS 服务器设置。

在我的测试中,我有一个域控制器“DC1”,我想从头开始启动另一台服务器。在新服务器可以加入我的测试域之前,它需要有正确的 DNS 条目。

作为实验室环境,我正在创建的是在 AWS 中旋转和拆除,DNS 服务器的 IP 地址不会总是相同。

我希望能够获取 IP 地址并将其存储在一个变量中,以便在食谱中使用。

我尝试使用的代码 sn-p 是

search(:node, 'name:dc1',
  :filter_result => { 'ip' => [ 'ipaddress' ] }
      ).each do |result|
        ipaddr = result['ip']
end

我曾尝试使用 attributes/default.rb 中的代码,但我得到一个错误,即搜索不是有效的方法。此外,我尝试过 my_var = search .... 但这也没有用。

【问题讨论】:

  • 我不确定您对这段代码有什么期望。它正在为本地 ipaddr 变量分配正确的 IP。 tensibai 在社区 slack 上帮助您解决了这个问题。如果您想让它在块外可见,请将其分配给在搜索之前声明的变量或节点属性。
  • Slack 中的答案对我正在尝试做的事情没有帮助。将其移至 Stack Overflow 的原因是该问题很容易被埋没。
    如果我在属性中使用 default['network']['ip'] = search ... 或在食谱中使用 my_var = search... 我会收到错误“未定义的方法 `search' for #<: node::attribute:0x00000006b5b25> 你的意思是?每个"

标签: chef-infra


【解决方案1】:

将变量放在前面并在过滤器之后删除所有内容后,我停止收到错误“未识别的方法'搜索'”。

似乎工作的代码是

ipaddr = search(:node, 'name:dc1')

dnsserver = ipaddr[0]['ipaddress']

我现在应该可以在配方中使用 dnsserver 来设置 dns 服务器了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2015-10-24
    相关资源
    最近更新 更多