Ansible 2.9.2如何仅提取hw_eth0的ipaddresses字段值?
解决Ansible中JMESPath提取hw_eth0.ipaddresses的语法问题
嗨,我来帮你搞定这个问题!你遇到的JMESPath语法错误,是因为误用了数组投影的语法——{}是用来处理数组/列表类型数据的,但你的hw_eth0是一个单个的字典对象,不是数组,所以不能这么写。
正确的写法有两种:
方法1:直接用Ansible变量引用(最简单)
如果你的output.instance.hw_eth0结构明确,不需要复杂的JMESPath查询,直接用点符号引用就行:
- debug: msg: "{{ output.instance.hw_eth0.ipaddresses }}"
方法2:正确的JMESPath语法
如果一定要用json_query,直接通过点符号访问对象属性即可,不需要加{}:
- debug: msg: "{{ output.instance | json_query('hw_eth0.ipaddresses') }}"
为什么之前的写法错了?
你写的hw_eth0{}.ipaddresses里,{}是JMESPath的数组投影语法,它的作用是遍历数组中的每个元素,提取指定属性。但你的hw_eth0是单个字典(比如像下面这样的结构),不是数组,所以这个语法就不适用了:
output: instance: hw_eth0: ipaddresses: null macaddress: "aa:bb:cc:dd:ee:ff" # 其他字段...
用上面两种正确写法,就能准确提取到hw_eth0里的ipaddresses值啦~
内容的提问来源于stack exchange,提问作者Batchen Regev
相关产品推荐
相关产品推荐

