免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 26613 | 回复: 0
打印 上一主题 下一主题

[Ansible] ansible 任务失败控制 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-12-21 14:33 |只看该作者 |倒序浏览
任务失败控制

Ansible 通常默认会确保检测模块和命令的返回码并且会快速失败 专注于一个错误除非你另作打算.

有时一条命令会返回 0 但那不是报错.有时命令不会总是报告它‘改变’ 了远程系统.本章节描述了 如何将 Ansible 处理输出结果和错误处理的默认行为改变成你想要的.

忽略错误的命令

通常情况下, 当出现失败时 Ansible 会停止在宿主机上执行.有时候,你会想要继续执行下去.为此你需要像这样编写任务:
  1. - name: cat no exist file
  2.   command: cat /root/noexist
  3.   ignore_errors: yes
复制代码


控制对失败的定义

假设一条命令的错误码毫无意义只有它的输出结果能告诉你什么出了问题,比如说字符串FAILED 现在输出结果中.


Ansible 1.4及之后的版本中提供了如下的方式来指定这样的特殊行为:
  1. - name: this command prints FAILED when it fails
  2.   command: /usr/bin/ls  -x -y -z
  3.   register: command_result
  4.   failed_when: "'FAILED' in command_result.stderr"
复制代码
Ansible 1.4 之前的版本能通过如下方式完成:
  1. - name: this command prints FAILED when it fails
  2.   command: /usr/bin/ls -x -y -z
  3.   register: command_result
  4.   ignore_errors: True

  5. - name: fail the play if the previous command did not succeed
  6.   fail: msg="the command failed"
  7.   when: "'FAILED' in command_result.stderr"
复制代码

覆写更改结果
当一个 shell或命令或其他模块运行时,它们往往都会在它们认为其影响机器状态时报告changed状态

有时你可以通过返回码或是输出结果来知道它们其实并没有做出任何更改.你希望覆写结果的
changed状态使它不会出现在输出的报告或不会触发其他处理程序:


  1. tasks:

  2.   - shell: /usr/bin/ps -ef | grep zabbix
  3.   register: zabbix_result
  4.   changed_when: "zabbix_result.rc != 2"

复制代码

文献参考链接:

本文《ansible 任务失败控制》首发于乐维,欢迎来访。



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP