В частности, мне нужна «строка» идентификаторов учетных записей, отсутствующих в списке, который я даю задаче на сервере в своем инвентаре.
Я запускаю модуль getent в задаче и регистрирую результат, которыйкажется полным JSON-объектом с данными, которые я хочу получить в виде кета с именем "item", зарытого в массиве объектов, называемых "results", который сам является объектом "result".
Я пытаюсьпроанализируйте объект «result» для любого ключа с именем «failed», который имеет значение true, и извлеките значение ключа этого объекта для «item», который является идентификатором учетной записи.
Мне нужно хвастаться, чтобы преодолеть мою нехваткупонимания.
спасибо!
Ничего из того, что я пробовал, не работает.Я не уверен, является ли это моим синтаксисом или нехваткой понимания, как анализировать или «интерпретировать» объект JSON, хранящийся в «результате»
Я думаю, что мой синтаксис для переменной qry запрашивает любой элемент массива вresults (массив объектов), у которого есть ключ с именем «failed» со значением true, и если совпадение найдено, вернуть значение его ключа «item».Я знаю, если это сработает, он вернет список.мне нужна строка, но я не смог получить никакого результата, кроме пустого списка [].
Я пробовал много вариантов, но результат всегда пуст.
qry: "result.results[?failed == true].item"
qry: "results[?failed == true].item"
qry: "[?failed == true].item"
Вот объект JSON, возвращаемый ansible "debug: var = result"
TASK [debug] *******************************************************************
ok: [x.y.z.abc.com] => {
"result": {
"changed": false,
"failed": true,
"msg": "All items completed",
"results": [
{
"_ansible_item_result": true,
"_ansible_no_log": false,
"_ansible_parsed": true,
"changed": false,
"failed": true,
"invocation": {
"module_args": {
"database": "passwd",
"fail_key": true,
"key": "abc123",
"split": null
}
},
"item": "abc123",
"msg": "One or more supplied key could not be found in the database."
},
{
"_ansible_item_result": true,
"_ansible_no_log": false,
"_ansible_parsed": true,
"changed": false,
"failed": true,
"invocation": {
"module_args": {
"database": "passwd",
"fail_key": true,
"key": "pubsub",
"split": null
}
},
"item": "pubsub",
"msg": "One or more supplied key could not be found in the database."
}
]
}
}
Вот раздел кода playbook:
- name: "Account checks"
ignore_errors: True
with_items:
- abc123
- pubsub
getent: database=passwd key={{ item }}
register: result
- debug: var=result
- debug: msg="Account id is {{ result | json_query(qry) }} "
vars:
qry: "result.results[?failed == true].item"
Вот результат выводамой вызов json_qry:
TASK [debug] *******************************************************************
ok: [xyz.abc.com] => {}
MSG:
Account id is
Что я хочу, это что-то вроде:
"Идентификатор учетной записи abc123, pubsub"