Как мне найти, какой атрибут регистра использовать в Ansible? - PullRequest
0 голосов
/ 01 марта 2020

Я проверяю результаты команд регистра, и это дает разные атрибуты для различных задач: сбои, msg, stderr, err..et c

- yum:
        name: packagenotfound
        state: present
        ignore_errors: yes
        register: command_result


      - debug:
              msg: "{{ command_result }}"

ok: [ansible] => {
"msg": {
    "changed": false,
    "failed": true,
    "failures": [
        "No package packagenotfound available."
    ],
    "msg": "Failed to install some of the specified packages",
    "rc": 1,
    "results": []
}}

И

 - lvg:
        pvs: /dev/sddnotfound
        vg: vgdata
        ignore_errors: yes
        register: command_result


      - debug:
              msg: "{{ command_result }}"

ok: [ansible] => {
"msg": {
    "changed": false,
    "failed": true,
    "msg": "Device /dev/sddnotfound not found."
}

И

  - shell: thiscommandwontwork
        ignore_errors: yes
        register: command_result


      - debug:
              msg: "{{ command_result }}"

ok: [ansible] => {
"msg": {
    "changed": true,
    "cmd": "thiscommandwontwork",
    "delta": "0:00:00.002560",
    "end": "2020-02-05 04:24:35.297556",
    "failed": true,
    "msg": "non-zero return code",
    "rc": 127,
    "start": "2020-02-05 04:24:35.294996",
    "stderr": "/bin/sh: thiscommandwontwork: command not found",
    "stderr_lines": [
        "/bin/sh: thiscommandwontwork: command not found"
    ],
    "stdout": "",
    "stdout_lines": []
}

И

- lvol:
        lv: lvdata
        vg: vgroup
        size: 2000M
        ignore_errors: yes
        register: command_result


      - debug:
              msg: "{{ command_result }}"

ok: [ansible] => {
"msg": {
    "changed": false,
    "err": "  Volume group \"vgroup\" not found\n  Cannot process volume group vgroup\n",
    "failed": true,
    "msg": "Volume group vgroup does not exist.",
    "rc": 5
}

Теперь, если я попытаюсь использовать when: '"xxx" in command_result.err' с заданием yum, например, это приведет к ошибке dict_object not found.

Есть ли способ узнать, какой атрибут использовать без тестирования?

1 Ответ

1 голос
/ 01 марта 2020

Тестирование - это, безусловно, самый простой и быстрый способ взглянуть на содержимое вашего зарегистрированного var в нескольких ситуациях и принять решение о том, как использовать его в вашей игровой книге.

Между тем, есть способы иметь глобальные знания о том, что возвращается в вашем зарегистрированном var из документации:

  1. Есть страница на Обычные модули возвращают значения
  2. Модули, возвращающие спецификацию c значений обычно документируют их на каждой соответствующей странице do c. Вот пример для stat модуля
  3. Вы также должны знать, что глобальная структура регистра изменяется при использовании al oop путем добавления списка results верхнего уровня, как объяснено в регистрация переменных

Знание того, что может быть в вашем реестре, не означает, что будет . В вашем примере упоминается атрибут (недокументированный ...) err для модуля lvol, который будет доступен только для задачи lvol с ошибкой. Вы можете обойти такие случаи, используя тесты (например, my_register is failed) или значения по умолчанию с фильтром default .

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