Michael DeHaan (criador do Ansible) fez um post no CoderWall que fala sobre assuntos muito semelhantes. Você pode ajustá-lo e expandi-lo de acordo com suas necessidades (como permissões e propriedade). Parte relevante da postagem está aqui:
Isso pode ser simplificado usando " with_items
" e uma única notify
instrução. Se alguma das tarefas for alterada, o serviço será notificado exatamente da mesma maneira que precisa reiniciar no final da execução do manual.
- 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 levam mais de um argumento único, não apenas dizemos " item
" na template:
linha ' ', mas usamos with_items
com uma variável de 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 navegando em outro arquivo, como um " groupvars/webservers
" arquivo para definir todas as variáveis necessárias para o webservers
grupo ou um arquivo YAML carregado da varsfiles
diretiva " " dentro do manual. Veja como isso pode ser resolvido se o fizermos.
- name: template everything for fooserv
template: src={{item.src}} dest={{item.dest}}
with_items: {{fooserv_template_files}}
notify:
- restart fooserv
with_fileglob
sempre opera a partir defiles/
, você pode obter modelos com../templates/mytemplate/*
. stackoverflow.com/a/27407566/1695680