是否可以动态访问类中的变量?例如:
class namespace::hello() {
$cow = "moo"
$dog = "bark"
}
$dynamic = 'cow'
$value = $namespace::hello::[$dynamic] # doesn't work
我这样做是因为我为每个环境定义了带有变量的类,例如:
class company::env::production {
$dns = "1.2.3.4"
}
class company::env::office {
$dns = "2.3.4.5"
}
答案1
我找到了一个糟糕的解决方案。我希望有人能给我一个更好的选择。
通过使用inline_template
with scope.lookupvar
,您可以引用动态变量:
inline_template("<%= scope.lookupvar('$namespace::hello::${dynamic}') %>")
更新
由于解决方案的复杂性,我只能在该 hack 的基础上进行 hack。我创建了一个自定义函数,它只执行以下一行代码:
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")