我想在4台服务器上一个接一个地运行一些烦人的任务,即以串行方式。但是两者之间会有一个停顿。因此,我在剧本中最后添加了暂停,但是我希望在最后一个服务器上跳过它。否则它将无故等待。请让我知道如何执行此操作。
---
- hosts: server1,server2,server3,server4
serial: 1
vars_files:
- ./vars.yml
tasks:
- name: Variable test
pause:
minutes: 1
答案 0 :(得分:2)
一个非常有趣的问题,迫使我寻找一个实际的解决方案。这是我想出的最快的方法。
ansible special variables documentation如下定义ansible_play_hosts_all
变量
该剧所针对的所有主机的列表
该var中的主机列表按在清单中找到的顺序排列。
假设您使用默认广告资源order进行播放,则可以设置一个测试,除非当前主机是列表中的最后一个主机,否则它将触发任务:
when: inventory_hostname != ansible_play_hosts_all[-1]
如@Vladimir在下面的评论中所报告的,如果将播放顺序参数更改为默认值,则此方法将无效。
答案 1 :(得分:1)
下面的剧本可以完成任务
- hosts: all
serial: 1
vars:
completed: false
tasks:
- set_fact:
completed: true
- block:
- debug:
msg: All completed. End of play.
- meta: end_play
when: "groups['all']|
map('extract', hostvars, 'completed')|
list is all"
- name: Variable test
pause:
minutes: 1
注释