У меня сложный результат в формате JSON, и я пытаюсь извлечь из него значения. Я протестировал онлайн-оценщик JSONpath https://jsonpath.com/, где я могу просто набрать
$.[*].toPort
и получить список запрошенных переменных.
Я пытался использовать тот же синтаксис в Ansible, но получение пустого списка.
- name: JSON test
hosts: localhost
gather_facts: no
vars:
jsoncontent:
{
"infraAccPortP": {
"attributes": {
"annotation": "",
"childAction": "",
"descr": "",
"nameAlias": "",
"ownerKey": "",
"ownerTag": "",
"status": "",
"uid": "15374"
},
"children": [
{
"infraHPortS": {
"attributes": {
"annotation": "",
"uid": "8927"
},
"children": [
{
"infraPortBlk": {
"attributes": {
"fromPort": "41",
"toPort": "41",
"uid": "8927"
}
}
}
]
}
},
{
"infraHPortS": {
"attributes": {
"annotation": "",
"uid": "8927"
},
"children": [
{
"infraPortBlk": {
"attributes": {
"fromPort": "42",
"toPort": "42",
"uid": "8927"
}
}
}
]
}
}
]
}
}
tasks:
- name: show jsoncontent
debug:
var: jsoncontent
- name: Show just toPort values
debug:
msg: "{{ jsoncontent | json_query(jmesquery) }}"
vars:
jmesquery: "[*].toPort"
Любая помощь, как настроить запрос, чтобы получить ожидаемый результат? Это немного расстраивает, поскольку не так много документации о том, как json_query реализован в Ansible