2014-09-04 59 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