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 }}"
解决方案
Task 关键字any_errors_fatal: yes
将执行您想要的操作,并且您应该使用is failed
而不是仅使用.rc
输出,因为任务可能由于多种原因而失败
您还需要确保它确实/opt/stopper.sh
以非零退出代码退出,如果它不能做它应该做的事情,通常是放在脚本的顶部——这始终是一个强烈建议的默认值.set -e
也就是说,如果您的剧本能够以脚本无法确定的方式(例如,/tmp/out
包含“egad”或其他任何内容)确定失败,那么您可以适当地使用明确强制剧本失败,
fail:
并将其移动any_errors_fatal:
到玩关卡(或者,我猜是把它复制到新fail:
任务中)
推荐阅读
- python - 如何在keras中保存模型过滤器
- visual-studio - 如何从 Power BI Desktop 实时连接到 SQL Server Analysis Services?
- javascript - 从 Graphql 服务器获取数据的哪种方式更好?
- php - URL 在尝试路由时不起作用
- php - Google Adwords API PHP - 删除当前访问令牌的 Oauth2 访问权限
- php - 使用 Laravel 或 PHP 将 sting 转换为 html 代码
- c# - 返回对列表元素的引用以便能够为其赋值
- electron - (如何)我可以在 Microsoft Teams 桌面客户端中打开开发工具吗?
- scala - 谁能解释这段代码片段中 @ _* 的含义?
- java - Java中的回历日期选择器