Ansible Playbook如何根据指定名称从JSON字典中提取ID并存为变量
错误原因
json_query过滤器要求传入的查询规则是字符串类型,你在TEST任务里直接把[?name=='WebLogic'].id作为参数传入,没有用引号包裹,Jinja2模板引擎会把方括号识别为Jinja语法结构,解析到?时就会触发语法报错。
修正方案
两种可选修正方式:
方式1:直接给查询语句加引号包裹
注意外层用单引号、内层用JMESPath语法的反引号包裹常量,不需要额外转义。如果要提取单个ID值而不是数组,可以在最后加| first过滤:
- name: TEST set_fact: test: "{{ data.json['values'] | json_query('[?name==`WebLogic`].id') | first }}"
不加
| first的话得到的是只有一个元素的ID数组,加了之后直接得到ID字符串,更适合后续任务直接调用。
方式2:和你之前的debug任务逻辑一致,用vars定义查询变量,可复用性更高
- name: TEST set_fact: test: "{{ data.json['values'] | json_query(query) | first }}" vars: name: 'WebLogic' query: "[?name=='{{ name }}'].id"
修正后test变量就会存储WebLogic对应的ID字符串b37511f4-d4e8-4c77-a628-841dba5c65d8,可直接供后续任务使用。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

