Ansible - 多次服务器重启并产生许多 include_tasks

Ansible - 多次服务器重启并产生许多 include_tasks

获得了一个包含许多任务的 ansible 角色。因此,这些任务被拆分到单独的文件中,以便更好地进行跟踪。

文件夹角色/myrole/tasks/:

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

主任务仅由包含任务组成。

角色/myrole/任务/main.yml:

- include_tasks: step1.yml
- include_tasks: step2.yml
...
- include_tasks: step10.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 任务。

有一个更好的方法吗?

服务器需要在每个步骤的某些点可靠地重新启动。当服务器再次上线时,剧本应该继续执行。

答案1

像这样吗?

请记住,这是一种伪代码,只是为了指出事件的顺序。

步骤和重启.yml

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

主目录

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

相关内容