Michael DeHaan (creatore di Ansible) ha pubblicato un post su CoderWall che parla di un problema molto simile. Puoi modificarlo ed espanderlo in base alle tue esigenze (come permessi e proprietà). Parte pertinente del post è qui:
Questo può essere semplificato usando " with_items
" e una singola notify
istruzione. Se una qualsiasi delle attività cambia, il servizio verrà notificato esattamente nello stesso modo in cui deve essere riavviato al termine dell'esecuzione del playbook.
- name: template everything for fooserv
template: src={{item.src}} dest={{item.dest}}
with_items:
- { src: 'templates/foo.j2', dest: '/etc/splat/foo.conf' }
- { src: 'templates/bar.j2', dest: '/etc/splat/bar.conf' }
notify:
- restart fooserv
Si noti che dal momento che abbiamo attività che accettano più di un argomento unico, non solo diciamo " item
" nella template:
riga " ", ma usiamo with_items
con una variabile hash (dizionario). Puoi anche mantenerlo un po 'più breve usando gli elenchi, se lo desideri. Questa è una preferenza stilistica:
- name: template everything for fooserv
template: src={{item.0}} dest={{item.1}}
with_items:
- [ 'templates/foo.j2', '/etc/splat/foo.conf' ]
- [ 'templates/bar.j2', '/etc/splat/bar.conf' ]
notify:
- restart fooserv
Ovviamente potremmo anche definire l'elenco su cui stavi camminando in un altro file, come un " groupvars/webservers
" file per definire tutte le variabili necessarie per il webservers
gruppo o un file YAML caricato dalla varsfiles
direttiva " " all'interno del playbook. Guarda come questo può ripulire se lo facciamo.
- name: template everything for fooserv
template: src={{item.src}} dest={{item.dest}}
with_items: {{fooserv_template_files}}
notify:
- restart fooserv
with_fileglob
funziona sempre dafiles/
, è possibile arrivare ai modelli con../templates/mytemplate/*
. stackoverflow.com/a/27407566/1695680