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?

23
demandé sur Timofey Stolbov 2015-07-02 17:09:31

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 }}"
19
répondu udondan 2015-12-23 03:51:05

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.

12
répondu user187557 2017-11-04 05:11:18

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
2
répondu user9996458 2018-07-13 11:34:34