No Ansible, você pode precisar executar várias ações que notificam um manipulador comum. Um exemplo disso pode ser se você estiver estabelecendo vários arquivos de configuração para um aplicativo e precisar reiniciar um serviço se algum desses arquivos mudar.
Normalmente, você faria isso na seção ‘tarefas’:
- name: template the first thing and restart on change
template: src=templates/foo.j2 dest=/etc/splat/foo.conf
notify:
- restart fooserv
- name: template the second thing and restart on change
template: src=templates/bar.j2 dest=/etc/splat/bar.conf
notify:
- restart fooserv
- # etc for all the things you need to template
Isso pode ser simplificado usando “with_items” e uma única instrução de notificação. Se alguma das tarefas mudar, o serviço será notificado exatamente da mesma maneira que precisa ser reiniciado 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', b: '/etc/splat/foo.conf' }
- { src: 'templates/bar.j2', b: '/etc/splat/bar.conf' }
notify:
- restart fooserv
Observe que, como temos tarefas que usam mais de um argumento único, 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 desejar. 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 que você estava percorrendo em outro arquivo, como um arquivo “group vars / webservers” para definir todas as variáveis necessárias para o grupo webservers, ou um arquivo YAML carregado da diretiva “vars files” dentro do livro de cantadas. Veja como isso pode limpar se o fizermos.
- name: template everything for fooserv
template: src=${item.src} dest=${item.dest}
with_items: ${fooserv_template_files}
notify:
- restart fooserv