如何将 json_query 与整数一起使用
How to use json_query with integer
开发者社区您好!
我目前正在开发一些 Ansible 剧本来管理 Citrix NetScaler 配置,并希望就以下内容寻求一些帮助。我在名为 nsadc_config_file_textfsm_nsadc_vlan_binding_parsed
的变量文件中定义了以下数据结构
[
{
"bind_vlan_NotParsed": "",
"bind_vlan_id": "1042",
"bind_vlan_ifnum": "",
"bind_vlan_ipaddress": "10.162.5.120",
"bind_vlan_netmask": "255.255.255.128",
"bind_vlan_ownergroup": "",
"bind_vlan_tagged": "",
"bind_vlan_td": ""
},
{
"bind_vlan_NotParsed": "",
"bind_vlan_id": "1050",
"bind_vlan_ifnum": "",
"bind_vlan_ipaddress": "10.162.5.250",
"bind_vlan_netmask": "255.255.255.128",
"bind_vlan_ownergroup": "",
"bind_vlan_tagged": "",
"bind_vlan_td": ""
}
]
我想在 Jinja 文件中使用循环查询此 JSON 结构 json_query 以获取特定 VLAN ID 的记录:
{% if (nsadc_config_file_textfsm_nsadc_vlan_binding_parsed | json_query('[?bind_vlan_id == `' + item_0.add_vlan_id + '`]')) %}
但不幸的是,查询不起作用,我总是得到一个空的结果。变量 bind_vlan_id
和 add_vlan_id
都是整数,但根据我的理解, JSON 结构默认包含字符串 key:value 。我相信,这可能是问题的原因:整数与字符串。我已经尝试了很多方案,但没有运气。
- json_query('[?bind_vlan_id == `' + item_0.add_vlan_id + '`]')
- json_query('[?bind_vlan_id == `' + item_0.add_vlan_id | string + '`]')
- json_query('[?bind_vlan_id == item_0.add_vlan_id]')
- json_query('[?bind_vlan_id == item_0.add_vlan_id | string]')
- json_query('[?bind_vlan_id == `item_0.add_vlan_id`]')
- json_query('[?bind_vlan_id == ''item_0.add_vlan_id'']')
谁能给我指出正确的方向,json_query 在整数值作为条件的情况下应该如何工作?非常感谢您!
给定简化数据进行测试
nsadc:
- id: "1042"
ipaddress: "10.162.5.120"
- id: "1050"
ipaddress: "10.162.5.250"
问:"循环获取特定 ID 的记录。"
A:将查询放入变量中。这将简化引用和转义。例如
- debug:
msg: "{{ nsadc|json_query(query) }}"
loop: ["1042", "1050", "9999"]
vars:
query: "[?id == '{{ item }}']"
给予
ok: [localhost] => (item=1042) => {
"msg": [
{
"id": "1042",
"ipaddress": "10.162.5.120"
}
]
}
ok: [localhost] => (item=1050) => {
"msg": [
{
"id": "1050",
"ipaddress": "10.162.5.250"
}
]
}
ok: [localhost] => (item=9999) => {
"msg": []
}
- 属性 id 不是整数
- debug:
msg: "{{ nsadc.0.id|type_debug }}"
给予
"msg": "AnsibleUnicode"
声明的整数不带引号。例如
id: 1042
会给
"msg": "int"
问:"Jinja 模板错误"
{% set query = '[?id == '{{ item_0.id }}']' %}
A:如果您坚持在 Jinja 中创建查询,则必须连接字符串。例如
- debug:
msg: >-
{% set query = "[?id == '" ~ item_0.id ~ "']" %}
{{ nsadc|json_query(query) }}
vars:
item_0:
id: "1042"
给予
"msg": " [{'id': '1042', 'ipaddress': '10.162.5.120'}]"
开发者社区您好!
我目前正在开发一些 Ansible 剧本来管理 Citrix NetScaler 配置,并希望就以下内容寻求一些帮助。我在名为 nsadc_config_file_textfsm_nsadc_vlan_binding_parsed
的变量文件中定义了以下数据结构[
{
"bind_vlan_NotParsed": "",
"bind_vlan_id": "1042",
"bind_vlan_ifnum": "",
"bind_vlan_ipaddress": "10.162.5.120",
"bind_vlan_netmask": "255.255.255.128",
"bind_vlan_ownergroup": "",
"bind_vlan_tagged": "",
"bind_vlan_td": ""
},
{
"bind_vlan_NotParsed": "",
"bind_vlan_id": "1050",
"bind_vlan_ifnum": "",
"bind_vlan_ipaddress": "10.162.5.250",
"bind_vlan_netmask": "255.255.255.128",
"bind_vlan_ownergroup": "",
"bind_vlan_tagged": "",
"bind_vlan_td": ""
}
]
我想在 Jinja 文件中使用循环查询此 JSON 结构 json_query 以获取特定 VLAN ID 的记录:
{% if (nsadc_config_file_textfsm_nsadc_vlan_binding_parsed | json_query('[?bind_vlan_id == `' + item_0.add_vlan_id + '`]')) %}
但不幸的是,查询不起作用,我总是得到一个空的结果。变量 bind_vlan_id
和 add_vlan_id
都是整数,但根据我的理解, JSON 结构默认包含字符串 key:value 。我相信,这可能是问题的原因:整数与字符串。我已经尝试了很多方案,但没有运气。
- json_query('[?bind_vlan_id == `' + item_0.add_vlan_id + '`]')
- json_query('[?bind_vlan_id == `' + item_0.add_vlan_id | string + '`]')
- json_query('[?bind_vlan_id == item_0.add_vlan_id]')
- json_query('[?bind_vlan_id == item_0.add_vlan_id | string]')
- json_query('[?bind_vlan_id == `item_0.add_vlan_id`]')
- json_query('[?bind_vlan_id == ''item_0.add_vlan_id'']')
谁能给我指出正确的方向,json_query 在整数值作为条件的情况下应该如何工作?非常感谢您!
给定简化数据进行测试
nsadc:
- id: "1042"
ipaddress: "10.162.5.120"
- id: "1050"
ipaddress: "10.162.5.250"
问:"循环获取特定 ID 的记录。"
A:将查询放入变量中。这将简化引用和转义。例如
- debug:
msg: "{{ nsadc|json_query(query) }}"
loop: ["1042", "1050", "9999"]
vars:
query: "[?id == '{{ item }}']"
给予
ok: [localhost] => (item=1042) => {
"msg": [
{
"id": "1042",
"ipaddress": "10.162.5.120"
}
]
}
ok: [localhost] => (item=1050) => {
"msg": [
{
"id": "1050",
"ipaddress": "10.162.5.250"
}
]
}
ok: [localhost] => (item=9999) => {
"msg": []
}
- 属性 id 不是整数
- debug:
msg: "{{ nsadc.0.id|type_debug }}"
给予
"msg": "AnsibleUnicode"
声明的整数不带引号。例如
id: 1042
会给
"msg": "int"
问:"Jinja 模板错误"
{% set query = '[?id == '{{ item_0.id }}']' %}
A:如果您坚持在 Jinja 中创建查询,则必须连接字符串。例如
- debug:
msg: >-
{% set query = "[?id == '" ~ item_0.id ~ "']" %}
{{ nsadc|json_query(query) }}
vars:
item_0:
id: "1042"
给予
"msg": " [{'id': '1042', 'ipaddress': '10.162.5.120'}]"