
Soy nuevo en esto de los títeres. Como tal, estoy tratando de encontrar la mejor manera de configurar mis manifiestos que tengan sentido. Siguiendo el principio DRY (no te repitas), estoy intentando cargar directivas comunes en una plantilla y luego cargar directivas específicas del entorno desde un archivo que coincida con el entorno. Básicamente así:
# 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
}
}
Pero cada vez que ejecuto, puppet agent --test
Puppet se queja de que no puede encontrar el shell/bash/$service_env.erb
archivo, pero verifiqué dos veces que existe. Sé que se puede acceder a la var debido a que la declaración de notificación genera el valor esperado, por lo que sospecho que estoy haciendo lo que no está permitido.
Sé que podría tener una única template.erb
y pasar variables a la plantilla, lo que funcionaría en este caso porque el archivo custom.sh es pequeño y no hay muchos cambios entre entornos, pero para configuraciones más complejas (httpd, solr, etc.) prefiere acceder a archivos específicos del entorno. También soy consciente de que puedo especificar rutas de módulos específicas del entorno, pero preferiría manejar este comportamiento simplemente a nivel de plantilla, en lugar de tener varios directorios con nombres similares.
Gracias.
Respuesta1
Está utilizando comillas simples, lo 'shell/bash/$service_env.erb'
que significa que nolas variables serán interpoladas. Debes utilizar comillas dobles.