failed_when标记tasks的状态
failed_when的作用
failed_when只要用来手动标记shell脚本运行结果为错误(手动抛异常)
一般用在ansible和shell脚本结合的情况下.
shell模块只能判断shell脚本是否执行,shell脚本一旦执行,每次运行的结果都是change
针对shell脚本每次运行结果都是change的情况,我们可以使用register变量接收shell运行结果, 判断变量值后,手工将运行结果标记为错误.
或者使用fail模块输出错误信息
通过判断register变量来标记错误
---
- name: 判断register变量值来标记错误
hosts: all
tasks:
- name: 运行一个shell脚本
shell: /usr/local/bin/create_user.sh
register: run_shell_result
failed_when: "'Password missing' in run_shell_result.stdout"
# 当字符串'Password missing'在run_shell_result.stdout字段中时才标记运行结果为失败
手动修改change状态并输出错误信息
---
- name: test
hosts: servera.lab.example.com
tasks:
- shell: echo "test"
changed_when: false # 强制标记change状态为false
- fail:
msg: "shell_fail" # 手动抛出fail信息
changed_when结合notify通知调用handlers处理器
fail结合when手动输出错误
---
- name: 判断register变量来手动输出错误
hosts: all
tasks:
- name: 运行一个创建用户的脚本
shell: /usr/local/bin/create_user.sh
register: shell_run_result
ignore_errors: yes
- name: 判断变量值来手动输出错误
fail:
msg: "创建的密码错误"
when: "'Password missing' in shell_run_result.stdout"
fail模块手动输出错误
---
- name: 手动输出错误和忽略错误
hosts: all
tasks:
- name: 手动输出错误
fail:
msg: 这是手动输出fail测试
ignore_errors: yes # 忽略这个错误
- fail:
msg: 这是第二个手动输出错误