在 Ansible 2.7 或 2.8 中,循环遍历多级字典或 YAML 文件可以通过使用 with_dict
循环和 Jinja2 模板来实现。以下是一个示例,演示如何在 Ansible 中处理多级字典或 YAML 文件。
假设我们有一个多级 YAML 文件 data.yml
,内容如下:
users:
alice:
name: Alice
age: 30
roles:
- admin
- developer
bob:
name: Bob
age: 25
roles:
- user
- tester
charlie:
name: Charlie
age: 35
roles:
- manager
我们将编写一个 Ansible Playbook 来读取这个 YAML 文件,并循环遍历其中的多级字典。
data.yml
文件# data.yml
users:
alice:
name: Alice
age: 30
roles:
- admin
- developer
bob:
name: Bob
age: 25
roles:
- user
- tester
charlie:
name: Charlie
age: 35
roles:
- manager
# playbook.yml
- name: Loop through multi-level dictionary
hosts: localhost
gather_facts: no
vars_files:
- data.yml
tasks:
- name: Loop through users
debug:
msg: "User {{ item.key }}: Name={{ item.value.name }}, Age={{ item.value.age }}, Roles={{ item.value.roles | join(', ') }}"
with_dict: "{{ users }}"
vars_files
指定要加载的 YAML 文件 data.yml
。with_dict
循环遍历 users
字典。debug
模块打印每个用户的信息。item.key
是字典的键(即用户的标识符),item.value
是字典的值(即用户的详细信息)。在命令行中运行以下命令来执行 Playbook:
ansible-playbook playbook.yml
运行 Playbook 后,你将看到类似以下的输出:
PLAY [Loop through multi-level dictionary] ******************************************************************
TASK [Loop through users] ***********************************************************************************
ok: [localhost] => (item={'key': 'alice', 'value': {'name': 'Alice', 'age': 30, 'roles': ['admin', 'developer']}}) => {
"msg": "User alice: Name=Alice, Age=30, Roles=admin, developer"
}
ok: [localhost] => (item={'key': 'bob', 'value': {'name': 'Bob', 'age': 25, 'roles': ['user', 'tester']}}) => {
"msg": "User bob: Name=Bob, Age=25, Roles=user, tester"
}
ok: [localhost] => (item={'key': 'charlie', 'value': {'name': 'Charlie', 'age': 35, 'roles': ['manager']}}) => {
"msg": "User charlie: Name=Charlie, Age=35, Roles=manager"
}
PLAY RECAP **************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0
领取专属 10元无门槛券
手把手带您无忧上云