2016-10-26 2 views
1

Ich habe eine Liste von Domains:Iterate über eindeutige Liste von String erstellt aufgeteilt

--- 
domains: 
- foo.bar 
- baz.bar 

ich Aufgaben haben, wo ich über diese Domains iterieren, extrahieren Domain Schwanz, eine einzigartige Liste dieser Schwänze machen und Erstellen Sie dann die Verzeichnisse, die von diesen Schwänzen benannt werden.

So etwas aber AFAIK jinja2 unterstützt keine Liste Verständnis:

--- 
- name: Ensure all directories exist 
    file: 
    path: "/tmp/sandbox/{{ item }}" 
    state: directory 
    with_items: "[domain.split('.')[-1] for domain in domains] | unique" 

Ist es möglich, oder benötige ich eine benutzerdefinierte jinja2 Filter erstellen? Ob das funktioniert?

--- 
- name: Ensure all directories exist 
    file: 
    path: "/tmp/sandbox/{{ item }}" 
    state: directory 
    with_items: "{{ domain_tails | my_custom_filter }}" 

Vielen Dank!

Antwort

2

können Sie dies erreichen mit map und regex_search:

- debug: msg="Ensure dir for {{ item }}" 
    with_items: "{{ domains | map('regex_search','\\w+$') | list | unique }}" 

\w+$ Spiel das letzte Wort (das heißt Domäne Schwanz nach Punkt).
Beachten Sie, dass der Schrägstrich maskiert ist, da er in Anführungszeichen steht.