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

Ansible - несколько перезагрузок сервера с множеством include_tasks

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

папка роли / myrole / tasks /:

step1.yml 
step2.yml
... 
step10.yml
main.yml

Основная задача состоит только из включенных задач.

роли / myrole / tasks / main.yml:

- include_tasks: step1.yml
- include_tasks: step2.yml
...
- include_tasks: step10.yml

site.yml

- name: Deploy myrole
  hosts: rolehosts
  remote_user: roleuser

  roles:
  - myrole

Во время развертывания сервер необходимо перезагрузить несколько раз. На данный момент каждый файл задачи содержит такие задачи:

- name: Step 10 - reboot
  become: true
  shell: sleep 2 && shutdown -r now
  async: 1
  poll: 0

- name: Step 10 - wait for server to return after reboot
  wait_for: >
    host={{ ansible_default_ipv4.address }}
    port=22
    delay=10
    timeout=120
delegate_to: localhost

Поэтому вместо того, чтобы переписывать эти задачи снова и снова в каждом stepX.yml кажется практичным использовать handler вместо. Но обработчики запускаются только в конце игры, что непрактично в этом случае, когда сервер должен быть перезагружен, например, в середине шага 5. Чтобы избежать этого, я мог бы использовать flush_handlers задача на каждом шагу.

Я не вижу здесь прибыли. Вместо того, чтобы переписывать задачи перезагрузки на каждом шаге, я бы переписал задачу flus_handlers на каждом шаге.

Есть лучший способ сделать это?

Сервер необходимо надежно перезагружать в определенные моменты на каждом этапе. Плейбук должен продолжить выполнение, когда сервер снова будет в сети.

Что-то вроде этого?

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

step_and_reboot.yml

- import_tasks: "{{ step_name }}.yml"
- shell: shutdown -r now
- local_action: wait_for

main.yml

- include_tasks: step_and_reboot.yml
  with_items:
    - step1
    - step2
    - step3
  loop_control:
    loop_var: step_name