Michael DeHaan (créateur d'Ansible) a publié un article sur CoderWall qui parle d'un problème très similaire. Vous pouvez l'ajuster et le développer en fonction de vos besoins (autorisations et droits de propriété, par exemple). La partie pertinente de l'article est ici:
Ceci peut être simplifié en utilisant " with_items" et une seule notifydéclaration. Si l'une des tâches change, le service en sera informé exactement de la même manière qu'il doit redémarrer à la fin de l'exécution du livre de lecture.
- 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 comme nous avons des tâches qui prennent plus d’un argument unique, nous ne disons pas simplement " item" dans la template:ligne ", mais nous les utilisons with_itemsavec une variable hash (dictionnaire). Vous pouvez également le raccourcir un peu en utilisant des listes, si vous le souhaitez. C'est 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, nous pourrions également définir la liste que vous parcouriez dans un autre fichier, comme un groupvars/webserversfichier " " permettant de définir toutes les variables nécessaires au webserversgroupe, ou un fichier YAML chargé à partir de la varsfilesdirective " " du playbook. Regardez comment cela peut nettoyer si nous le faisons.
- name: template everything for fooserv
template: src={{item.src}} dest={{item.dest}}
with_items: {{fooserv_template_files}}
notify:
- restart fooserv
with_fileglobfonctionne toujours à partir defiles/, vous pouvez obtenir des modèles avec../templates/mytemplate/*. stackoverflow.com/a/27407566/1695680