我正在尝试这件事一段时间,但无法弄清楚我做错了什么。 这是示例函数(与原始函数类似,但散列除外,它是在原始函数中动态生成的):
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 传递给函数方面,我还有什么遗漏吗?干杯!!
答案 0 :(得分:1)
回复我自己的问题,以防google在这里寻找相同的人。对我有用的是定义cls
,如下所示:
cls = args[0].to_sym if args[0].is_a? String
干杯!!