You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible如何提取test.yaml文件中嵌套字典列表的指定字段值?

嵌套字段提取实现方案

前置注意事项

你给出的目标字段路径存在两处结构错误,是提取失败的核心原因:

  • results为列表类型,列表下的单个元素才包含invocation、virtual_machines字段,且virtual_machines和invocation是平级关系,并不属于invocation的子级
  • module_args下的用户名字段为username,不是示例里写的user_name

完整可用Playbook示例

场景1:遍历所有结果(适合results存在多个条目、每个条目下有多台虚拟机的场景)

---
- name: 提取test.yaml指定字段
  hosts: localhost
  tasks:
    - name: 加载yaml文件内容到变量vm
      include_vars:
        file: test.yaml # 注意和实际文件后缀保持一致,你之前写的test.yml可能和实际文件名test.yaml不匹配
        name: vm

    - name: 遍历输出目标字段
      debug:
        msg:
          - "虚拟机IP地址:{{ item.1.ip_address }}"
          - "API调用用户名:{{ item.0.invocation.module_args.username }}"
      with_subelements:
        - "{{ vm.results }}"
        - virtual_machines

场景2:直接取第一个结果(适合只有单条results、单台虚拟机的场景)

不需要遍历,直接通过索引指定取值即可:

---
- name: 提取test.yaml指定字段
  hosts: localhost
  tasks:
    - name: 加载yaml文件内容到变量vm
      include_vars:
        file: test.yaml
        name: vm

    - name: 直接输出目标字段
      debug:
        msg:
          - "虚拟机IP地址:{{ vm.results[0].virtual_machines[0].ip_address }}"
          - "API调用用户名:{{ vm.results[0].invocation.module_args.username }}"

取值规则说明

  • 列表类型字段需要用[索引]指定要提取的元素,索引从0开始计数
  • 字典类型字段直接通过.加子字段名即可访问下一层级内容

内容的提问来源于stack exchange,提问作者Irka Irenka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 21:36:05