我正在尝试使用ansible shell模块使用不同的参数多次运行shell脚本(script1)。但是如果任何命令失败并且返回代码不是0,则任务应该失败并退出。这是我到目前为止。
- name: Run scripts
shell: "{{ item}}"
register: rslt
until: rslt.rc != 0
with_items:
- "./script1 -f add1"
- "./script1 -f add2"
- "./script1 -f add3"
此任务总是运行脚本3次,即使第一个脚本失败并返回代码(rslt.rc)而不是0.我希望任务失败并退出而不运行with_items中的后续项目如果当前执行脚本返回的返回码不是0.例如,如果第一个项目(" ./ script1 -f add1")失败,我不想要第二个和第三个项目运行和ansible任务应该失败。
我非常感谢有关如何解决这个问题的任何建议。
答案 0 :(得分:0)
不幸的是,推荐的1.9解决方案是将任务分成单独的呼叫。
Github上有一些past discussion。
您可以使用when子句而不是until来实现2.0+。
在找到非零返回码后,这将跳过剩余的任务:
- name: Run scripts
shell: "{{ item }}"
register: rslt
when: rslt is undefined or rslt.rc == 0
with_items:
...
示例输出:
TASK [Run scripts] *************************************************************
changed: [localhost] => (item=exit 0)
changed: [localhost] => (item=exit 0)
failed: [localhost] (item=exit 1) => {"changed": true, "cmd": "exit 1", "delta": "0:00:00.004414", "end": "2016-12-08 13:14:06.365437", "failed": true, "item": "exit 1", "rc": 1, "start": "2016-12-08 13:14:06.361023", "stderr": "", "stdout": "", "stdout_lines": [], "warnings": []}
skipping: [localhost] => (item=exit 0)
skipping: [localhost] => (item=exit 0)