【问题标题】:Variables inside JSON Query - Ansible / Jinja filterJSON 查询中的变量 - Ansible / Jinja 过滤器
【发布时间】:2023-02-24 09:21:12
【问题描述】:
我正在尝试使用 JSON 查询来动态生成列表
变量的状态是:
fabric:
vrfs:
- name: VRF-A
description: Production-Network
id: 10001
vlan: 2002
switches:
- serial_number: 10.122.18.114
- serial_number: 10.122.18.118
- name: VRF-F
description: Production-Network
id: 10001
vlan: 2022
switches:
- serial_number: 10.122.18.114
- serial_number: 10.122.18.118
我想使用 JSON 查询获取 VRF-A 中的开关。当 JSON 查询被硬编码时,它就可以工作。
- name: JSON Query
set_fact:
switches: "{{ fabric |json_query('vrfs[?(@.name==`VRF-A`)].switches') }}"
但是当我使用变量时,Ansible 返回一个空列表
- name: JSON Query
set_fact:
switches: "{{ fabric |json_query('vrfs[?(@.name==`{{ the_vrf }}`)].switches') }}"
我错过了什么吗?有什么解决方法吗?
【问题讨论】:
标签:
ansible
jinja2
json-query
【解决方案1】:
避免嵌套引用并将查询放入单独的变量中
the_vrf: VRF-A
switches: "{{ fabric.vrfs|json_query(switches_query) }}"
switches_query: '[?name == `{{ the_vrf }}`].switches'
给你想要的
switches:
- - serial_number: 10.122.18.114
- serial_number: 10.122.18.118
笔记:
switches: "{{ fabric.vrfs|json_query(swiches_query) }}"
switches_query: '[?name == `VRF-A`].switches'
- hosts: localhost
vars:
fabric:
vrfs:
- name: VRF-A
description: Production-Network
id: 10001
vlan: 2002
switches:
- serial_number: 10.122.18.114
- serial_number: 10.122.18.118
- name: VRF-F
description: Production-Network
id: 10001
vlan: 2022
switches:
- serial_number: 10.122.18.114
- serial_number: 10.122.18.118
# switches: "{{ fabric.vrfs|json_query(swiches_query) }}"
# switches_query: '[?name == `VRF-A`].switches'
the_vrf: VRF-A
switches: "{{ fabric.vrfs|json_query(switches_query) }}"
switches_query: '[?name == `{{ the_vrf }}`].switches'
tasks:
- debug:
var: switches