it-swarm.com.de

Ordnungsgemäße Verkettung variabler Zeichenfolgen

Ich muss eine neue Variable aus Inhalten anderer Variablen erstellen. Momentan benutze ich so etwas:

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

Das Problem ist:

  • Benutzung von {{ var1 }}...{{ varN }} bringt zu lange Zeichenfolgen und sehr hässlichen Code.
  • Benutzung von {{ newvar.stdout }} etwas besser aber verwirrend.
  • Benutzung von set_fact Modul-Caches Tatsache zwischen den Läufen. Das passt mir nicht.

Gibt es eine andere Lösung?

33
Timofey Stolbov

Gute Frage. Aber ich denke, es gibt keine gute Antwort, die Ihren Kriterien entspricht. Das Beste, was mir einfällt, ist die Verwendung einer zusätzlichen VARS-Datei.

Eine Aufgabe wie diese:

- include_vars: concat.yml

Und in concat.yml Sie haben Ihre Definition:

newvar: "{{ var1 }}-{{ var2 }}-{{ var3 }}"
27
udondan

Da Strings Listen von Zeichen in Python sind, können wir Strings auf dieselbe Weise verketten wie Listen (mit dem + -Zeichen):

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

Wenn Sie die resultierende Zeichenfolge an einen Filter weiterleiten möchten, müssen Sie die Bits in Klammern setzen:

z.B. Um unsere 3 Variablen zu verketten und einen sha512-Hash zu erhalten:

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

Hinweis: Dies funktioniert mit Ansible 2.3. Ich habe es in früheren Versionen nicht getestet.

20
user187557

So einfach wie das Verbinden von Listen in python selbst.

ansible -m debug -a msg="{{ '-'.join(('list', 'joined', 'together')) }}" localhost

localhost | SUCCESS => {
  "msg": "list-joined-together" }

Funktioniert genauso mit Variablen:

ansible -m debug -a msg="{{ '-'.join((var1, var2, var3)) }}" localhost
10
user9996458