Ansible сбойный модуль не работает из-за ошибки во время выполнения - PullRequest
0 голосов
/ 13 марта 2020

У меня есть книга с заданием greps для строки в файле. Если строка найдена, блок должен потерпеть неудачу. Однако в модуле аварийного сбоя он не может распечатать сообщение и ошибки:

Вот моя книга воспроизведения:

---

- name: "Play 1"
  hosts: localhost
  tasks:
   - block:
      - name: "Search for IP"
        command: "grep -w {{ source_host }} {{ playbook_dir }}/allhost.hosts"
        register: command_result
        failed_when: command_result.rc == 0


     rescue:
      - name: Print custom conditional debug message
        fail:
          msg: >-
            {{
              command_result.rc == 0 |
              ternary(
                "This IP On-Boarded.",
                "The DB is not reachable."
              )
            }}

Я попытался изменить

command_result.rc == 0 |

На

command_result.stdout is search ( source_host ) |

Но это тоже не помогло.

Учитывая command_result.rc = 0; Я ожидал "Этот IP-адрес установлен". быть напечатанным, однако это не так. Можете ли вы сообщить мне, в чем проблема с моей пьесой?

Вывод:

TASK [Search for IP] *****************************
[1;30mtask path: /tmp/filegaurd.yml:20[0m
[0;34mUsing module file /usr/lib/python2.7/site-packages/ansible/modules/commands/command.py[0m
[0;34mPipelining is enabled.[0m
[0;34m<127.0.0.1> ESTABLISH LOCAL CONNECTION FOR USER: user1[0m
[0;34m<127.0.0.1> EXEC /bin/sh -c '/usr/bin/python2 && sleep 0'[0m
[0;31mfatal: [localhost]: FAILED! => {[0m
[0;31m    "changed": true, [0m
[0;31m    "cmd": [[0m
[0;31m        "grep", [0m
[0;31m        "-w", [0m
[0;31m        "10.9.9.91", [0m
[0;31m        "/tmp/allhost.hosts"[0m
[0;31m    ], [0m
[0;31m    "delta": "0:00:00.096103", [0m
[0;31m    "end": "2020-03-13 07:25:43.705938", [0m
[0;31m    "failed_when_result": true, [0m
[0;31m    "invocation": {[0m
[0;31m        "module_args": {[0m
[0;31m            "_raw_params": "grep -w 10.9.9.91 /tmp/allhost.hosts", [0m
[0;31m            "_uses_shell": false, [0m
[0;31m            "argv": null, [0m
[0;31m            "chdir": null, [0m
[0;31m            "creates": null, [0m
[0;31m            "executable": null, [0m
[0;31m            "removes": null, [0m
[0;31m            "stdin": null, [0m
[0;31m            "stdin_add_newline": true, [0m
[0;31m            "strip_empty_ends": true, [0m
[0;31m            "warn": true[0m
[0;31m        }[0m
[0;31m    }, [0m
[0;31m    "rc": 0, [0m
[0;31m    "start": "2020-03-13 07:25:43.609835", [0m
[0;31m    "stderr": "", [0m
[0;31m    "stderr_lines": [], [0m
[0;31m    "stdout": "10.9.9.91 USERID=user1 files_list=/tmp/winstone4603745991442278706.jar,/tmp/winstone5835113081224811756.jar", [0m
[0;31m    "stdout_lines": [[0m
[0;31m        "10.9.9.91 USERID=user1 files_list=/tmp/winstone460.jar,/tmp/winstone56.jar"[0m
[0;31m    ][0m
[0;31m}[0m


TASK [Print custom conditional debug message] **********************************
[1;30mtask path: /tmp/file.yml:28[0m
[0;31mfatal: [localhost]: FAILED! => {[0m
[0;31m    "changed": false, [0m
[0;31m    "msg": "False "[0m
[0;31m}[0m


PLAY RECAP *********************************************************************
[0;31mlocalhost[0m                  : [0;32mok=1   [0m changed=0    unreachable=0    [0;31mfailed=1   [0m skipped=0    [0;32mrescued=1   [0m ignored=0

1 Ответ

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

Оператор фильтра jinja | является более ассоциативным, чем ==, что фактически оценивается следующим образом:

command_result.rc == (0 | ternary("This IP On-Boarded.", "The DB is not reachable."))

, что эквивалентно:

command_result.rc == "The DB is not reachable."

, что всегда равно False, поэтому у вас есть выход "msg": "False ". Чтобы решить эту проблему, вы должны использовать круглые скобки вокруг теста:

(command_result.rc == 0) | ternary("This IP On-Boarded.", "The DB is not reachable.")

Обратите внимание, что весь фильтр должен быть в одной строке.

...