Michael DeHaan (créateur d'Ansible) a publié un article sur le site Web de la Commission européenne. CoderWall qui traite d'un sujet très similaire. Vous pouvez l'ajuster et le développer en fonction de vos besoins (comme les autorisations et la propriété). La partie pertinente de l'article est ici :
Cela peut être simplifié en utilisant " with_items
" et un seul notify
déclaration. Si l'une des tâches change, le service sera notifié exactement de la même manière qu'il doit redémarrer à la fin de l'exécution du 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
Notez que puisque nous avons des tâches qui prennent plus d'un argument unique, nous ne disons pas simplement " item
" dans le ' template:
mais utilisez with_items
avec une variable de type hash (dictionnaire). Vous pouvez également être un peu plus court en utilisant des listes, si vous le souhaitez. Il s'agit d'une préférence stylistique :
- 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
Bien sûr, on pourrait aussi définir la liste sur laquelle vous vous promenez dans un autre fichier, comme un " groupvars/webservers
"afin de définir toutes les variables nécessaires à l'exécution de l'opération. webservers
ou un fichier YAML chargé depuis le groupe " varsfiles
"à l'intérieur du playbook. Regardez comment cela peut être nettoyé si nous le faisons.
- name: template everything for fooserv
template: src={{item.src}} dest={{item.dest}}
with_items: {{fooserv_template_files}}
notify:
- restart fooserv