Вывод отладки Ansible parse

У меня есть этот доступный вывод, полученный с 3 разных хостов, с использованием модуля отладки ansible:

TASK [debug] ***************************************************************************************************************************************************************************************
ok: [10.240.22.44] => {
    "msg": {
        "changed": true,
        "msg": "All items completed",
        "results": [
            {
                "_ansible_ignore_errors": true,
                "_ansible_item_result": true,
                "_ansible_no_log": false,
                "_ansible_parsed": true,
                "changed": true,
                "cmd": "/opt/confluent/bin/nodefirmware smm1",
                "delta": "0:00:00.128325",
                "end": "2020-02-05 11:22:19.435049",
                "failed": false,
                "invocation": {
                    "module_args": {
                        "_raw_params": "/opt/confluent/bin/nodefirmware smm1",
                        "_uses_shell": true,
                        "chdir": null,
                        "creates": null,
                        "executable": null,
                        "removes": null,
                        "stdin": null,
                        "warn": true
                    }
                },
                "item": "10.240.18.20",
                "rc": 0,
                "start": "2020-02-05 11:22:19.306724",
                "stderr": "",
                "stderr_lines": [],
                "stdout": "smm1: SMM: 1.10 (TESM14F)\nsmm1: PSOC: 0.7",
                "stdout_lines": [
                    "smm1: SMM: 1.10 (TESM14F)",
                    "smm1: PSOC: 0.7"
                ]
            },
            {
                "_ansible_ignore_errors": true,
                "_ansible_item_result": true,
                "_ansible_no_log": false,
                "_ansible_parsed": true,
                "changed": true,
                "cmd": "/opt/confluent/bin/nodefirmware smm1",
                "delta": "0:00:00.096292",
                "end": "2020-02-05 11:22:22.847949",
                "failed": false,
                "invocation": {
                    "module_args": {
                        "_raw_params": "/opt/confluent/bin/nodefirmware smm1",
                        "_uses_shell": true,
                        "chdir": null,
                        "creates": null,
                        "executable": null,
                        "removes": null,
                        "stdin": null,
                        "warn": true
                    }
                },
                "item": "10.240.19.21",
                "rc": 0,
                "start": "2020-02-05 11:22:22.751657",
                "stderr": "",
                "stderr_lines": [],
                "stdout": "smm1: SMM: 1.10 (TESM14F)\nsmm1: PSOC: 0.7",
                "stdout_lines": [
                    "smm1: SMM: 1.10 (TESM14F)",
                    "smm1: PSOC: 0.7"
                ]
            }
        ]
    }
}

Я пытаюсь проанализировать этот вывод и отобразить в конце для каждого хоста строго:

"stdout_lines": [
                    "smm1: SMM: 1.10 (TESM14F)",
                    "smm1: PSOC: 0.7"

Плейбук, который показывает приведенный выше результат, таков:

   - debug:
       msg: "{{ smm_output }}"
     when: "('primary' in default_hostname or 'Primary' in default_hostname)"
     tags: ['ic', 'smm']

Я пробовал с "{{smm_output.stdout_lines}}", но говорит, что такого объекта dict нет

Какие-нибудь подсказки?


person Bogdan Stoica    schedule 05.02.2020    source источник


Ответы (1)


Вы регистрируете вывод задачи цикла. Цитата из документации:

Когда вы регистрируете переменную в задаче с циклом, зарегистрированная переменная содержит значение для каждого элемента в цикле. Структура данных, помещенная в переменную во время цикла, будет содержать атрибут результатов, то есть список всех ответов от модуля. Более подробный пример того, как это работает, см. В разделе «Циклы» об использовании регистра с циклом.

Для отладки каждого stdout_lines вашего соответствующего results в smm_output вы можете использовать следующую задачу:

    - name: debug result
      debug:
        var: item.stdout_lines
      loop: "{{ smm_output.results }}"

Ссылка: https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#registering-variables

person Zeitounator    schedule 05.02.2020