Майкл ДеХан (создатель Ansible) сделал пост на CoderWall, в котором говорится об очень похожей проблеме. Вы можете настроить и расширить его в соответствии с вашими потребностями (например, разрешения и права собственности). Соответствующая часть поста здесь:
Это можно упростить с помощью " with_items
" и одного notify
оператора. Если какая-либо из задач изменится, служба будет уведомлена точно так же, как она должна перезапуститься в конце прогона 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
Обратите внимание, что поскольку у нас есть задачи, которые принимают более одного уникального аргумента, мы не просто говорим « item
» в template:
строке «», но используем with_items
переменную хеша (словаря). Вы также можете сделать это немного короче, используя списки, если хотите. Это стилистическое предпочтение:
- 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
Конечно, мы могли бы также определить список, по которому вы шли, в другом файле, например, в groupvars/webservers
файле " ", чтобы определить все переменные, необходимые для webservers
группы, или в файле YAML, загруженном из varsfiles
директивы " " внутри книги воспроизведения. Посмотри, как это можно очистить, если мы это сделаем.
- name: template everything for fooserv
template: src={{item.src}} dest={{item.dest}}
with_items: {{fooserv_template_files}}
notify:
- restart fooserv
with_fileglob
всегда работает сfiles/
, вы можете добраться до шаблонов с../templates/mytemplate/*
. stackoverflow.com/a/27407566/1695680