Майкл ДеХаан (творець 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