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
相关产品推荐
相关产品推荐

