Как использовать подстановочный знак для ответного вывода - PullRequest
0 голосов
/ 04 июля 2019

Я пытаюсь использовать подстановочный знак для моей переменной ansible, но мне кажется, что я не могу ее использовать.

Я пробовал что-то из здесь , но все так же.

Ответный вывод

"reboot_required": false,
"updates": {
    "0720a128-90b1-4b21-a8cf-3c5c86239435": {
        "kb": [
            "2267602"
        ],
        "installed": false,
        "id": "0720a128-90b1-4b21-a8cf-3c5c86239435",
        "categories": [
            "Definition Updates",
            "Windows Defender"
        ],
        "title": "Definition Update for Windows Defender Antivirus - KB2267602 (Definition 1.297.412.0)"
    },
    "60bbf4af-afd3-45fe-aad2-6d72beddeba2": {
        "kb": [
            "4509475"
        ],
        "installed": false,
        "id": "60bbf4af-afd3-45fe-aad2-6d72beddeba2",
        "categories": [
            "Updates",
            "Windows Server 2016"
        ],
        "title": "2019-06 Cumulative Update for Windows Server 2016 for x64-based Systems (KB4509475)"

Я пытаюсь получить заголовок или идентификатор

- name: debug
  debug:  
    msg: "{{ item.updates.*.id }}"
  with_items:
    - "{{ result }}"

благодарю за помощь

Ответы [ 3 ]

0 голосов
/ 04 июля 2019

Учитывая, что ответный вывод выше сохранен в переменной результат задачи ниже

- set_fact:
    id_list: "{{ result.updates|
                 json_query('*.id')
                 }}"
- debug:
    var: id_list

дают список id (похожие заголовки )

  id_list:
  - 0720a128-90b1-4b21-a8cf-3c5c86239435
  - 60bbf4af-afd3-45fe-aad2-6d72beddeba2

И приведенные ниже задачи

- set_fact:
    my_list: "{{ result.updates|
                 json_query('*.{ id: id, title: title }')
                 }}"
- debug:
    var: my_list

дают список id, заголовок хешей

  my_list:
  - id: 0720a128-90b1-4b21-a8cf-3c5c86239435
    title: Definition Update for Windows Defender Antivirus - KB2267602 (Definition 1.297.412.0)
  - id: 60bbf4af-afd3-45fe-aad2-6d72beddeba2
    title: 2019-06 Cumulative Update for Windows Server 2016 for x64-based Systems (KB4509475)
0 голосов
/ 04 июля 2019

Попробуйте ниже.Я не проверял это все же.

- name: debug
  debug:
    msg: "{{ item|first }}:{{ item[item|first].title }}"
  with_items:
    - "{{ result.updates }}"
0 голосов
/ 04 июля 2019

Подстановочный знак, который он использует в примере, который вы связали, не относится к фильтру json_query. Он отправляет в фильтр json_query, а затем использует подстановочный знак как часть этого синтаксиса.

results | json_query('[].block_device_mapping.*.snapshot_id')

Вы не используете json_query в своем примере, и поэтому этот синтаксис недоступен и не будет работать.

Попробуйте передать результаты в json_query, а затем указать путь, по которому вы хотите добраться. Если {{results}} уже создан, вы можете оставить with_items и перейти к следующему:

{{ results | json_query('updates.*.id') }}

Я предполагаю, что здесь точный синтаксис, но вам определенно нужно начинать с json_query.

Чтобы выяснить точный синтаксис, который вы хотите, начните с небольшого конвейера json_query, а затем выберите самый верхний элемент (обновления, в вашем случае), добавляя фрагменты в фильтр, пока вы не сузите его до нужной информации. Я связался с указателем пути ниже, который помогает.

Справка:

edit: Синтаксис в первой части ответа Владимира выглядит намного сексуальнее, чем я предполагаю. Попробуйте его синтаксис, чтобы понять, что работает, используйте мой ответ, чтобы понять, что не так. Затем отметьте его как правильный ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...