目录
在Ansible Playbook中,编写循环(loops)是一个常见且重要的功能,可以简化对多个相似对象的操作。以下是编写循环的方法总结及示例:
基本循环
使用with_items
with_items
是最常用的循环方法,适用于列表中的每个元素执行任务。
- name: 安装软件包
apt:
name: "{{ item }}"
state: present
with_items:
- nginx
- git
- htop
高级循环
使用with_dict
with_dict
用于迭代字典的键值对。
- name: 创建用户
user:
name: "{{ item.key }}"
uid: "{{ item.value.uid }}"
with_dict:
users:
alice:
uid: 1001
bob:
uid: 1002
使用with_list
with_list
用于处理嵌套列表。
- name: 打印嵌套列表
debug:
msg: "Outer item: {{ outer_item }}, Inner item: {{ item }}"
with_list:
- "{{ item }}"
with_items:
- ["a", "b"]
- ["c", "d"]
使用with_fileglob
with_fileglob
用于迭代匹配文件路径的列表。
- name: 复制所有模板文件
template:
src: "{{ item }}"
dest: "/etc/nginx/conf.d/{{ item | basename }}"
with_fileglob:
- "/path/to/templates/*.j2"
使用with_nested
with_nested
用于处理嵌套循环,即所有可能的组合。
- name: 安装软件包在多个主机上
command: "apt-get install {{ item[0] }} -y"
with_nested:
- ["nginx", "git"]
- ["host1", "host2"]
注册变量与循环
循环中注册变量
在循环中注册任务结果到变量。
- name: 获取文件内容
command: cat "{{ item }}"
register: file_contents
with_items:
- "/path/to/file1"
- "/path/to/file2"
- name: 打印文件内容
debug:
msg: "{{ item.stdout }}"
with_items: "{{ file_contents.results }}"
循环控制与条件
使用when
条件
在循环中使用条件判断。
- name: 安装特定条件下的软件包
apt:
name: "{{ item }}"
state: present
with_items:
- nginx
- apache2
when: ansible_os_family == "Debian"
使用loop_control
设置标签
自定义循环中的标签。
- name: 安装特定条件下的软件包
apt:
name: "{{ item }}"
state: present
with_items:
- nginx
- apache2
when: ansible_os_family == "Debian"
使用loop
关键字
loop
是with_*
系列的替代方案,提供更灵活的语法。
- name: 使用loop安装软件包
apt:
name: "{{ item }}"
state: present
loop:
- nginx
- git
- htop
使用loop
和复杂数据结构
处理复杂数据结构时,loop
更加灵活。
- name: 使用loop和复杂数据结构
user:
name: "{{ item.name }}"
uid: "{{ item.uid }}"
loop:
- { name: 'alice', uid: 1001 }
- { name: 'bob', uid: 1002 }
标签:name,items,item,循环,Playbook,编写,loop,uid
From: https://blog.csdn.net/Lzcsfg/article/details/139596106