
jimlu
V1
2023/04/27阅读:22主题:默认主题
ansible循环之with_item
ansible循环值with_items
案例:批量创建多个目录,写下面我们使用了3次file模块进行了实现
---
- hosts: localhost
remote_user: admin
gather_facts: no
tasks:
- name: create directory a1
file:
path: /home/admin/jin/test/a1
state: directory
- name: create directory a2
file:
path: /home/admin/jin/test/a2
state: directory
- name: create directory a3
file:
path: /home/admin/jin/test/a3
state: directory
[admin@jfedu01 jin]$ tree test
test
├── a1
├── a2
└── a3
下面通过with_item进行优化
方案1:将创建路径罗列在with_items:
---
- hosts: localhost
remote_user: admin
gather_facts: no
tasks:
- name: create directory
file:
path: "{{item}}"
state: directory
with_items:
- /home/admin/jin/test/a1
- /home/admin/jin/test/a2
- /home/admin/jin/test/a3
方案2:将不变的写在path路径上,变化的通过with_items遍历
---
- hosts: localhost
remote_user: admin
gather_facts: no
tasks:
- name: create directory
file:
path: /home/admin/jin/test/{{item}}
state: directory
with_items: [a1,a2,a3] #这里使用中括号[]或者大括号{}都行
方案3:定义一个a变量存储值,然后通过with_items遍历
---
- hosts: localhost
remote_user: admin
gather_facts: no
vars:
a:
- a1
- a2
- a3
tasks:
- name: create directory
file:
path: /home/admin/jin/test/{{item}}
state: directory
with_items: "{{a}}"
方案4:a变量的另一种写法,效果和上面一样
---
- hosts: localhost
remote_user: admin
gather_facts: no
vars:
a: {a1,a2,a3}
tasks:
- name: create directory
file:
path: /home/admin/jin/test/{{item}}
state: directory
with_items: "{{a}}"
方案5:将固定的路径和变化的目录名都定义成变量
---
- hosts: localhost
remote_user: admin
gather_facts: no
vars:
p: /home/admin/jin/test/
a: {a1,a2,a3}
tasks:
- name: create directory
file:
path: "{{p}}{{item}}"
state: directory
with_items: "{{a}}"
实战:查看test目录下的文件名,并在test1目录创建和test目录文件名一样的文件
思路:
-
通过shell模块运行ls命令查看test目录下的文件 -
通过register,定义一个变量名为results的变量,接收shell模块运行的结果 -
通过file模块创建文件,{{item}}变量用来循环接收值 -
通过with_items ,变量输出results.stdout_lines的值
---
- hosts: localhost
remote_user: admin
gather_facts: no
tasks:
- name: display file in test directory
shell: ls /home/admin/jin/test
register: results
- name: create files
file:
path: /home/admin/jin/test1/{{item}}
state: touch
# - debug:
# var: results
with_items: "{{results.stdout_lines}}"
作者介绍

jimlu
V1