首页 > 解决方案 > 串行执行中最后一个节点上的 Ansible playbook 跳过任务

问题描述

我想在 4 个服务器上一个一个地运行一些 ansible 任务,即以串行方式。但中间会有一个停顿。所以,我最后在剧本中添加了暂停,但我希望在最后一个服务器上跳过它。否则它将无缘无故地等待。请让我知道如何实现这一点。

---
- hosts: server1,server2,server3,server4
  serial: 1
  vars_files:
    - ./vars.yml

  tasks:
    - name: Variable test
      pause:
        minutes: 1

标签: ansible

解决方案


真正有趣的问题迫使我寻找一个实际的解决方案。这是我想出的最快的一个。

ansible特殊变量文档ansible_play_hosts_all变量定义如下

该剧针对的所有主机列表

该 var 中的主机列表按照在清单中找到的顺序排列。

如果您为您的游戏使用默认的库存顺序,您可以设置一个将触发任务的测试,除非当前主机是该列表中的最后一个:

when: inventory_hostname != ansible_play_hosts_all[-1]

正如@Vladimir 在下面的评论中所报告的那样,如果您从默认值更改播放顺序参数,这种方法将失效。


推荐阅读