我有一个有多个剧本的剧本:
---
- 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并行播放这两个剧本而不是一个接一个地播放?
答案 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剧本。例如:
- 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 }
- include: druid-realtime-1.yml
- include: druid-realtime-2.yml
通过这种方法,您可以为每个剧本使用终端并继续使用您的主剧本。