测验:条件与循环
同时使用 loop 和 when 时,何时评估条件?
- 所有循环结束后
- 仅对第一个条目
- 循环开始前评估一次
- 对循环中的每个条目
不指定 loop_control.label 会产生什么实际问题?
- 没有 label 时,循环会在第一个条目结束,只运行一次
- 无法在任务正文中引用
item变量,因此不能使用其值 - 整个条目字典都会写入日志,其中的敏感值也会暴露
- 为每个条目添加的
when条件会被忽略,所有条目都会执行
使用 until/retries/delay 时,还需要作出什么判断?
- until 只有与 loop 一起使用时才有效,因此应先创建循环列表
- 重试次数越多越安全,因此应尽可能将上限设得很大
- delay 必须保持默认值 1 秒,重试才能正常工作
- 确定“如果在这段时间内仍未成功,就是真正的问题”的标准,并据此设置次数和间隔
将 3 个环境 × 2 个组件 × 5 个区域进行组合循环,会运行多少次?这意味着什么?
- 5 次:以最长列表的长度为准,其余内容被截断
- 次数取决于主机数,因此无法预先确定
- 10 次:这是列表长度之和,所以负担不大
- 30 次:执行时间和日志会按乘积增长,因此必须纳入估算
处理文件模式查询(fileglob)的结果时,需要注意什么?
- 结果总是按文件名字母顺序排列,可以直接使用
- 结果顺序没有保证,不应依赖顺序;必要时应排序
- 它只查询远程主机而不是控制节点上的文件,因此要调整路径
- 模式中不能使用通配符,必须写出所有文件名
循环任务不具备幂等性时,会出现什么症状?
- 第一次执行时从中间条目开始报错,整个循环任务失败
- loop 变量一直保留前一个条目的值,没有重新初始化
- 第二次执行时,changed 的数量与循环次数相同,导致重新执行不再安全
- 收到通知的处理程序会按循环条目数反复触发,使服务发生波动