with_items
在Ansible中,with_items
是一个循环迭代模块,用于在playbook的任务中处理一个列表或字典中的元素。他将遍历一个列表或字典,并对每个元素执行一次任务。
with_items
后面跟着的是要处理的列表或字典数据。任务会按照列表顺序依次执行,每次迭代时,列表中的一个元素会被传递给任务作为变量(通常使用 {{ item }}
来引用当前迭代的元素)。
迭代列表
例如,如果有一个包含多个目录路径的列表,并且你想为每个路径创建一个目录,可以这样做:
- hosts: all
tasks:
- name: 创建多个目录
file:
path: "{{ item }}"
state: directory
with_items:
- /tmp/dir1
- /tmp/dir2
- /tmp/dir3
迭代字典
也可以使用kv形式(字典)来使用with_items
- hosts: all
tasks:
- name: 创建多个目录
file:
path: "{{ item.path }}/{{ }}"
state: touch
with_items:
- {path: /tmp/dir1, name: gg}
- {path: /tmp/dir2, name: uu}
- {path: /tmp/dir3, name: oo}
loop
在Ansible Playbook中,loop
关键字用于迭代一个列表或字典,并对每个元素执行一次特定的任务。
迭代列表
假设你有一个包含多个软件包名称的列表,你希望使用yum
模块安装这些软件包。你可以使用loop
来迭代这个列表,并为每个软件包执行安装任务。
- hosts: all
tasks:
- name: Install packages
yum:
name: "{{ item }}"
state: present
loop:
- httpd
- mysql-server
- php
迭代字典
在这个例子中,loop
迭代一个包含path
和name
字段的字典列表。首先,使用file
模块创建目录,然后在同一个block
中,使用file
模块的state: touch
参数来创建与目录同名的文件。文件被创建在相应的目录中,文件名由提供,目录路径由item.path
提供。
- hosts: all
tasks:
- name: Create directories
file:
path: "{{ item.path }}/{{ }}"
state: touch
loop:
- { path: "/tmp/directory1", name: "file1.txt" }
- { path: "/tmp/directory2", name: "file2.txt" }
- { path: "/tmp/directory3", name: "file3.txt" }