【Ansible】循环/条件执行任务、任务的错误处理
默认情况下,如果某一任务失败,play 将中止,可以通过跳过失败的任务来覆盖此行为。:默认情况下,如果通知处理程序的任务失败,则该处理程序也会被跳过。有时,在任务更改系统时,可能需要运行进一步的任务。- always: 定义始终都独立运行的任务,不论 block 和 rescue 子句中定义的任务是成功还是失败。指定任务失败:任务本身可以成功,但希望基于某标准将任务标记为失败。将 failed_w
怎么利用循环迭代任务?
一个简单的循环在一个 items 列表上迭代一个任务。task 中添加 loop 关键字,并将 items 列表进行迭代。循环变量 item 保存每次迭代期间使用的值
loop 列表可以用变量表示:
循环字典列表:
也可将 register 关键字用于输出循环的结果
怎样进行有条件的运行任务?
语法:when:
when 表达式不属于模块,必须放在模块外部
单个条件:
注意:用于测试条件中相等的 == 运算符不可与变量赋值的 = 运算符混淆 
多个条件:
- 一个 when 语句可用于评估多个值。为此,可以使用 and 和 or 关键字组合条件,或使用括号分组条件
- 在组合使用 when 和 loop 时,when 语句将对loop的每一项目进行处理
- 捕捉一个play的结果作为条件
为什么使用Ansible处理程序?它的执行时机?
有时,在任务更改系统时,可能需要运行进一步的任务。例如,更改服务配置文件时可能要求重新加载该服务以使更改的配置生效 。
- handler 程序响应由其他任务触发通知的任务。在 playbook 中任务块的末尾触发。如果包含 notify 的任务没有执行(例如,软件包已经安装),则 handler程序不会获得通知,它就不会运行。只有相关任务获得了 CHANGED 状态,Ansible 才会通知处理程序。
- 如果有一个或多个任务通handler 程序它会在play 中所有其他任务完成后仅运行一次
- 因为 handler 程序就是任务,所以管理员可以在 handler 程序中使用各种模块。通常,handler 程序被用于重新引导主机和重新启动服务
- 处理程序名称存在于全局命名空间中。如果两个处理程序被错误地给予相同的名称,则仅会运行一个
有哪些管理Play中任务错误的方法?
忽略任务失败:默认情况下,如果某一任务失败,play 将中止,可以通过跳过失败的任务来覆盖此行为。需要在任务中使用 ignore_errors 关键字
强制执行处理程序:默认情况下,如果通知处理程序的任务失败,则该处理程序也会被跳过。使用 force_handlers: yes 关键字来覆盖此行为
指定任务失败:任务本身可以成功,但希望基于某标准将任务标记为失败。将 failed_when 关键字用于任务。
示例:
覆盖 changed 状态:如果任务不在受管主机上执行任何更改,处理程序会被跳过。changed_when 关键字可用于覆盖 changed 状态,处理程序依然执行。例如,如果管理员希望在每次运行 playbook 时重新启动某一服务
三个关键字block、rescue、always内容的处理策略?
- block: 定义要运行的主要任务
- rescue: 定义将在 block 子句中定义的任务失败时运行的任务
- always: 定义始终都独立运行的任务,不论 block 和 rescue 子句中定义的任务是成功还是失败
更多推荐


所有评论(0)