Ansible блок спасательных сил терпит неудачу с fail_when - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть следующий блок:

 - block:
     - name: "actions"
       ...   # some tasks
   rescue:
     - name: "Rollback"
       ...   # some tasks
     - name: "force fail after rollback"
       debug:
         msg: "this task is just to force a fail"
       failed_when: true     #tried yes instead of true too      

Запуск этого (с использованием Rundeck), когда спасение вызывается для отката, мы добиваемся успеха даже при принудительном отказе.

PLAY RECAP *********************************************************************
Host1 : ok=99   changed=41   unreachable=0    failed=1
localhost : ok=3    changed=0    unreachable=0    failed=0
Host2 : ok=99   changed=41   unreachable=0    failed=1

Playbook finished: Fri Feb  7 17:16:16 2020, 211 total tasks.  0:04:04 elapsed.

в соответствии с документацией :

Это «вернет» статус неудавшегося задания для прогона, и воспроизведение будет продолжено как если бы это было успешно.

Как я могу принудительно вызвать сбой / сбой воспроизведения в блоке спасения?

Anisble версия:

%$ ansible --version
ansible 2.6.0

1 Ответ

1 голос
/ 10 февраля 2020

Q: "Ansible сбой спасательной силы блока с fail_when"

A: Работает, как и ожидалось, с Ansible 2.9.4. Игра ниже

- hosts: localhost
  tasks:
    - block:
        - debug:
            msg: Block failed
          failed_when: true
      rescue:
        - debug:
            msg: Rescue started
        - debug:
            msg: Rescue failed
          failed_when: true

дает

PLAY [localhost] ***

TASK [debug] ***
fatal: [localhost]: FAILED! => {
    "msg": "Block failed"
}

TASK [debug] ***
ok: [localhost] => {
    "msg": "Rescue started"
}

TASK [debug] ***
fatal: [localhost]: FAILED! => {
    "msg": "Rescue failed"
}

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

$ ansible --version
ansible 2.9.4
  config file = /home/tester/.ansible.cfg
  configured module search path = [u'/home/tester/.ansible/my_modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.16 (default, Oct  7 2019, 17:36:04) [GCC 8.3.0]
...