如何阻止Playbook进一步运行?

问题描述 投票:0回答:1

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

下面是我的剧本(剧本名称为/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 }}"
ansible
1个回答
1
投票

任务关键字any_errors_fatal: yes将做你想要的,你应该使用is failed而不仅仅是.rc输出,因为任务可能由于一大堆原因而失败

您还需要确保/opt/stopper.sh实际上确实以非零退出代码退出,如果它无法执行它应该执行的操作,通常将set -e放在脚本的顶部 - 这总是强烈的,强烈的建议默认。

也就是说,如果你的剧本能够以脚本不能的方式确定失败(比方说,例如,/tmp/out包含“egad”或其他什么),那么你可以明确强制播放失败,恰当地使用fail:并移动any_errors_fatal:到比赛级别(或者,我想将其复制到新的fail:任务)

© www.soinside.com 2019 - 2024. All rights reserved.