如何阻止剧本进一步运行?

时间:2019-04-27 20:09:49

标签: ansible

我正在写一部剧本来运行脚本。该脚本停止多个服务。我想如果任何服务都无法停止,则剧本不应在更多服务器上继续运行。我该如何实现?

下面是我的剧本(脚本名称为/opt/stopper.sh)

---
- hosts: dev
  become: true
  become_user: root
  tasks:
  - name: Stopping Services
    shell: /opt/stopper.sh > /tmp/out 2>&1
    register: app_check
  - debug: msg="Services stopped"
    when: app_check.rc == 0
  - name: Log Message for Stopper
    command: cat /tmp/out
    register: mylog
  - debug: msg="{{ mylog.stdout_lines }}"

1 个答案:

答案 0 :(得分:1)

Task关键字any_errors_fatal: yes可以满足您的要求,并且您应该使用is failed而不是.rc输出,因为任务可能由于多种原因而失败

您还需要确保/opt/stopper.sh实际上会{strong>退出,如果它不能执行应做的事情,则使用非零退出代码退出,通常通过放置{{ 1}}放在脚本的顶部-这始终是一个强烈建议的默认设置。

也就是说,如果您的剧本能够以脚本无法确定的方式来确定失败(例如,set -e包含“ egad”之类的东西),则可以使用适当地, fail:并将其/tmp/out移至播放级别(或者,我想将其复制到新的any_errors_fatal:任务中)