如何并行运行多个ansible播放?

时间:2014-09-06 07:41:12

标签: ansible

我有一个有多个剧本的剧本:

---
- hosts: druid-realtime-1
  sudo: true
  roles:
  - { role: druid-realtime, du_rt_id: 1 }

- hosts: druid-realtime-2
  sudo: true
  roles:
  - { role: druid-realtime, du_rt_id: 2 }

我如何告诉ansible并行播放这两个剧本而不是一个接一个地播放?

5 个答案:

答案 0 :(得分:6)

你可以这样做

在Ansible清单中,对服务器进行分组并分配主机变量:

[druid-realtime]
druid-realtime-1 id=1
druid-realtime-2 id=2

然后引用剧本中的变量:

- hosts: druid-realtime
  sudo: true
  roles: 
    - { role: druid-realtime, du_rt_id: {{ id }} }

答案 1 :(得分:3)

在创建此帖子时不确定这是否可行,但我相信这正是您所寻找的:

http://docs.ansible.com/ansible/playbooks_async.html

这允许您阻止任务阻止,即。在继续进行下一个任务之前等待任务完成。

答案 2 :(得分:0)

要同时并行运行多个剧本,我今天写了ansible-parallel

因此,对于您的问题,将播放分为不同的yml文件并运行:

pip install ansible-parallel
ansible-parallel *.yml

答案 3 :(得分:-1)

一起解决主机问题(如果你想让他们做同样的事情)

- hosts: druid-realtime-1:druid-realtime-2

  ...

答案 4 :(得分:-1)

如果你的戏剧是孤立的,你可以分割你的剧本:1 play - > 1剧本。例如:

  • 德实时-1.yml

- hosts: druid-realtime-1 sudo: true roles: - { role: druid-realtime, du_rt_id: 1 }

  • 德实时-2.yml

- hosts: druid-realtime-2 sudo: true roles: - { role: druid-realtime, du_rt_id: 2 }

  • 保留包含其他剧本的主剧本 site.yml

- include: druid-realtime-1.yml - include: druid-realtime-2.yml

通过这种方法,您可以为每个剧本使用终端并继续使用您的主剧本。