- name: be sure check-http.rb is copied
copy:
src: /tmp/sensu-plugins-http/bin/check-http.rb
dest: /etc/sensu/plugins/check-http.rb
remote_src: true
owner: sensu
group: sensu
mode: 0500
notify:
- restart sensu-api
- restart sensu-client
- restart sensu-server
- name: be sure check_websites.json is copied
template:
src: check_websites.j2
dest: "{{ sensu_conf_d }}/check_websites.json"
register: check_websites_config
notify:
- restart sensu-api
- restart sensu-client
- restart sensu-server
Вместо того, чтобы повторять:
notify:
- restart sensu-api
- restart sensu-client
- restart sensu-server
можно ли сделать его кратким, например:
notify:
- restart sensu-services
Ожидаемый ответ
@knowhy предложил это решение, но я ищу решение, которое способно объединить несколько перезапусков в обработчике, а не в каталоге задач
ИМХО такой функциональности нет в Ansible
на сегодняшний день.
Есть несколько более или менее уродливых обходных путей (как указано в вопросе), которые я не буду здесь повторять.
Лучшее решение, которое я могу придумать, - написать обработчик, объединяющий эти задачи. Предполагая, что обработчик в заданном вопросе просто перезапускает службы, with_items
цикл можно использовать так:
- name: restart sensu-services
service:
name: "{{ item }}"
state: restarted
with_items:
- sensu-api
- sensu-client
- sensu-server
Есть открытый запрос функции поддерживать blocks
как обработчики. Это была бы хорошая абстракция для этого варианта использования.
Есть с атрибутом слушателя.
notify:
- restart sensu-services
handlers:
- name: restart sensu api
listen: sensu-services
service: name=sensu-api state=restart ignore_errors: true
- name: restart sensu service
listen: sensu-services
service: name=sensu-service state=restart ignore_errors: true
- name: restart sensu client
listen: sensu-services
service: name=sensu-client state=restart ignore_errors: true