2014-09-04 34 views
1

我按以下方式设置了ohai的属性列表。在主厨中设置和访问自定义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,然后按顺序运行我的配方。我如何在配方的模板中访问上述设置属性?

似乎不起作用。

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

+0

'ohai属性节点'会在每位厨师开始运行时自动运行以填充自动属性。你是如何安装'ohai'插件的? – Matt 2014-09-04 19:24:21

+0

添加了ohai食谱,添加了mycustom.rb到ohai/files/default /并上传了刀。我可以从日志中看到该文件正在运行。但添加的属性不存在 – Chamila 2014-09-04 19:35:21

回答

0

你的插件提供了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" 

厨师运行后,你应该能够看到mycustomknife

knife node show <nodename> -a mycustom