Майкл ДеХаан (творець Ansible) виступив із повідомленням на CoderWall, в якому розповідає про дуже схожу проблему. Ви можете налаштувати та розширити його відповідно до своїх потреб (наприклад, дозволів та прав власності). Відповідна частина публікації тут:
Це можна спростити за допомогою " with_items
" і одного notify
заяви. Якщо будь-яке із завдань зміниться, сервіс буде повідомлено точно так само, як і потрібно перезапустити в кінці запуску ігрової книги.
- 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