- ابتدا لازم به ذکر است در صورتی که یکی از فرآیندهای موجود در PlayBook با خطا رو به رو شود، روند اجرای فرآیندها متوقف میشود.
- یعنی ممکن است در یکی از فرآیندها ، خطایی رخ دهد، در این صورت فرآیندهای بعدی اجرا نخواهد شد.
- برای حل این مشکل میتوان از کلید ignore_errors استفاده نمود.
- به عنوان مثال کد زیر باعث میشود تا :
- ابتدا دست نوشتهی test.sh بر روی تمامی خادمهای تحت مدیریت اجرا شود.
- سپس دستور whoami بر روی تمامی خادمهای تحت مدیریت اجرا شود.
- در نهایت در صورتی که مشکلی در فرآیند اول رخ دهید، فرآیند دوم اجرا شده و PlayBook متوقف نمیشود.
---
- name: PlayBook
hosts: all
gather_facts: no
tasks:
- name: run script
script: /root/test.sh
ignore_errors: yes
- name: run whoami command
command: whoami
...
- به منظور اجرای پروندهی PlayBook به شکل زیر عمل کنید :
# ansible-playbook playbook.yaml
- در صورت اجرای موفقیت آمیز پروندهی PlayBook ، خروجیای مشابه زیر دریافت خواهید کرد :
PLAY [PlayBook] *******************************************************************************************************************************************************************************************
TASK [run script] *****************************************************************************************************************************************************************************************
fatal: [172.16.0.247]: FAILED! => {"changed": false, "msg": "Could not find or access '/root/test.sh'"}
...ignoring
fatal: [172.16.0.248]: FAILED! => {"changed": false, "msg": "Could not find or access '/root/test.sh'"}
...ignoring
fatal: [172.16.0.245]: FAILED! => {"changed": false, "msg": "Could not find or access '/root/test.sh'"}
...ignoring
TASK [run command] ****************************************************************************************************************************************************************************************
changed: [172.16.0.248]
changed: [172.16.0.245]
changed: [172.16.0.247]
PLAY RECAP ************************************************************************************************************************************************************************************************
172.16.0.245 : ok=2 changed=1 unreachable=0 failed=0
172.16.0.247 : ok=2 changed=1 unreachable=0 failed=0
172.16.0.248 : ok=2 changed=1 unreachable=0 failed=0
- نکته: همان طور که ملاحظه میکنید، دست نوشتهی test.sh پیدا نشد اما روند اجرای فرآیندها متوقف نشده است.
- به مواردی که به صورت رنگی مشخص شده است، دقت کنید.
- به منظور مطالعهی بیشتر لینک زیر پیشنهاد میشود :
https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html
- آزمایش شده بر روی Ansible نسخهی 2.5.1
- آزمایش شده بر روی سیستم عامل Ubuntu 18.04