Chef infra 在Chef中设置和访问自定义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设置了一个属性列表,如下所示

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/并上传。从日志中可以看到,该文件正在运行。但添加的属性并不存在