Как получить доступ к stdout из переменной, используя Ansible - PullRequest
0 голосов
/ 26 марта 2019

Получение ошибки при доступе к stdout из зарегистрированной переменной с помощью Ansible

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

"msg": {
        "changed": true,
        "msg": "All items completed",
        "results": [
            {
                "_ansible_ignore_errors": null,
                "_ansible_item_label": "imntg",
                "_ansible_item_result": true,
                "_ansible_no_log": false,
                "changed": true,
                "failed": false,
                "item": "imntg",
                "rc": 0,
                "stderr": "",
                "stderr_lines": [],
                "stdout": "03-26-2019-06h40m21s\n03-26-2019-06h30m21s\n",
                "stdout_lines": [
                    "03-26-2019-06h40m21s",
                    "03-26-2019-06h30m21s"
                ]
            },
            {
                "_ansible_ignore_errors": null,
                "_ansible_item_label": "imntg4",
                "_ansible_item_result": true,
                "_ansible_no_log": false,
                "changed": true,
                "failed": false,
                "item": "imntg4",
                "rc": 0,
                "stderr": "",
                "stderr_lines": [],
                "stdout": "03-26-2019-06h40m21s\n03-26-2019-06h30m21s\n",
                "stdout_lines": [
                    "03-26-2019-06h40m21s",
                    "03-26-2019-06h30m21s"
                ]
            },
            {
                "_ansible_ignore_errors": null,
                "_ansible_item_label": "",
                "_ansible_item_result": true,
                "_ansible_no_log": false,
                "changed": false,
                "item": "",
                "skip_reason": "Conditional result was False",
                "skipped": true
            }
        ]
    }
}

Я пытаюсь получить доступ к _ansible_item_label, stdout из вышеприведенного вывода.

Требуемый вывод должен быть таким, как показано ниже.

TASK [debug] ***********************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": [
        "03-26-2019-06h40m21s\n03-26-2019-06h30m21s\n - imntg",
        "03-26-2019-06h40m21s\n03-26-2019-06h30m21s\n - imntg4"
    ]
}

ниже приведен код, который я пробовал.

  - debug:
      msg: "{% set temp_var_tag_list = [] %}{% for result in temp_var.results %}{{ temp_var_tag_list.append(result.stdout ~ ' - ' ~ result._ansible_item_label) }}{% endfor %}{{ temp_var_tag_list }}"

Я могу получить доступ к _ansible_item_label, но получаю сообщение об ошибке при обращении к stdout и работает то же самое, если я получаю доступ к item вместо stdout.

anyздесь помощь?

1 Ответ

2 голосов
/ 27 марта 2019

это потому, что в вашем списке results есть 3 элемента, последний из них не имеет ключа stdout.

Вы можете добавить логику «если существует, то» в коде jinja, как показано ниже:

  - debug:
      msg: "{% set temp_var_tag_list = [] %}{% for result in temp_var.results %}{% if result.stdout is defined -%}{{ temp_var_tag_list.append(result.stdout ~ ' - ' ~ result._ansible_item_label) }}{%- endif %}{%- endfor %}{{ temp_var_tag_list }}"

произведенная продукция:

TASK [debug] ***********************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": [
        "03-26-2019-06h40m21s\n03-26-2019-06h30m21s\n - imntg",
        "03-26-2019-06h40m21s\n03-26-2019-06h30m21s\n - imntg4"
    ]
}

надеюсь, это поможет

PS: я предполагаю, что желаемый результат - не тот, который вы описали в своем вопросе, а тот, который вы пытаетесь получить из кода дзиндзя, потому что эти два не согласованы. ("imntg4 - imntg4" не в вашем stdout)

...