【Ansible】实施任务控制知识点
1.如何实现循环?
答:使用loop关键字定义循环列表,任务中通过{{ item }}引用当前元素。
2.什么是when语句?
答:when语句用于有条件地运行任务。它取要测试的条件作为值。如果条件满足,则运行任务。如何条件不满足,则跳过任务。其后跟随条件表达式(支持比较、逻辑运算、事实引用)。可以使用and和or关键字来评估多个条件,除此之外when语句还可以和循环loop组合使用(效率低,不推荐)。
3.处理程序的概念
答:处理程序可视为非活动任务,只有在使用notify语句显式调用时才会被触发。且无论被触发多少次,最终只执行一次。通常用于重新引导主机和配置变更后的服务重启。
4. 使用处理程序注意事项?
答:-处理程序始终按照play 的handlers部分指定的顺序运行。它们不按在任务中由notify语句列出的顺序运行,或按任务通知它们的顺序运行。
-处理程序通常在相关play中的所有其他任务完成后运行。playbook的tasks部分中某一任务调用的处理程序,将等到tasks 下的所有任务都已处理后才会运行。
-处理程序名称存在于各play命名空间中。如果两个处理程序因出错而同名,则只会运行其中一个。
-即使有多个任务向处理程序发出通知,该处理程序也只会运行一次。如果没有任务向处理程序发出通知,则处理程序不会运行。
-如果包含notify语句的任务没有报告changed结果(例如,软件包已安装并且任务报告ok),则处理程序不会获得通知。只有相关任务报告了changed状态,Ansible才会通知处理程序。
5.处理任务失败的方式
答:忽略任务失败:默认情况下,任务失败时play会中止。设置ignore_errors:yes,则任务失败时,会忽略失败。
失败后强制执行处理程序:在play中设置force_hand lers:yes关键字会强制执行任务失败后面的程序。
指定任务失败条件:在任务中使用failed_when关键字来指定表示任务已失败的条件。通常用于可能成功执行命令,但命令输出指示失败的命令模块。
指定任务何时报告"Changed"结果:使用changed_when关键字可以控制任务如何报告其已更改受管主机上的某些内容。
6. Ansible块和错误处理
答:在playbook中,块是对任务进行逻辑分组的子句,可用于控制任务的执行方式。
-block:定义要运行的主要任务。
-rescue:定义要在block子句中定义的任务失败时运行的任务。
-"always:定义始终都独立运行的任务,不论block和rescue子句中定义的任务是成功还是失败。