Ich versuche, die IP-Adressen der Hosts zu extrahieren, die Teil zweier Gruppen sind, und sie in einer XML-Konfigurationsdatei zu verwenden.
Das Problem, mit dem ich hier konfrontiert bin, ist die Ausgabe, die durch den in der Jinja-Vorlage verwendeten Ausdruck generiert wird. Ich möchte eine Ausgabe wie diese erzielen, 10.3.5.1,10.3.5.2,10.3.5.2
aber stattdessen erhalte ich etwas wie diese [u'10.3.5.1],[u'10.3.5.2],[u'10.3.5.2]
.
Dies ist der in der Jinja-Vorlage verwendete Ausdruck:
<member1>{{ (groups['group_one']+groups['group_two']) | map('extract',hostvars,'ansible_ip_addresses') | list | unique | join(',') }}</member1>
Ich habe auch einige andere Filter ausprobiert, konnte jedoch nicht das erwartete Ergebnis erzielen.
Welche Filter soll ich dafür verwenden? (Ich konnte keine passenden finden)
Antwort1
ansible_ip_addresses
ist eine Liste, Sie haben also eine Liste (von Hosts) mit verschachtelten Listen (mit IP-Adressen).
Wahrscheinlich möchten Sie es vor dem Auftragen glätten unique
und join
:
{{ (groups['group_one']+groups['group_two']) | map('extract',hostvars,'ansible_ip_addresses') | list | sum(start=[]) | unique | join(',') }}
Dadurch wird eine flache Liste mit einer einzelnen IP-Adresse als Element erstellt. Anschließend werden eindeutige Elemente genommen und mit Kommas verbunden.