Try / Catch باستخدام rescue وalways
عالج حالات الفشل بسلاسة
Try / Catch باستخدام rescue وalways درس مجاني في Ansible Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ansible Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ansible Academy 4 دروس في المجموع.
تحصل blocks على شبكة أمان
أقرن block بـ rescue وalways لتحصل على try وcatch وfinally لمهامك. فتصبح حالات الفشل قابلةً للاسترداد. 🛟
قسم rescue
إذا فشلت أي مهمة في block، ينتقل Ansible إلى rescue ويشغّل تلك المهام بدلًا منها، مثل عبارة catch.
- block:
- ansible.builtin.command: /opt/risky-step
rescue:
- ansible.builtin.debug:
msg: "Step failed, recovering"يُشغّل always مهما حدث
يُشغّل قسم always سواء نجحت block أو فشلت، وهو مناسب تمامًا للتنظيف، مثل إزالة ملف مؤقت.
- block:
- ansible.builtin.command: /opt/deploy
always:
- ansible.builtin.file:
path: /tmp/lock
state: absentالثلاثة معًا
استخدم block وrescue وalways في بنية واحدة: جرّب تنفيذ العمل، والتقط حالات الفشل، ثم أنهِ التنفيذ دائمًا بطريقة نظيفة.
- block:
- ansible.builtin.command: /opt/deploy
rescue:
- ansible.builtin.debug:
msg: "Rolling back"
always:
- ansible.builtin.debug:
msg: "Done either way"يعيد rescue ضبط حالة الفشل
إذا اكتمل تنفيذ rescue بنجاح، فلن يعود المضيف في حالة فشل. وتستمر play كما لو أن block قد نجحت.
ترتيب التنفيذ
تُشغّل مهام block أولًا؛ وعند الفشل، تُتخطى بقية block ويبدأ rescue. ويُشغّل always أخيرًا في كل حالة.
عندما يفشل rescue نفسه
إذا فشلت مهمة في rescue أيضًا، يُعلَّم المضيف بأنه فاشل، لكن always يستمر في التنفيذ قبل أن تتوقف play لذلك المضيف.
افحص الخطأ
يمكنك داخل rescue قراءة ansible_failed_task وansible_failed_result لمعرفة المهمة التي تعطلت وسبب ذلك.
- rescue:
- ansible.builtin.debug:
msg: "Failed task was {{ ansible_failed_task.name }}"استخدام فعلي: التراجع
النمط الكلاسيكي هو وضع النشر داخل block، والتراجع عن التغيير داخل rescue، ثم إعادة التشغيل أو إلغاء القفل داخل always. وهذا يحقق استردادًا نظيفًا في كل تنفيذ.
ليس مجرد إخفاء للأخطاء
يُستخدم rescue للاسترداد السلس، لا لإسكات الأخطاء. سجّل الفشل وأصلح الحالة؛ ولا تتظاهر بعدم حدوث أي خطأ. ⚠️
غياب rescue يعني التوقف الفوري
من دون قسم rescue، تتصرف block الفاشلة مثل أي مهمة فاشلة: فتوقف play لذلك المضيف فورًا.
تحقق سريع
لنتأكد من سلوك always.
مراجعة
يلتقط rescue حالات فشل block ويستعيد حالة المضيف، بينما يُشغّل always في كل مرة للتنظيف. إنها try وcatch وfinally في Ansible. ✅
الأسئلة الشائعة
هل درس «Try / Catch باستخدام rescue وalways» مجاني؟
نعم — نص درس «Try / Catch باستخدام rescue وalways» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ansible Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ansible Academy 4 دروس في المجموع.
ماذا ستتعلم في «Try / Catch باستخدام rescue وalways»؟
عالج حالات الفشل بسلاسة تتمرن على Ansible Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Ansible Academy؟
لا تُشترط خبرة سابقة. Ansible Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «Try / Catch باستخدام rescue وalways»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Ansible Academy هذا؟
نعم. كل درس في Ansible Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تجميع المهام باستخدام block
- Try / Catch باستخدام rescue وalways
- التحكّم في الفشل: failed_when وignore_errors
- تأكيدات مخصّصة باستخدام وحدة fail