将值(通过变量)传递给自定义函数

时间:2013-10-21 22:39:29

标签: ruby function puppet

我正在尝试这件事一段时间,但无法弄清楚我做错了什么。 这是示例函数(与原始函数类似,但散列除外,它是在原始函数中动态生成的):

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是一个事实,根据节点类型返回 win mac linux

我原本希望将 Jaguar Slackware 视为返回值,但我得到了未定义。有谁知道我做错了什么?在将 args 传递给函数方面,我还有什么遗漏吗?干杯!!

1 个答案:

答案 0 :(得分:1)

回复我自己的问题,以防google在这里寻找相同的人。对我有用的是定义cls,如下所示:

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

干杯!!