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 notify
dé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_items
avec 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/webservers
fichier " " permettant de définir toutes les variables nécessaires au webservers
groupe, ou un fichier YAML chargé à partir de la varsfiles
directive " " 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_fileglob
fonctionne toujours à partir defiles/
, vous pouvez obtenir des modèles avec../templates/mytemplate/*
. stackoverflow.com/a/27407566/1695680