Назад | Перейти на главную страницу

Можно ли в Ansible уведомить группу сервисов вместо отдельных?

- 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