У меня есть простой 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