Ansible: Liste vom Diktatfilter abrufen

Erstellt am 25. März 2016  ·  3Kommentare  ·  Quelle: ansible/ansible

PROBLEMTYP

  • Feature-Idee
    ZUSAMMENFASSUNG

Angenommen, Sie haben ein Array von Wörterbüchern und möchten ein Array mit einigen Wörterbuchattributen erstellen. Dazu gibt es mehrere Methoden: selectattr, map und den neuen Extract -Filter.

Das funktioniert großartig, bis Sie sich entscheiden, Hosts einer Gruppe als anfängliches Array von Wörterbüchern zu verwenden. Sie müssen also hostvars für jeden Host in einer Gruppe mit einem Filter erhalten. Wir können dies normalerweise mit einigen Jinja-Iterationen umgehen, aber das funktioniert nicht beim Setzen von Variablen.

Das heißt, es gibt eine Lösung :

def fetchlistfromdict(d, l):
    result = []
    for item in l:
        result.append(d[item])

    return result

class FilterModule(object):
    def filters(self):
        return {
            'fetchlistfromdict': fetchlistfromdict,
        }

Und nun:

{{ hostvars|fetchlistfromdict(groups['webservers']) |map(attribute='custom_facts.aliases.0.ip')|list}}

Dieser Fall scheint sehr spezifisch zu sein und könnte mit dem route53 Modul zusammenhängen.

Können wir diesen Filter also zu Ansible hinzufügen? Soll ich eine PR machen? Was ist mit der Namensgebung? Ich habe das Original gespeichert, aber list_from_dict sieht für mich besser aus.

feature

Hilfreichster Kommentar

Dieses Beispiel sollte in die Dokumentation aufgenommen werden. Ich suche ziemlich lange, bevor ich dieses Problem fand.

Alle 3 Kommentare

{{ hostvars|fetchlistfromdict(groups['webservers']) |map(attribute='custom_facts.aliases.0.ip')|list}}

Was macht das anders als

{{ groups['webservers']|map('extract', hostvars, ['custom_facts','aliases','0','ip'])|list }}

?

@amenonsen guter Punkt, ich habe nur versucht, das mit map(attribute= hinzubekommen, sieht so aus, als ob der neue Extraktfilter die Arbeit erledigt, und freue mich darauf, in einer neuen Version damit zu spielen!

Dieses Beispiel sollte in die Dokumentation aufgenommen werden. Ich suche ziemlich lange, bevor ich dieses Problem fand.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen