Michael DeHaan (creador de Ansible) hizo una publicación en CoderWall que habla sobre un problema muy similar. Puede ajustarlo y expandirlo de acuerdo con sus necesidades (como permisos y propiedad). La parte relevante de la publicación está aquí:
Esto se puede simplificar usando " with_items
" y una sola notify
declaración. Si alguna de las tareas cambia, se notificará al servicio exactamente de la misma manera que debe reiniciarse al final de la ejecución del libro de jugadas.
- 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
Tenga en cuenta que, dado que tenemos tareas que requieren más de un argumento único, no solo decimos " item
" en la template:
línea ' ', sino que lo usamos with_items
con una variable hash (diccionario). También puede mantenerlo un poco más corto usando listas, si lo desea. Esta es una preferencia 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
Por supuesto, también podríamos definir la lista sobre la que estaba caminando en otro archivo, como un " groupvars/webservers
" archivo para definir todas las variables necesarias para el webservers
grupo, o un archivo YAML cargado desde la varsfiles
directiva " " dentro del libro de jugadas. Mira cómo esto puede limpiarse si lo hacemos.
- name: template everything for fooserv
template: src={{item.src}} dest={{item.dest}}
with_items: {{fooserv_template_files}}
notify:
- restart fooserv
with_fileglob
siempre opera desdefiles/
, puede acceder a plantillas con../templates/mytemplate/*
. stackoverflow.com/a/27407566/1695680