Ansible: Zugriff auf Element in einer Liste von Verzeichnissen

Angenommen man hat eine folgende List of Dictionaries:

my_users:
  - name: "user1"
    password: "password!1"
    home: "/home/user1"

und man möchte an anderer Stelle das Home-Verzeichnis von „user1“ auslesen, dann geht das mit den selectattr und map Filtern.

Um dieses Ziel zu erreichen kombiniert man einfach die beiden Filter selectattr und map:

my_user_home: "{{ my_users | selectattr('name','equalto','user1') | map(attribute='home') | first }}"

Übersetzt heisst dies:

  • Wähle alle Einträge, welche das Attribut: name=user1 haben ( selectattr('name','equalto','user1') )
  • Erstelle eine Liste aus diesen Einträgen mit dem Attribut home ( map(attribute='home') )
  • Wähle den ersten Eintrag aus dieser Liste (sollte es mehrere Einträge mit name=user1 geben) ( first )

Auf der Red Hat Seite How to work with a list of dictionaries in Ansible gibt es noch viele weitere Bespiele wie man komplexe Datenabfragen in Ansible/Jinja2 machen kann.

Published by

Steven Varco

Steven ist ein Redhat RHCE- und Kubernetes CKA Zertifizierter Linux-Crack und ist seit über 20 Jahren sowohl beruflich wie auch privat auf Linux spezialisiert. In seinem Keller steht ein Server Rack mit diversen ESX und Linux Servern.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert