Bonne façon de concaténer les chaînes de variables
je dois créer une nouvelle variable à partir du contenu d'autres variables. Actuellement, je suis en utilisant quelque chose comme ceci:
- command: echo "{{ var1 }}-{{ var2 }}-{{ var3 }}"
register: newvar
Le problème est:
- Utilisation de
{{ var1 }}...{{ varN }}
apporte des chaînes trop longues et du code très moche. - Utilisation de
{{ newvar.stdout }}
un peu mieux, mais déroutant. - Utilisation de
set_fact
module caches fait entre les courses. Il n'est pas approprié pour moi.
y a-t-il une autre solution?
3 réponses
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 imaginer est d'utiliser un fichier vars supplémentaire.
Une tâche comme ceci:
- include_vars: concat.yml
Et concat.yml
vous avez votre définition:
newvar: "{{ var1 }}-{{ var2 }}-{{ var3 }}"
puisque les chaînes sont des listes de caractères en Python, nous pouvons concaténer les chaînes de la même manière que nous concaténons les listes (avec le signe+):
{{ var1 + '-' + var2 + '-' + var3 }}
si vous voulez faire passer la chaîne résultante dans un filtre, assurez-vous de mettre les bits entre parenthèses:
par exemple pour concaténer nos 3 vars, et obtenir un SHA512 hash:
{{ (var1 + var2 + var3) | hash('sha512') }}
Note: cela fonctionne sur Ansible 2.3. Je ne l'ai pas testé sur les versions antérieures.
aussi simple que de joindre des listes en 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