#ansible
#ансибль
Вопрос:
я регистрирую результат определенного SQL — запроса:
- name: Output Result debug: var: result.query_result[0]
Я получаю длинный список, который выглядит так:
{ "result": { "changed": true, "failed": false, "query_result": [ [ { "C": "", "CHID": "", "DESCRIPTION": "", "EXPECTED_VALUE": "", "HOST": "", "SAP_NOTE": "", "VALUE": "" }, { "C": "", "CHID": "M0005", "DESCRIPTION": "Generated with", "EXPECTED_VALUE": "", "HOST": "", "SAP_NOTE": "1969700", "VALUE": "SQL: \HANA_Configuration_MiniChecks\""" } ] ], "rc": 0, "stderr": "", "stderr_lines": [] } }
Как я могу вывести только эту часть, если он существует:
{ "C": "", "CHID": "M0005", "DESCRIPTION": "Generated with", "EXPECTED_VALUE": "", "HOST": "", "SAP_NOTE": "1969700", "VALUE": "SQL: \HANA_Configuration_MiniChecks\""" }
Расположение вышеупомянутого узла может измениться, поэтому я не могу специально нацелиться на него.
Комментарии:
1. это
query_result
список, он будет содержать только эти 2 пункта, но порядок может измениться? будет лучше, если вы объясните, как отфильтровать нужную строку/элемент из списка2. Привет @ilias-sp, если [«CHID»: «M0005»] существует, чем показывать.
3. спасибо за разъяснение, я опубликовал ответ
Ответ №1:
вы можете использовать json_query
для фильтрации элемента, имеющего ключ/значение: "CHID": "M0005"
полный пример учебника для демонстрации:
--- - hosts: localhost gather_facts: false vars: query_result: - C: '' CHID: '' DESCRIPTION: '' EXPECTED_VALUE: '' HOST: '' SAP_NOTE: '' VALUE: '' - C: '' CHID: M0005 DESCRIPTION: Generated with EXPECTED_VALUE: '' HOST: '' SAP_NOTE: '1969700' VALUE: 'SQL: HANA_Configuration_MiniChecks""' - C: '' CHID: 22M00051231 DESCRIPTION: Generated with2121 EXPECTED_VALUE: '' HOST: '' SAP_NOTE: '1969700444' VALUE: '444SQL: HANA_Configuration_MiniChecks""' tasks: - set_fact: filtered_item: "{{ query_result | json_query('[?CHID == `M0005`]') }}" - debug: var: filtered_item
в вашем случае json_query должен выглядеть так:
- set_fact: filtered_item: "{{ result.query_result | json_query('[?CHID == `M0005`]') }}"
Пожалуйста, обратите внимание, что если в списке может быть несколько элементов, соответствующих условию, все они будут добавлены в список filtered_item
. Чтобы убедиться, что вы получите только первое, вы можете передать результат в first
:
- set_fact: filtered_item: "{{ query_result | json_query('[?CHID == `M0005`]') | first }}"
Комментарии:
1. это работает 🙂 большое спасибо за вашу быструю поддержку.
2. рад, что это помогло! @AndrewRamnikov