【问题标题】:Setting and Accessing Custom Ohai attributes in Chef在 Chef 中设置和访问自定义 Ohai 属性
【发布时间】:2014-09-04 17:48:17
【问题描述】:

我为 ohai 设置了一个属性列表,如下所示。

Ohai.plugin(:mycustom) do
    provides "mycustom"

    collect_data do
        configs = ["sss=fdf", "tryet=werw"]
        Ohai::Log.info("Adding #{configs.length} ohai parameters..........................")
        configs.each { |param|
            if param.to_s.strip.length != 0
                key_value_pair = param.split("=").map(&:strip)
                mycustom Mash.new
                mycustom["mycustom_#{key_value_pair[0].downcase}"] = "#{key_value_pair[1]}"
            end
        }
    end
end

我将运行列表配置为依次运行 ohai 和我的食谱。如何访问我的食谱模板中的上述设置属性?

<%= node['mycustom_sss'] %>

好像没用。

如果我在运行列表运行后执行ohai | grep mycustom,它不会返回任何内容。

【问题讨论】:

  • ohai 将在每次厨师运行开始时自动运行以填充自动属性。您是如何安装ohai 插件的?
  • 添加了 ohai 食谱,将 mycustom.rb 添加到 ohai/files/default/ 并上传了刀。正如我从日志中看到的那样,该文件正在运行。但是添加的属性不存在

标签: chef-infra ohai-gem


【解决方案1】:

您的插件提供mycustom,因此新的 Mash 及其值将驻留在node['mycustom'] 下。您的示例将导致node['mycustom']['mycustom_key']

我可以看到一个问题,您在循环的每次迭代中都替换了 mycustom Mash,因此您最终只会得到一个最终值,但您仍然应该拥有一个。

由于您已经通过provide 'mycustom' 获得前缀node['mycustom'],因此您可以将属性直接放在其下方,而不是构建一个包含mycustom 的字符串作为键。

Ohai.plugin(:Mycustom) do
  provides 'mycustom'

  collect_data do

    mycustom Mash.new
    configs = [ "sss=fdf", "tryet=werw" ]
    Ohai::Log.info "Adding #{configs.length} ohai parameters......"

    extract_string_key_values(configs).each do |key,val| 
      Ohai::Log.debug "Got key [#{key}] val [#{val}]"
      next if key.length == 0
      mycustom[key.downcase] = val
    end

  end


  def extract_string_key_values array
    #  Split the array values on = and strip whitespace from all elements 
    array.map{|keyval| keyval.split('=').map(&:strip) }
  end

end

这是 ohai 7,但它们并没有太大的不同。我将 key/val 解析拆分为一个单独的方法,因此循环更清晰。

要让命令行ohai 获取插件,你需要给它一个目录来查看,除非你将插件安装在原始的ruby ohai gem 路径中。

ohai -d /your/ohai/dir | grep -A3 mycustom
[2014-09-04T21:00:32+01:00] INFO: Adding 2 ohai parameters...
  "mycustom": {
    "sss": "fdf",
    "tryet": "werw"
  }

然后它们会出现在您的节点结构中:

node[:mycustom][:sss] = fdf
node[:mycustom][:tryet] = "werw"

在厨师运行之后,您应该能够看到带有knife 的节点mycustom 属性

knife node show <nodename> -a mycustom

【讨论】:

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