![是否可以在 Ansible 中异步运行 site.yml 中定义的角色,而无需打开数千个终端?](https://linux22.com/image/690377/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E5%9C%A8%20Ansible%20%E4%B8%AD%E5%BC%82%E6%AD%A5%E8%BF%90%E8%A1%8C%20site.yml%20%E4%B8%AD%E5%AE%9A%E4%B9%89%E7%9A%84%E8%A7%92%E8%89%B2%EF%BC%8C%E8%80%8C%E6%97%A0%E9%9C%80%E6%89%93%E5%BC%80%E6%95%B0%E5%8D%83%E4%B8%AA%E7%BB%88%E7%AB%AF%EF%BC%9F.png)
目前,site.yml 中定义了多个角色:
- include: role1.yml
- include: role2.yml
- include: role3.yml
- include: role4.yml
- include: role5.yml
并且它们通过发出以下命令同步运行:
ansible-playbook -i testing site.yml -u root --vault-password-file ~/.vault_pass.txt
问题
如何一次性运行site.yml中定义的角色?
讨论
它通过打开多个终端并运行来异步运行所有角色:
ansible-playbook -i testing playbook1.yml -u root --vault-password-file ~/.vault_pass.txt
ansible-playbook -i testing playbook2.yml -u root --vault-password-file ~/.vault_pass.txt
ansible-playbook -i testing playbook3.yml -u root --vault-password-file ~/.vault_pass.txt
ansible-playbook -i testing playbook4.yml -u root --vault-password-file ~/.vault_pass.txt
ansible-playbook -i testing playbook5.yml -u root --vault-password-file ~/.vault_pass.txt
答案1
看一眼剧本策略:
在 2.0 中,我们添加了一种控制播放执行的新方法,即策略,默认情况下,播放仍将按以前的方式运行,即我们所说的线性策略。所有主机将在任何主机启动下一个任务之前运行每个任务,使用分叉数(默认为 5)进行并行化。
值得尝试制定以下策略free
:
第二种策略是免费提供的 ansible,它允许每个主机尽可能快地运行直到游戏结束。
- hosts: all
strategy: free
还请检查叉子设置在ansible.cfg
:
这是与远程主机通信时生成的默认并行进程数。自 Ansible 1.3 起,fork 数自动限制为可能的主机数,因此这实际上是您认为可以处理的网络和 CPU 负载的限制。许多用户可能将其设置为 50,有些则将其设置为 500 或更多。如果您有大量主机,则更高的值将使所有这些主机上的操作完成得更快。默认值非常非常保守:
forks=5