You need to enable JavaScript to run this app. 如何使用Ansible从YAML配置中提取Machine属性的自定义列表
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Ansible从YAML配置中提取Machine属性的自定义列表

问题场景

将WebLogic域的YAML配置存入yaml_domain_file变量,需要提取所有topology.Server子节点下的Machine属性值,最终生成独立的取值列表。

已验证可正常运行的操作

已通过如下代码实现所有Server节点名称列表的获取:

- set_fact:
    servers: "{{ yaml_domain_file.topology.Server | list }}"

执行后输出的Server名称列表和预期完全匹配。

未达预期的尝试

尝试用如下代码提取Machine属性列表,执行后无法输出正确结果:

- debug:
    msg: "{{ yaml_domain_file.topology.Server.*.Machine | list }}"

失败原因

解析YAML后,topology.Server是典型的键值对字典结构,.*通配符在Jinja2的字典遍历逻辑中,无法直接穿透字典层级、读取每个键对应值的内部属性,因此会输出为空或执行报错。

正确的实现方式

可选用以下任意一种经过验证的写法完成提取:

写法1:提取字典所有值做属性映射

直接调用字典原生的values()方法拿到所有Server配置的列表,再通过map过滤提取每个配置下的Machine属性:

- debug:
    msg: "{{ yaml_domain_file.topology.Server.values() | map(attribute='Machine') | list }}"

执行后直接返回目标Machine列表:

["wlm-pil-10-n0", "wlm-pil-10-n1", "wlm-pil-10-n2"]

写法2:字典转键值对结构后提取

通过dict2items过滤器把Server字典转换成统一的键值对列表,再提取对应属性:

- debug:
    msg: "{{ yaml_domain_file.topology.Server | dict2items | map(attribute='value.Machine') | list }}"

两种写法的执行结果完全一致,可根据自身代码习惯选择。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 22:54:03