Ansible 具有多个主机的播放具有阻止/始终。在任一主机上播放失败后,如何让剧本退出?
我的剧本里有两个剧本(第一部和第二部)。 第一次播放play1有两个任务(A/B)。 如果任务A失败,我需要任务B也被执行,然后playbook退出。 换句话说,将跳过第2场比赛。 所以我使用了block/always方法。 当主机是单主机时,它可以正常工作。 但当我指定多个主机播放时,play2仍然被执行。 虽然play2只针对一个主机执行,但我希望playbook在play2之前退出 我试图将任何错误添加到任务A中,但是它不起作用 #单主机剧本Ansible 具有多个主机的播放具有阻止/始终。在任一主机上播放失败后,如何让剧本退出?,ansible,Ansible,我的剧本里有两个剧本(第一部和第二部)。 第一次播放play1有两个任务(A/B)。 如果任务A失败,我需要任务B也被执行,然后playbook退出。 换句话说,将跳过第2场比赛。 所以我使用了block/always方法。 当主机是单主机时,它可以正常工作。 但当我指定多个主机播放时,play2仍然被执行。 虽然play2只针对一个主机执行,但我希望playbook在play2之前退出 我试图将任何错误添加到任务A中,但是它不起作用 #单主机剧本 名称:试块1 主持人:pltB 收集事实:不
- 名称:试块1
主持人:pltB
收集事实:不
任务:
- 区块:
- 命令:“/usr/bin/hostname1”
- 调试:msg=“来自始终块1”
- 区块:
- 名称:试块2
主持人:pltB
收集事实:不
任务:
- 区块:
- 调试:msg=“结果是{{hostname\u res.stdout}”
- 调试:msg=“来自始终块2”
- 区块:
- 名称:试块1
主持人:pltB、pltA
收集事实:不
任务:
- 区块:
- 命令:“/usr/bin/hostname1”
- 调试:msg=“来自始终块1”
- 区块:
- 名称:试块2
主持人:pltB、pltA
收集事实:不
任务:
- 区块:
- 调试:msg=“结果是{{hostname\u res.stdout}”
- 调试:msg=“来自始终块2”
- 区块:
192.168.111.25:ok=1 changed=0 unreachable=0 failed=1我认为这种行为是Ansible中的一个错误,但是我将从一个解决方法开始,以获得我认为您想要的行为 变通办法 在
块
之前的ansible\u play\u batch
中用主机数注册一个事实,并在块后有一个任务/始终有一个任务在活动主机数减少时失败
来自Ansible特殊变量文档
ansible\u play\u batch
当前播放运行中受序列(也称为“batch”)限制的活动主机列表。失败/无法访问的主机不被视为“活动”
---
-主持人:全部
收集事实:不
任务:
-名称:使用播放批量大小设置事实
地方行动:
模块:设置事实
播放批次大小:{{ansible_播放批次}长度}整数}
跑一次:是的
-区块:
-名称:某些主机上的任务失败
命令:“cat test.txt”
任何致命错误:正确
始终:
-名称:来自“始终”部分的消息
调试:
msg:“调试任务成功”
-名称:如果批次大小已减小,则失败
地方行动:
模块:失败
msg:{{ansible_play_batch{length{int}}<{{play_batch_size}时,由于先前的错误而停止playbook执行
时间:ansible_play_batch | length | int
除了在控制台播放重播中正确识别故障主机外,本手册的工作原理与预期一致
问题解释
您看到的行为以及我在Ansible v2.8.1中重现的行为是,始终
部分成功完成时正在擦除错误状态,而不会触发任何错误致命条件
清除错误状态是使用重新CU的一项记录在案的功能
---
- hosts: all
gather_facts: no
tasks:
- name: set fact with play batch size
local_action:
module: set_fact
play_batch_size: "{{ ansible_play_batch|length|int }}"
run_once: yes
- block:
- name: failing task on some hosts
command: "cat test.txt"
any_errors_fatal: true
always:
- name: message from always section
debug:
msg: "Debug task success"
- name: fail if the batch size has decreased
local_action:
module: fail
msg: "Halting playbook execution due to prior error, when {{ ansible_play_batch|length|int }} < {{ play_batch_size }}"
when: ansible_play_batch|length|int < play_batch_size
run_once: true
- name: this should never run
debug:
msg: "Epic fail"