Michael DeHaan (criador do Ansible) fez um post no CoderWall que fala sobre um problema muito parecido. Você pode ajustá-lo e expandi-lo de acordo com suas necessidades (como permissões e propriedade).
Parte relevante do post está aqui:
Isso pode ser simplificado usando " with_items " e uma única instrução notify . Se alguma das tarefas mudar, o serviço será notificado exatamente da mesma maneira que é necessário reiniciar no final da execução do livro de exercícios.
- 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
Observe que, como temos tarefas que exigem mais de um argumento exclusivo, não dizemos apenas " item " na linha " template: ", mas usamos with_items com uma variável hash (dicionário). Você também pode mantê-lo um pouco mais curto usando listas, se quiser. Esta é uma preferência estilística:
- 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
É claro que também poderíamos definir a lista em que você estava caminhando em outro arquivo, como um arquivo " groupvars/webservers " para definir todas as variáveis necessárias para o grupo webservers ou um arquivo YAML carregado de " varsfiles "diretiva dentro do playbook. Veja como isso pode ser limpo se o fizermos.
- name: template everything for fooserv
template: src={{item.src}} dest={{item.dest}}
with_items: {{fooserv_template_files}}
notify:
- restart fooserv