循环
with_items
/home/ansible/hosts 配置清单
1 2 3
| test3 test4 192.168.27.7
|

当想要获取第二条主机名时可以使用{{groups.ungrouped[1]}}
来进行获取。

可以在playbook中使用with_items进行循环
1 2 3 4 5 6 7 8
| --- - hosts : test3 tasks : - name : 输出未分组的主机的主机名 with_items : "{{groups.ungrouped}}" debug : msg : "{{item}}"
|
自定义列表进行循环
1 2 3 4 5 6 7 8 9 10 11
| --- - hosts : test3 tasks : - name : 自定义一个列表进行循环 with_items : - 1 - 2 - 3 debug : msg : "{{item}}"
|
循环复杂列表
1 2 3 4 5 6 7 8 9
| --- - hosts : test3 tasks : - name : 循环复杂列表 with_items: - {test1 : 1, test2 : 2} - {test1 : "a", test2 : "b"} debug : msg : "{{item.test1}}"
|
初步实际运用
循环创建文件
1 2 3 4 5 6 7 8 9 10 11 12 13
| --- - hosts : test3 vars : dirs : - "/opt/a" - "/opt/c" - "/opt/b" tasks : - name : 循环创建文件 with_items : "{{dirs}}" file : path : "{{item}}" state : touch
|
with_list
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| --- - hosts : test3 tasks : - name : 循环输出列表 with_list : - [1,2,3] - [a,b,c] debug : msg : "{{item}}" ``` 
合并对齐:两个列表中相同位置的元素合并 ```YAML --- - hosts : test3 tasks : - name : 对其合并 with_together : - [1,2,3] - [a,b,c] debug : msg : "{{item}}"
|

若不能对齐的情况
1 2 3 4 5 6 7 8 9
| --- - hosts : test3 tasks : - name : 对其合并 with_together : - [1,2,3,4] - [a,b,c] debug : msg : "{{item}}"
|
with_cartesian
交叉组合
1 2 3 4 5 6 7 8 9
| --- - hosts : test3 tasks : - name : 对其合并 with_cartesian : - [1,2,3] - [a,b,c] debug : msg : "{{item}}"
|
with_sequence
按照顺序生成数字序列
1 2 3 4 5 6 7 8 9 10
| --- - hosts : test3 tasks : - name : 按照顺序生成数字序列 with_sequence : start=1 end=10 stride=2 debug : msg : "{{item}}"
|

步长可以设定为负数,则表示递减,相应的start要比end数值大。
还有一种简写方式 ,简写方式默认stride为1,start为1
1 2 3 4 5 6 7 8
| --- - hosts : test3 tasks : - name : 简写方式 with_sequence : count=5 debug : msg : "{{item}}"
|
with_random_choice
随机返回列表中一个值
1 2 3 4 5 6 7 8 9 10 11
| --- - hosts : test3 tasks : - name : 随机返回列表中一个值 with_random_choice : - 1 - 2 - 3 - 4 debug : msg : "{{item}}"
|
with_dict
循环键值对
1 2 3 4 5 6 7 8 9 10 11
| --- - hosts : test3 vars : users : name : xiaoming age : 10 tasks : - name : 循环键值对 with_dict : "{{users}}" debug : msg : "{{item}}"
|
with_file
循环读取ansible管理端主机本地的多个文件
1 2 3 4 5 6 7 8 9 10 11 12
| --- - hosts : test3 vars : files: - /opt/test/a - /opt/test/b - /opt/test/c tasks : - name : 循环读取ansible管理端主机本地文件 with_file: "{{files}}" debug : msg : "{{item}}"
|
with_fileglob
在ansible管理端匹配文件名称,不会匹配到目录
1 2 3 4 5 6 7
| --- - hosts : test3 tasks : - name : 配置/opt/test/下的所有文件 with_fileglob : /opt/test/* debug : msg : "{{item}}"
|