第四章: 控制任务条件

控制任务条件

ansible基本上是在任务状态的基础上运行的:

  • Ok
  • Changed
  • Failed
  • Skipped

这些状态决定了是否需要在主机上执行进一步的任务、或者由于某些变化是否需要通知处理器。任务也可以使用对之前的任务状态检查条件进行控制操作。

本章中,我们探讨几种在决定任务状态时影响ansible的方式:

  • 定义失败的控制。
  • 定义状态改变的控制。

定义失败

ansible的很多模块对于指定错误都有一个选项可做。错误条件高度依赖某个模块,那么这个模块就会尝试完成它。当模块返回错误,那么对应的主机会从可用主机列表移除,防止进一步的任务或处理器在那台机器上执行。此外,ansible-playbook函数或ansible执行会以非零退出,指示操作失败。 然而,我们不会限制错误发生时模块的选择。我们可以选择忽略错误或者重新定义失败条件。

忽略错误

任务的ignore_errors参数用于忽略错误。 这个参数是一个布尔值,意思是ansible能理解为true的东西。

- name: broken website
  uri:
    url: http://notahost.nodomain
  ignore_errors: true

重新定义错误条件

ignore_errors参数是一个呆板的锤子。任务使用的模块产生错误就会被忽略掉。另外,乍一看,输出仍然像是一个错误,并且可能对操作员造成困惑,它们会尝试找到出错的原因。一个更微妙的工具就是参数failed_when。这个参数就更加像一个精细手术刀,允许剧本作者对某个任务非常具体的指定构成任务的错误是什么。这个参数执行一个产生布尔结果的测试,非常类似于when参数。如果在布尔的结果是事实,那么任务就被认为是失败的。否则任务依然被认为是成功的。

在与命令或shell模块结合使用、以及在注册执行结果的时候,failed_when参数就非常有用。很多程序在执行的时候可以有很详细的非零退出码,意味着不同的事情;然而这些模块都会将非零的退出码认为是失败的。

定义状态改变

命令家族的特殊处理

抑制变化(Suppressing a change)

总结

目录

  • 第三章: 解锁Jinja2模版的能量
  • 目录: 掌握ansible(Mastering ansible)
  • 第五章: 用角色合成可重用Ansible内容

相关推荐