Ansible playbook 在串行执行中的最后一个节点上跳过任务

标签 ansible

我想一个接一个地在 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/

相关文章:

ansible parted 自动创建分区并获取编号并动态启动

ansible - 在 with_items 中运行 with_items

mysql - Ansible 在其他变量中使用加密变量

仅在需要升级时停止服务的 Ansible 方法

conditional-statements - 如果 Apt 包丢失,则 Ansible 执行任务

variables - Ansible 剧本不会获取主机变量

azure - ansible使用私有(private)IP配置azure负载均衡器

Ansible 服务任务失败,错误为 "Could not find the requested service XXX"

kubernetes - 通过Ansible将DataDog日志注释放置在部署中的问题

ansible - 拆分变量在 Ansible 中不起作用