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.