是否可以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")