2015-06-16 5 views
5

Ich habe folgenden dict Strukturvariable in einem ansible Textbuch:Wie durchläuft eine verschachtelte dict-Struktur mit Ansible?

apache_vhosts: 
- name: foo 
    server_name: foo.com 
    server_aliases: 
    - a.foo.com 
    - b.foo.com 
    - c.foo.com 
- name: bar 
    server_name: bar.com 
    server_aliases: 
    - d.bar.com 
    - e.bar.com 
    - f.bar.com 

Ich brauche eine symbolische Verknüpfung für jede der server_name und server_aliases Domänen zu erstellen, zum Beispiel:

/tmp/foo.com  -> /var/www/foo 
/tmp/a.foo.com -> /var/www/foo 
/tmp/b.foo.com -> /var/www/foo 
/tmp/c.foo.com -> /var/www/foo 
/tmp/bar.com  -> /var/www/bar 
/tmp/d.bar.com -> /var/www/bar 
/tmp/e.bar.com -> /var/www/bar 
/tmp/f.bar.com -> /var/www/bar 

Ich habe folgende Aufgabe die arbeitet für die server_name:

- name: Add a domain symlinks /tmp for server_name. 
    file: 
    src: "/var/www/{{ item.name }}" 
    dest: "/tmp/{{ item.server_name }}" 
    state: link 
    with_items: apache_vhosts 

Aber ich bin nicht sicher, wie ich tun kann, das gleiche für das Array von server_aliases.

Ich bin glücklich, zwei separate Aufgaben bei Bedarf zu verwenden, aber ich bin daran interessiert zu vermeiden, eine separate domains Variable hinzufügen, die die Liste der Domänen in einer flachen Struktur dupliziert.

Diese Google Groups post ist in der Nähe, aber ich kann nicht herausfinden, wie es funktioniert für mehrere virtuelle Hosts.

Ist das möglich? Oder ist das grundsätzlich der falsche Ansatz?

Antwort

12

Sie können with_subelements verwenden, um die server_aliases zu durchlaufen. Das folgende Schnipsel

- name: Add a domain symlinks /tmp for server_name. 
    debug: msg="{{ item.server_name }}" 
    with_items: apache_vhosts 
    - name: Add a domain symlinks /tmp for server_aliases. 
    debug: msg="name - {{ item.0.name }} and serverAlias - {{ item.1 }}" 
    with_subelements: 
    - apache_vhosts 
    - server_aliases 
+0

Das hat funktioniert. Danke für deine Hilfe. – tommarshall

Verwandte Themen