2015-07-02 17 views
19

Ho bisogno di creare una nuova variabile dal contenuto di altre variabili. Attualmente sto usando qualcosa di simile:Modo corretto per concatenare stringhe variabili

- command: echo "{{ var1 }}-{{ var2 }}-{{ var3 }}" 
    register: newvar 

Il problema è:

  • L'utilizzo di {{ var1 }}...{{ varN }} porta troppo lunghe stringhe e molto brutto codice.
  • Uso di {{ newvar.stdout }} un po 'meglio ma confuso.
  • Utilizzo delle cache del modulo set_factfact tra le esecuzioni. Non è appropriato per me.

C'è qualche altra soluzione?

risposta

19

Buona domanda. Ma penso che non ci sia una buona risposta adatta ai tuoi criteri. Il meglio che posso pensare è usare un file extra di vars.

un compito come questo:

- include_vars: concat.yml 

E in concat.yml avete la vostra definizione:

newvar: "{{ var1 }}-{{ var2 }}-{{ var3 }}" 
6

Poiché le stringhe sono liste di personaggi in Python, possiamo concatenare le stringhe allo stesso modo in cui concatenare liste (con il segno +):

{{ var1 + '-' + var2 + '-' + var3 }} 

Se si desidera eseguire il pipe della stringa risultante per alcuni filtri, assicurati di racchiudere i bit tra parentesi:

ad es. Per concatenare i nostri 3 Vars, e ottenere un hash SHA512:

{{ (var1 + var2 + var3) | hash('sha512') }} 

Nota: questo funziona su Ansible 2.3. Non l'ho provato su versioni precedenti.