Ansible中用JMESPath提取ESXi项UUID值失败求助
问题分析与解决方法
1. Ansible语法错误
原代码里的var:是拼写错误,正确关键字为vars:,且变量定义需放在vars块中,而非直接嵌套在set_fact模块内。
2. JMESPath查询逻辑错误
原查询语句Entities[*].Spec[?Type==VMWARE_ESXI_VCENTER].UUID存在逻辑问题:Spec是单个对象而非数组,不能使用数组过滤语法[?]。正确的思路是先过滤Entities数组中满足Spec.Type == 'VMWARE_ESXI_VCENTER'的元素,再提取对应元素的Spec.UUID。
修正后的完整代码
- name: "Get ESXiUUID" vars: jmesquery: "Entities[?Spec.Type == `VMWARE_ESXI_VCENTER`].Spec.UUID" set_fact: move_providers_filtered: "{{ move_providers_details_content | json_query(jmesquery) }}"
执行结果说明
执行后move_providers_filtered会返回一个包含目标UUID的数组:["uuid1234567890"]。如果需要直接获取单个UUID值,可以在查询后追加[0],或者后续使用move_providers_filtered[0]提取。
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

