首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Ansible 2.7或2.8中循环遍历多级字典或yaml?

在 Ansible 2.7 或 2.8 中,循环遍历多级字典或 YAML 文件可以通过使用 with_dict 循环和 Jinja2 模板来实现。以下是一个示例,演示如何在 Ansible 中处理多级字典或 YAML 文件。

示例 YAML 文件

假设我们有一个多级 YAML 文件 data.yml,内容如下:

代码语言:javascript
复制
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

我们将编写一个 Ansible Playbook 来读取这个 YAML 文件,并循环遍历其中的多级字典。

1. 创建 data.yml 文件

代码语言:javascript
复制
# 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

2. 创建 Ansible Playbook

代码语言:javascript
复制
# 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 }}"

解释

  1. vars_files: 使用 vars_files 指定要加载的 YAML 文件 data.yml
  2. with_dict: 使用 with_dict 循环遍历 users 字典。
  3. debug: 使用 debug 模块打印每个用户的信息。item.key 是字典的键(即用户的标识符),item.value 是字典的值(即用户的详细信息)。

运行 Playbook

在命令行中运行以下命令来执行 Playbook:

代码语言:javascript
复制
ansible-playbook playbook.yml

输出

运行 Playbook 后,你将看到类似以下的输出:

代码语言:javascript
复制
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
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券