首页 > 解决方案 > 如何阻止剧本进一步运行?

问题描述

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

下面是我的剧本(脚本名称是 /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

解决方案


Task 关键字any_errors_fatal: yes将执行您想要的操作,并且您应该使用is failed而不是仅使用.rc输出,因为任务可能由于多种原因而失败

您还需要确保它确实/opt/stopper.sh以非零退出代码退出,如果它不能做它应该做的事情,通常是放在脚本的顶部——这始终是一个强烈建议的默认值.set -e

也就是说,如果您的剧本能够以脚本无法确定的方式(例如,/tmp/out包含“egad”或其他任何内容)确定失败,那么您可以适当地使用明确强制剧本失败, fail:并将其移动any_errors_fatal:到玩关卡(或者,我猜是把它复制到新fail:任务中)


推荐阅读