
Eu sou novo no fantoche. Como tal, estou tentando encontrar a melhor maneira de configurar meus manifestos que façam sentido. Seguindo o princípio DRY (não se repita), estou tentando carregar diretivas comuns em um modelo e, em seguida, carregar diretivas específicas do ambiente a partir de um arquivo que corresponda ao ambiente. Basicamente assim:
# nodes.pp
node base_dev {
$service_env = 'dev'
}
node 'service1.ownij.lan' inherits base_dev {
include global_env_specific
}
class global_env_specific {
include shell::bash
}
# modules/shell/bash.pp
class shell::bash inherits shell {
notify{"Service env: ${service_env}": }
file { '/etc/profile.d/custom_test.sh':
content => template('_global/prefix.erb', 'shell/bash/global.erb', 'shell/bash/$service_env.erb'),
mode => 644
}
}
Mas toda vez que executo puppet agent --test
o Puppet reclama que não consegue encontrar o shell/bash/$service_env.erb
arquivo, mas verifiquei novamente se ele existe. Eu sei que var está acessível porque a instrução de notificação gera o valor esperado, então suspeito que estou fazendo o que não é permitido.
Eu sei que poderia ter um único template.erb
e passar variáveis para o modelo, o que funcionaria neste caso porque o arquivo custom.sh é pequeno e não tem muitas alterações entre ambientes, mas para configurações mais complexas (httpd, solr, etc) eu faria prefira acessar arquivos específicos do ambiente. Também estou ciente de que posso especificar caminhos de módulos específicos do ambiente, mas prefiro lidar com esse comportamento apenas no nível do modelo, em vez de ter vários diretórios com nomes próximos.
Obrigado.
Responder1
Você está usando aspas simples, 'shell/bash/$service_env.erb'
o que significa que nãovariáveis serão interpoladas. Você deve usar aspas duplas.