2013-10-21 89 views
0

我在嘗試這個東西一段時間,但無法弄清楚我做錯了什麼。 下面是示例功能(這是類似於原始之一,除了散列,這是在原來的動態生成的):將值(通過變量)傳遞給自定義函數

module Puppet::Parser::Functions 
    newfunction(:am_running_oss, :type => :rvalue) do |args| 

     oss = {:linux=>["Slackware", "RedHat", "Caldera"], 
       :mac=>["Jaguar", "Lion", "Tiger", "Kodiak"], 
       :win=>["Chicago", "Daytona", "Longhorn"]} 

     cls = args[0] 

     if oss.key?(cls) 
      return oss[cls][0] 
     else 
      return 'undefined' 
     end 
    end 
end 

,然後在我的清單中,我有這樣的:

$h= am_running_oss($::am_os_type) 
notify { "=*=*= amRunningOS <|:|> ${h} =*=*=*=*=*=*=*=": } 

(am_os_type是一個事實,即返回贏得MAC的Linux基於節點類型)

我期待看到JaguarSlackware作爲返回值,但我得到的是undefined。有誰知道我做錯了什麼?有沒有什麼東西仍然遺漏了參數的功能?乾杯!!

+2

嘗試'cls = args [0] .to_sym' – tihom

+0

謝謝@tihon!那雖然不起作用。如果有這樣的散列:'{'linux'=> [「Slackware」,.....'(而不是':linux')並從清單傳遞一個靜態值,如:'$ h = am_running_oss 'mac')',那麼它工作。乾杯!! – MacUsers

+0

在函數中添加'p args [0]'和'p args [0] .class'並查看它在控制檯中的含義 – tihom

回答

1

回覆我自己的問題,以防谷歌在此尋找相同的人。對我來說,這件事是定義cls是這樣的:

cls = args[0].to_sym if args[0].is_a? String 

乾杯!

相關問題