Ansible и JMESPath, экранируйте косую черту в json_query
Существует простой файл JSON, sample.json
со следующим содержанием:
{
"test": {
"domain": [
{
"name": "cluster1"
}
]
}
}
С Ansible я хочу запросить через test
ключ, который работает со следующим Ansible playbook.
---
- 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
и ответная 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, но для меня это не имеет смысла.
Как я могу убедиться, что JMESpath работает с косой чертой в запросе Ansible.
1 ответ
Решение
JMESPath определяет identifier
как unquoted-string / quoted-string
,
unquoted-string
является A-Za-z_
, Все остальное должно быть указано.
В твоем случае:
- debug:
msg: "{{ tmpdata | json_query('\"test/something\"') }}"
Здесь мы спасаемся \"
потому что мы внутри двойных кавычек YAML msg: "..."
,