一、循环定义
循环可迭代对象,重复处理每条信息。
基础示例:
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_items:
- 1
- 2
- 3
# 也可以 with_items: [1,2,3]
使用内置变量循环,示例如下:
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_items: "{{groups.ungrouped}}"
复杂字段的循环,示例如下:
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item.test1}}"
with_items:
- { test1: a, test2: b }
- { test1: c, test2: d }
循环结果的存储与读取,通过register,把模块执行的结果存储到变量中,命令的结果,以列表形式存在returnvalue.results,示例如下:
---
- hosts: test70
gather_facts: no
tasks:
- shell: "{{item}}"
with_items:
- "ls /opt"
- "ls /home"
register: returnvalue
- debug:
msg: "{{item.stdout}}"
with_items: "{{returnvalue.results}}"
二、循环特殊关键字
2.1、with_list
当处理单层的简单列表时,with_list与with_items没有任何区别,只有在处理上例中的"嵌套列表"时,才会体现出区别,区别就是,with_items会将嵌套在内的小列表"拉平",拉平后循环处理所有元素,而with_list则不会"拉平"嵌套的列表,with_list只会循环的处理列表(最外层列表)中的每一项。
with_items的嵌套的列表(序列中的序列),示例如下:
# 结果为 1, 2, 3, a, b
# 每个循环的列表项,也展开
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_items:
- [ 1, 2, 3 ]
- [ a, b ]
使用with_list:
# 结果为 [1, 2, 3], [a, b]
# 外层列表循环,每个项的列表内容不循环
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{item}}"
with_list:
- [ 1, 2, 3 ]
- [ a, b ]
2.2、with_flattened
该关键字与with_items效果完全相同
2.3、with_together
两列表一一对应聚合,示例如下:
# 结果为: [1, a], [2, b], [3, c]
---
- hosts: test70
remote_user: root
gather_facts: no
tasks:
- debug:
msg: "{{ item }}"
with_together:
- [ 1, 2, 3 ]
- [ a, b, c ]
如果两列表长度不一致,一一对应时,无数据的,用null补齐。
2.4、with_cartesian
1