Ansible сбой, но работа продолжается - PullRequest
0 голосов
/ 14 февраля 2020

В настоящее время я пишу кучу проверок для Ansible.

Это связано с установлением связи с удаленными компьютерами и выполнением проверки.

На основании результатов этой проверки я делаю решение, провалилось оно или нет.

Это важный бит: сама задача никогда не терпит неудачу. Это просто возвращает сообщение. Я регистрирую результат, а затем анализирую его. И на основании этого я решаю, будет ли это сбой или нет.

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

Таким образом, код выглядит так this:

- name: Check fail.
  fail:
    msg: "Test failed"
  when: "failfast_flag and <the actual check>"

Проблема в том, что если я сделаю failfast_flag false, он больше не будет выводить красный.

Я хочу, чтобы он продолжил со следующими тестами, в этом случае, но я также хочу, чтобы он был красного цвета, указывая, что это ошибка / сбой.

Как мне выполнить sh это?

РЕДАКТИРОВАТЬ: Спасибо за предложения, я дам они попробуют немного.

Ответы [ 2 ]

0 голосов
/ 15 февраля 2020

Это комбинация ответа @ edrupado и комментария @ Джека.

Идея состоит в том, чтобы переместить ошибку в задачу, в которой вы регистрируете значение, и используйте блок восстановления для сбоя с информативным сообщением, пропуск ошибки с флагом.

Я понятия не имею, какова ваша реальная задача по сбору данных. Я использовал фиктивный пример проверки наличия файла / каталога. Вы должны быть в состоянии приспособиться к реальному сценарию.

---
- name: Dummy POC just to test feasability
  hosts: localhost
  gather_facts: false

  tasks:

    - block:

        - name: Make sure /whatever dir exists
          stat:
            path: /whatever
          register: whatever
          failed_when: not whatever.stat.exists | bool

        - debug:
            msg: "/whatever exists: Good !"

      rescue:

        - fail:
            msg: /whatever dir must exist.
          ignore_errors: "{{ ignore_flag | default(false) | bool }}"

    - block:

        - name: Make sure /tmp dir exists
          stat:
            path: /tmp
          register: tmpdir
          failed_when: not tmpdir.stat.exists | bool

        - debug:
            msg: "/tmp exists: Good !"

      rescue:

        - fail:
            msg: /tmp dir must exist.
          ignore_errors: "{{ ignore_flag | default(false) | bool }}"

Что дает:

$ ansible-playbook /tmp/test.yml

PLAY [Dummy POC just to test feasability] *************************************************************************************************************************************************************************

TASK [Make sure /whatever dir exists] *****************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "failed_when_result": true, "stat": {"exists": false}}

TASK [fail] *******************************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "/whatever dir must exist."}

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=1    ignored=0

$ ansible-playbook /tmp/test.yml -e ignore_flag=true

PLAY [Dummy POC just to test feasability] *************************************************************************************************************************************************************************

TASK [Make sure /whatever dir exists] *****************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "failed_when_result": true, "stat": {"exists": false}}

TASK [fail] *******************************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "/whatever dir must exist."}
...ignoring

TASK [Make sure /tmp dir exists] **********************************************************************************************************************************************************************************
ok: [localhost]

TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "/tmp exists: Good !"
}

PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0    skipped=0    rescued=1    ignored=1
0 голосов
/ 14 февраля 2020

Не уверен, что я полностью понял ваш вопрос, но вы можете использовать структуру - block и rescue, чтобы обработать ошибки и продолжить воспроизведение книги в сценарии ошибок ios:

пример:

- block:
    - name: Check fail.
      fail:
      msg: "Test failed"
      when: "failfast_flag and <the actual check>"
  rescue:
    - name: do somthing when the task above fails
      command: <do somthing>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...