Назад | Перейти на главную страницу

Как перейти в модуль аварийного восстановления при сбое любого пакета в Ansible Playbook

У меня есть простой playbook, в котором я устанавливаю кучу пакетов в локальной системе, ожидая, что моя playbook выйдет из цикла, когда во время установки произойдет какой-либо сбой, и перейду к модулю аварийного восстановления для восстановления. Но мой доступный playbook пытается развернуть все пакеты, даже если есть сбой, и playbook вызывает модуль спасения после итерации всех пакетов.

Он не должен повторять второй пакет, если есть какой-либо сбой в первом пакете.

install_deb.yml -> Playbook

---
- hosts: localhost
  tasks:
    - name: Deploy all packages
      block:
         - name: installing debian packages
           apt:
              deb: "{{ item }}"
           with_items:
              - /home/playbook/sample1.deb
              - /home/playbook/sample2.deb
           when: ansible_distribution == "Ubuntu"
      rescue:
         - name:  Deployment of debian package is Failed
           debug: msg="There was Failure installing Package"

Текущий выход:

ansible-playbook installdeb.yml

PLAY [SSHFS] **************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************************************************************
ok: [localhost]

TASK [installing debian packages] *****************************************************************************************************************************************************************************
 [WARNING]: Could not find aptitude. Using apt-get instead

failed: [localhost] (item=/home/playbook/sample1.deb) => {"ansible_loop_var": "item", "changed": false, "item": "/home/playbook/sample1.deb", "msg": "Unable to install package: E:read, still have 8 to read but none left"}
failed: [localhost] (item=/home/playbook/sample2.deb) => {"ansible_loop_var": "item", "changed": false, "item": "/home/playbook/sample2.deb", "msg": "Unable to install package: E:read, still have 8 to read but none left"}

TASK [Deployment of debian package is Failed] *****************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "There was Failure installing Package"
}

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

Ожидая выхода: ansible-playbook installdeb.yml

PLAY [SSHFS] **************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************************************************************
ok: [localhost]

TASK [installing debian packages] *****************************************************************************************************************************************************************************
 [WARNING]: Could not find aptitude. Using apt-get instead

failed: [localhost] (item=/home/playbook/sample1.deb) => {"ansible_loop_var": "item", "changed": false, "item": "/home/playbook/sample1.deb", "msg": "Unable to install package: E:read, still have 8 to read but none left"}


TASK [Deployment of debian package is Failed] *****************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "There was Failure installing Package"
}

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

Когда я изменил пьесу, как показано ниже, все заработало, как ожидалось.

---
- hosts: localhost
  tasks:
    - name: Deploy all packages
      block:
         - name: installing debian packages
           apt:
              deb: "{{ item }}"
           register: apt_output
           with_items:
              - /home/playbook/sample1.deb
              - /home/playbook/sample2.deb
           when: (not (apt_output |default({})) is failed) and (ansible_distribution == "Ubuntu")
      rescue:
         - name:  Deployment of debian package is Failed
           debug: msg="There was Failure installing Package"

Протестированный вывод:

ansible-playbook installdeb.yml

PLAY [SSHFS] **************************************************************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************************************************************
ok: [localhost]

TASK [installing debian packages] *****************************************************************************************************************************************************************************
 [WARNING]: Could not find aptitude. Using apt-get instead

failed: [localhost] (item=/home/playbook/sample1.deb) => {"ansible_loop_var": "item", "changed": false, "item": "/home/playbook/sample1.deb", "msg": "Unable to install package: E:read, still have 8 to read but none left"}
skipping: [localhost] => (item=/home/playbook/sample2.deb)

TASK [Deployment of debian package is Failed] *****************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "Failu in Debian Package"
}

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