我想一个接一个地在 4 个服务器上运行一些 ansible 任务,即以串行方式。但中间会有停顿。所以,我最后在剧本中添加了暂停,但我希望在最后一个服务器上跳过它。否则它会无缘无故地等待。请让我知道如何实现这一点。
---
- hosts: server1,server2,server3,server4
serial: 1
vars_files:
- ./vars.yml
tasks:
- name: Variable test
pause:
minutes: 1
最佳答案
真正有趣的问题迫使我寻找实际的解决方案。这是我想出的最快的一个。
ansible special variables documentation定义 ansible_play_hosts_all
变量如下
List of all the hosts that were targeted by the play
该变量中的主机列表按照它在 list 中找到的顺序排列。
如果您使用默认库存 order对于您的游戏,您可以设置一个将触发任务的测试,除非当前主机是该列表中的最后一个:
when: inventory_hostname != ansible_play_hosts_all[-1]
正如@Vladimir 在下面的评论中所报告的那样,如果您更改默认播放顺序参数,此方法将中断。
关于Ansible playbook 在串行执行中的最后一个节点上跳过任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57871897/