首页
学习
活动
专区
工具
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
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 自动化运维利器 ansible-入门

    ansible 是一款强大的配置管理工具,诣在帮助系统管理员高效率地管理成百上千台主机。设想一个主机是一个士兵,那么有了 ansible ,作为系统管理员的你就是一个将领,你可以通过口头命令,即一次下发一条命令(ansible ad-hoc 模式)方式让一个或一组或全部的士兵按你的指令行事,也可以将多条命令写在纸上(ansible playbook 模式), 需要执行命令时只需要提供这张纸即可。你可以让多个士兵同时做相同或不同的事情,可以方便的让新加入的士兵快速加入已有的兵种队伍,也以快速改变兵种(配置管理),一句话,士兵都严格听你的,你做好命令的设计,ansible 自动帮你发布和执行。

    03
    领券