我按如下方式将属性列表设置为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
,则不会返回任何内容。
答案 0 :(得分:0)
您的插件提供mycustom
,因此新的Mash及其值将位于node['mycustom']
下。您的示例将导致node['mycustom']['mycustom_key']
我可以看到一个问题,你在循环的每次迭代中替换mycustom
Mash,所以你只能得到一个最终值,但你仍然应该有一个。
由于您已经通过node['mycustom']
获得前缀provide '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"
在厨师运行后,您应该能够看到mycustom
knife
属性
knife node show <nodename> -a mycustom