Mon cas d'utilisation est le suivant:
J'ai un fichier de modèle et je voudrais créer 2 fichiers différents à partir de ce modèle, les variables étant remplies par un ensemble différent de variables pour chaque fichier.
Par exemple, disons que je veux modéliser le fichier contenant la ligne:
mkdir -p {{myTemplateVariable}}
Je voudrais trouver une manière appropriée de remplir cette variable par "File1" et "File2". Quelque chose comme :
- name: template test 1
template:
src=myTemplateFile
dest=result1
- name: template test 2
template:
src=myTemplateFile
dest=result2
où je pourrais spécifier pour le premier modèle que la variable à utiliser est a = "File1" et pour le second, b = "File2".
ansible
ansible-template
Kestemont Max
la source
la source
Réponses:
Pour Ansible 2.x:
Pour Ansible 1.x:
Malheureusement, le
template
module ne prend pas en charge le passage de variables qui peuvent être utilisées dans le modèle. Il y a eu une demande de fonctionnalité, mais elle a été rejetée.Je peux penser à deux solutions de contournement:
1. Inclure
L'
include
instruction prend en charge le passage de variables. Ainsi, vous pouvez avoir votretemplate
tâche dans un fichier supplémentaire et l'inclure deux fois avec les paramètres appropriés:my_include.yml:
main.yml:
2. Redéfinissez myTemplateVariable
Une autre façon serait de simplement redéfinir myTemplateVariable juste avant chaque
template
tâche.la source
Avec Ansible 2.x, vous pouvez utiliser
vars:
avec des tâches.Modèle
test.j2
:Playbook:
Cela passera différentes
myTemplateVariable
valeurs dans test.j2.la source
Vous pouvez le faire très facilement, regardez ma recette de superviseur:
job.conf.j2:
Production:
Prendre plaisir!
la source
C'est une solution / hack que j'utilise:
tâches / main.yml:
vars / main.yml
templates / test.j2:
Après avoir exécuté ceci, vous obtenez
this is var_a
dans / tmp / templateA etthis is var_b
dans / tmp / templateB.Fondamentalement, vous abusez
with_items
de rendre le modèle avec chaque élément de la liste à un élément. Cela fonctionne car vous pouvez contrôler la liste lors de son utilisationwith_items
.L'inconvénient est que vous devez utiliser
item
comme nom de variable dans votre modèle.Si vous souhaitez passer plus d'une variable de cette façon, vous pouvez dicter les éléments de votre liste comme ceci:
puis faites-y référence dans votre modèle comme ceci:
la source
with_items: '{{ var_a }}'
Je l'ai fait de cette façon.
Dans tasks / main.yml
et dans vars / main.yml
et dans templates / myTemplateFile.j2
J'espère que ceci résoudra votre problème.
la source
with_dict
est la meilleure solution.IMPORTANT: Notez qu'un élément ne doit pas être une simple chaîne, il peut s'agir d'un objet avec autant de propriétés que vous le souhaitez, de cette façon vous pouvez passer n'importe quel nombre de variables.
Dans le modèle j'ai:
la source
J'ai eu un problème similaire à résoudre, voici une solution simple de la façon de passer des variables aux fichiers modèles, l'astuce est d'écrire le fichier modèle en tirant parti de la variable. Vous devez créer un dictionnaire (une liste est également possible), qui contient l'ensemble des variables correspondant à chacun des fichiers. Ensuite, dans le fichier modèle, accédez-y.
voir ci-dessous:
le playbook
la source
Un autre exemple du monde réel utilisant une liste
un extrait d'un modèle pour php.ini
C'est le var
Puis je déploie avec ça
la source