Chef infra 在Chef中设置和访问自定义Ohai属性
我为ohai设置了一个属性列表,如下所示Chef infra 在Chef中设置和访问自定义Ohai属性,chef-infra,ohai-gem,Chef Infra,Ohai Gem,我为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
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
,则不会返回任何内容 您的插件提供了mycustom
,因此新的Mash及其值将位于节点['mycustom']
下。您的示例将导致节点['mycustom']['mycustom\u key']
我可以看到一个问题,在循环的每次迭代中,您都要替换mycustom
Mash,这样您最终只能得到一个最终值,但您仍然应该得到一个
由于您已经通过提供“mycustom”
获得前缀节点['mycustom']
,因此您可以将属性直接放在其下方,而不是为密钥构建一个包含mycustom
的字符串
Ohai.plugin(:Mycustom)do
提供“mycustom”
收集数据做什么
mycustommash.new
configs=[“sss=fdf”,“tryet=werw”]
Ohai::Log.info“添加#{configs.length}Ohai参数……”
提取字符串键值(配置)。每个do键、val
Ohai::Log.debug“获取密钥[#{key}]val[#{val}]”
如果key.length==0,则下一步
mycustom[key.downcase]=val
终止
终止
def extract_string_key_values数组
#在=上拆分数组值,并从所有元素中去除空白
array.map{| keyval | keyval.split('=').map(&:strip)}
终止
终止
这是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"
运行chef后,您应该能够使用knife
查看节点mycustom
属性
knife node show <nodename> -a mycustom
刀节点显示-mycustom
ohai
将在每次厨师跑步开始时自动运行,以填充自动属性。你是如何安装ohai的插件的?添加了ohai食谱,将mycustom.rb添加到ohai/files/default/并上传。从日志中可以看到,该文件正在运行。但添加的属性并不存在