Ansible: So passen Sie das Ausgabeformat von Kartenfiltern (mit Extrakt) an

Ansible: So passen Sie das Ausgabeformat von Kartenfiltern (mit Extrakt) an

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.2aber 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_addressesist 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 uniqueund 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.

verwandte Informationen