Перезапуск прокатки с помощью Ansible handlers

Я хочу запустить ansible playbook, который устанавливает службу и перезапускает ее, если что-то изменилось с момента последнего запуска (более или менее канонический вариант использования для обработчиков ansible).

но я хочу разные параллельность для установки, чем для перезапуска: я хочу установить на всех хостах одновременно, но, если вызывается обработчик "service-restart", я хочу, чтобы это работало на хостах X одновременно.

Я знаю, что это возможно с разных спектаклей разные serial значения. Но я не вижу, как я могу использовать обработчиков, если я пойду по этому маршруту. И я не могу позволить себе иметь ни одной книги с serial значение 2, так как в большинстве случаев ничего не изменится для этой службы.

могут ли обработчики охватывать несколько игр? Или есть другой способ сделать это без взломов?

2 ответов


В настоящее время это невозможно. Есть выпуск oppened для этого.


обработчики-это просто задачи, которые Ansible будет запускать в конце игры, если это необходимо. Учитывая, что они неявно добавляются в конец вашей игры, они будут рассматриваться так же, как и любые другие задачи, насколько параметры, такие как serial перейти. К сожалению, это означает, что без запроса функции, который принимают разработчики Ansible, вы вряд ли увидите изменение в поведении serial чтобы поддержать то, что вы пытаетесь сделать.

Я знаю, вы упомянули, что хотите избежать хаков, но это будет единственный способ сделать что-то подобное на данный момент. Не должно быть слишком сложно настроить что-то, что не является основным взломом, например, создать временный файл, чтобы отметить перезапуск:

- hosts: some_hosts
  name: install service
  serial: 10
  - handlers:
      - name: schedule restart
        command: touch /tmp/restart_flag
  - tasks:
      - name: install service
        action: whatever...
        notify: schedule restart

- hosts: some_hosts
  name: restart service
  serial: 2
  - handlers:
    - name: perform restart
      service: name=foo state=restarted
  - tasks:
    - name: Delete /tmp/restart_flag. Restart service if file is deleted.
      file: path=/tmp/restart_flag state=absent
      notify: perform restart