Ansible:如何将paralel上的角色部署到不同的主机

时间:2017-01-23 15:49:26

标签: ansible ansible-playbook ansible-2.x

我有下一个main.yml,我想逐个运行角色,但是对于不同的主机并行: 例如,首先我想运行" cluster-prerequisites"在paralel中所有主机上的角色,当它完成运行" docker"角色等。

- hosts: masters:private_agent:public_agent
  remote_user: "{{user}}"
  become: True
  serial: 1
  roles:
  - role: cluster_prerequisites

- hosts: bootstrap:masters:private_agent:public_agent
  remote_user: "{{user}}"
  become: True
  serial: 1
  roles:
  - role: docker

- hosts: bootstrap
  remote_user: "{{user}}"
  become: True
  serial: 1
  roles:
  - role: prepare_bootstrap

- hosts: masters
  remote_user: "{{user}}"
  become: True
  serial: 1
  roles:
  - role: run_masters

- hosts: private_agent
  remote_user: "{{user}}"
  become: True
  serial: 1
  roles:
  - role: run_private_agents

- hosts: public_agent
  remote_user: "{{user}}"
  become: True
  serial: 1
  roles:
  - role: run_public_agents

1 个答案:

答案 0 :(得分:1)

来自Rolling Update Batch Size章节:

  

默认情况下,Ansible将尝试并行管理播放中引用的所有计算机。对于滚动更新用例,您可以使用7关键字定义Ansible应该一次管理的主机数量......

因此,如果您从播放中删除serial,Ansible将在所有正在播放的主机上同时运行任务。

通过设置serial: 1,您可以告诉Ansible逐个接收主机,并且只有在前一个任务完成所有任务时才转移到下一个主机。

通常,您希望在一堆后端服务器上进行串行运行,以批量更新它们以防止服务停机,因为部分服务器仍然可以为客户端的请求提供服务。