J'ai besoin de créer une nouvelle variable à partir du contenu d'autres variables. Actuellement, j'utilise quelque chose comme ceci:
- command: echo "{{ var1 }}-{{ var2 }}-{{ var3 }}"
register: newvar
Le problème est:
{{ var1 }}...{{ varN }}
apporte des chaînes trop longues et un code très laid.{{ newvar.stdout }}
un peu mieux mais déroutant.set_fact
module caches fait entre les exécutions. Ce n'est pas approprié pour moi.N 'y a-t-il pas une autre solution?
Bonne question. Mais je pense qu'il n'y a pas de bonne réponse qui corresponde à vos critères. Le mieux que je puisse penser est d'utiliser un fichier vars supplémentaire.
Une tâche comme celle-ci:
- include_vars: concat.yml
Et en concat.yml
vous avez votre définition:
newvar: "{{ var1 }}-{{ var2 }}-{{ var3 }}"
Comme les chaînes sont des listes de caractères en Python, nous pouvons concaténer des chaînes de la même manière que nous concaténons des listes (avec le signe +):
{{ var1 + '-' + var2 + '-' + var3 }}
Si vous voulez diriger la chaîne résultante vers un filtre, assurez-vous de mettre les bits entre parenthèses:
par exemple. Pour concaténer nos 3 vars et obtenir un hash sha512:
{{ (var1 + var2 + var3) | hash('sha512') }}
Note: cela fonctionne sur Ansible 2.3. Je ne l'ai pas testé sur les versions précédentes.
Aussi simple que de rejoindre des listes dans python lui-même.
ansible -m debug -a msg="{{ '-'.join(('list', 'joined', 'together')) }}" localhost
localhost | SUCCESS => {
"msg": "list-joined-together" }
Fonctionne de la même manière en utilisant des variables:
ansible -m debug -a msg="{{ '-'.join((var1, var2, var3)) }}" localhost