Ansible 和 JMESPath,在 json_query 中转义正斜杠
Ansible and JMESPath, escape forward slash in a json_query
有一个简单的 JSON 文件,sample.json
包含以下内容:
{
"test": {
"domain": [
{
"name": "cluster1"
}
]
}
}
使用 Ansible,我想查询 test
键,它适用于以下 Ansible 剧本。
---
- hosts: localhost
vars:
tmpdata: "{{ lookup('file','sample.json') | from_json }}"
- debug:
msg: "{{ tmpdata | json_query('test') }}"
该剧
ok: [localhost] => {
"msg": {
"domain": [
{
"name": "cluster1"
}
]
}
}
然而,当他们输入 JSON 文件时,从 test
到 test/something
,而 ansible json_query 从 test
到 test/something
,Ansible/JMESPath 也会产生错误。
fatal: [localhost]: FAILED! => {"msg": "JMESPathError in json_query filter plugin:\nBad jmespath expression: Unknown token /:\ntest/something\n ^"}
我查看了 JMESpath documentation,但它对我来说没有意义。
如何确保 JMESpath 在 Ansible 查询中使用正斜杠。
JMESPath 将 identifier
定义为 unquoted-string / quoted-string
。
unquoted-string
是 A-Za-z_
。其他任何内容都应引用。
你的情况:
- debug:
msg: "{{ tmpdata | json_query('\"test/something\"') }}"
这里我们转义 \"
因为我们在 YAML 双引号里面 msg: "..."
.
有一个简单的 JSON 文件,sample.json
包含以下内容:
{
"test": {
"domain": [
{
"name": "cluster1"
}
]
}
}
使用 Ansible,我想查询 test
键,它适用于以下 Ansible 剧本。
---
- hosts: localhost
vars:
tmpdata: "{{ lookup('file','sample.json') | from_json }}"
- debug:
msg: "{{ tmpdata | json_query('test') }}"
该剧
ok: [localhost] => {
"msg": {
"domain": [
{
"name": "cluster1"
}
]
}
}
然而,当他们输入 JSON 文件时,从 test
到 test/something
,而 ansible json_query 从 test
到 test/something
,Ansible/JMESPath 也会产生错误。
fatal: [localhost]: FAILED! => {"msg": "JMESPathError in json_query filter plugin:\nBad jmespath expression: Unknown token /:\ntest/something\n ^"}
我查看了 JMESpath documentation,但它对我来说没有意义。
如何确保 JMESpath 在 Ansible 查询中使用正斜杠。
JMESPath 将 identifier
定义为 unquoted-string / quoted-string
。
unquoted-string
是 A-Za-z_
。其他任何内容都应引用。
你的情况:
- debug:
msg: "{{ tmpdata | json_query('\"test/something\"') }}"
这里我们转义 \"
因为我们在 YAML 双引号里面 msg: "..."
.