Mi caso de uso es el siguiente:
Tengo un archivo de plantilla y me gustaría crear 2 archivos diferentes a partir de esa plantilla, con las variables llenas de un conjunto diferente de variables para cada archivo.
Por ejemplo, digamos que quiero modelar el archivo que contiene la línea:
mkdir -p {{myTemplateVariable}}
Me gustaría encontrar una forma adecuada de llenar esta variable con "Archivo1" y "Archivo2". Algo como :
- name: template test 1
template:
src=myTemplateFile
dest=result1
- name: template test 2
template:
src=myTemplateFile
dest=result2
donde podría especificar para la primera plantilla que la variable a usar es a = "Archivo1" y para la segunda, b = "Archivo2".
ansible
ansible-template
Kestemont Max
fuente
fuente
Respuestas:
Para Ansible 2.x:
Para Ansible 1.x:
Desafortunadamente, el
template
módulo no admite el paso de variables, que se pueden usar dentro de la plantilla. Hubo una solicitud de función pero fue rechazada.Puedo pensar en dos soluciones:
1. Incluir
La
include
declaración admite el paso de variables. Por lo tanto, podría tener sutemplate
tarea dentro de un archivo adicional e incluirlo dos veces con los parámetros adecuados:my_include.yml:
main.yml:
2. Vuelva a definir myTemplateVariable
Otra forma sería simplemente volver a definir myTemplateVariable justo antes de cada
template
tarea.fuente
Con Ansible 2.x puedes usarlo
vars:
con tareas.Plantilla
test.j2
:Libro de jugadas:
Esto pasará diferentes
myTemplateVariable
valores a test.j2.fuente
Puedes hacer esto muy fácil, mira mi receta de Supervisor:
job.conf.j2:
Salida:
¡Disfrutar!
fuente
Esta es una solución / truco que estoy usando:
tasks / main.yml:
vars / main.yml
templates / test.j2:
Después de ejecutar esto, obtiene
this is var_a
en / tmp / templateA ythis is var_b
en / tmp / templateB.Básicamente, abusa
with_items
de representar la plantilla con cada elemento de la lista de un elemento. Esto funciona porque puede controlar cuál es la lista al usarwith_items
.La desventaja de esto es que debe usarlo
item
como nombre de variable en su plantilla.Si desea pasar más de una variable de esta manera, puede dictar los elementos de su lista de esta manera:
y luego refiérase a ellos en su plantilla de esta manera:
fuente
with_items: '{{ var_a }}'
Lo hice de esta manera.
En tasks / main.yml
y en vars / main.yml
y en templates / myTemplateFile.j2
Espero que esto resuelva tu problema.
fuente
with_dict
es la mejor solución.IMPORTANTE: Tenga en cuenta que un elemento no tiene que ser solo una cadena, puede ser un objeto con tantas propiedades como desee, por lo que puede pasar cualquier cantidad de variables.
En la plantilla tengo:
fuente
Tuve un problema similar que resolver, aquí hay una solución simple de cómo pasar variables a archivos de plantilla, el truco es escribir el archivo de plantilla aprovechando la variable. Necesita crear un diccionario (la lista también es posible), que contenga el conjunto de variables correspondientes a cada uno de los archivos. Luego, dentro del archivo de plantilla, acceda a ellos.
vea abajo:
el libro de jugadas
fuente
Otro ejemplo del mundo real usando una lista
un extracto de una plantilla para php.ini
Esta es la var
Entonces me despliego con esto
fuente