Eu encontrei uma solução desagradável. Espero que alguém possa me dar uma alternativa melhor.
Usando inline_template
com scope.lookupvar
, você pode fazer referência a uma variável dinâmica:
inline_template("<%= scope.lookupvar('$namespace::hello::${dynamic}') %>")
Atualizar
Devido à complexidade da solução, acabei de fazer um hack no topo desse hack. Eu fiz uma função personalizada que faz aquele forro:
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
E no seu .pp
:
$dns_server = config("production", "dns_server")