dynamic访问puppet类variables

是否可以dynamic访问类中的variables? 例如:

class namespace::hello() { $cow = "moo" $dog = "bark" } $dynamic = 'cow' $value = $namespace::hello::[$dynamic] # doesn't work 

我这样做是因为我有他们为每个环境定义variables的类,例如:

 class company::env::production { $dns = "1.2.3.4" } class company::env::office { $dns = "2.3.4.5" } 

我find了一个讨厌的解决办法。 我希望有人能给我一个更好的select。

通过在inline_template使用scope.lookupvar ,可以引用一个dynamicvariables:

 inline_template("<%= scope.lookupvar('$namespace::hello::${dynamic}') %>") 

更新

由于解决scheme的复杂性,我只是在黑客身上做了一个破解。 我做了一个自定义的函数,就是这样做的:

 module Puppet::Parser::Functions newfunction(:config, :type => :rvalue) do |arguments| if arguments.size != 2 raise(Puppet::ParseError, "config(): 2 args required)") end env = arguments[0] var = arguments[1] lookupvar("::company::env::#{env}::#{var}") end end 

并在你的.pp

 $dns_server = config("production", "dns_server")