ansible 循环
有时候写 Playbook 的时候发现写了很多的 task 都在重复引用某个模块,比如一次传输 10 个文件,就要写 10 个 task。接下来介绍使用 loops 的方式去编写 Playbook 以减少重复使用某个模块。
标准 loops
标准 loops 是我们在编写 Playbook 过程中使用最多的一种 loops ,他能直接减少编写 task 的次数,示例如下:
with_items 的值是 python list 数据结果,可以理解为每个 task 会循环读取 list 李明的值,然后 key 的名称是 item,当然 list 里面也支持 python 字典。
loops 除了标准的支持以外,还支持嵌套和散列
文件匹配 loops
文件匹配 loops 是我们编写 Playbook 的时候需要针对文件进行操作中最常用的一些循环,比如我们需要针对一个目录下指定哪个个事的文件进行处理,这个时候直接在引用的时候 用 with_fileglob 循环去匹配我们需要处理的 文件即可。 看一个例子。
with_fileglob 会匹配 root 目录下所有以 yml 结尾的文件,当中 变量 item
随机 loops
随机选择一个作为变量。
with_random_choice 会在传入的 list 中随机选择一个,与 python random 实现原理一样。
条件判断 loops
有时候执行一个 task 以后,我们需要检查这个 task 的结果是否达到了预想状态,如果没有达到我们需要的状态是,就需要退出整个 Playbook 执行过程。这个时候我们就需要对某个 task 结果一直循环检测了,示例如下
5 秒执行一次 cat /root/ansible 将结果 register 给 host 然后判断 host.stdout.startswith 的内容是否是 Master 字符串开头,如果条件成立,此 task 完成,如果条件不成立,5 秒后重试,5 次后不成立,此 task 运行失败。
版权声明: 本文为 InfoQ 作者【耳东】的原创文章。
原文链接:【http://xie.infoq.cn/article/60e528e3ba42d15b054946f71】。未经作者许可,禁止转载。
评论