2015-06-16 15 views
5

Ho la seguente variabile dict struttura in un playbook ansible:Come attraversare una struttura dict annidata con 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 

Ho bisogno di creare un collegamento simbolico per ciascuno dei domini server_name e server_aliases, ad esempio:

/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 

Ho il seguente compito che lavora per la 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 

ma non sono sicuro di come posso fare lo stesso per l'array di server_aliases.

Sono felice di utilizzare due attività distinte, se necessario, ma desidero evitare di dover aggiungere una variabile separata domains che duplica l'elenco di domini in una struttura piatta.

Questo Google Groups post è vicino, ma non riesco a capire come farlo funzionare per più host virtuali.

È possibile? O questo è fondamentalmente l'approccio sbagliato?

risposta

12

È possibile utilizzare with_subelements per eseguire il looping di server_aliases. Il seguente frammento

- 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

Che ha funzionato. Grazie per il tuo aiuto. – tommarshall

Problemi correlati