Ansible / المتقدم: التنسيق والمنصات والاختبارات والتشخيص / الدرس 13
تعريف الفشل والمحاولات والتعافي بصدق
استخدم failed_when وchanged_when وblock/rescue/always والمحاولات المحدودة دون اعتبار التجاهل أو الإنقاذ رجوعاً تلقائياً.
في هذه الصفحة
أهداف الدرس
- تصنيف فشل المهمة وعدم الوصول وبطلان الإدخال منفصلة.
- شرح حدود rescue والنتائج العامة الصادقة.
- إعادة العابر المبرر فقط بآثار محدودة.
ليست المهمة الفاشلة كل خطأ تنفيذ
تميز Ansible الفشل والغائب والمتجاوز وأخطاء التعريف والتقييم. تعالج rescue مساراً موثقاً لا كل غائب أو مشوه، ويسمح التجاهل استمراراً لا صحة أو وجود متطلبات. احفظ الفئة والهدف والمهمة والنتيجة. يفيد التصنيف أكثر من تجاهل حتى اخضرار التشغيل مع تنقيح الحساس. ولا ينشئ الاستمرار بعد خطأ البيانات التي كان يفترض أن تنتجها المهمة؛ لذلك تحتاج المهام اللاحقة إلى شروط واضحة بدلاً من افتراض نجاح كل سابق.
يجب أن تحفظ محمولات الفشل والتغير العقد
تعبر failed_when عن معنى الفشل وchanged_when عن الإبلاغ لا تجميل المعطوب. لقائمة المحمولات اقتران موثق فاكتب OR صريحاً. ليكن الشرط منطقياً وافحص الحقول بعد التجاوز أو المعاينة. افصل الأصلي من تشخيص وتنظيف لاحقين كي لا يضيع أول مانع. وإذا احتاجت السياسة فشل أي شرط، فيجب كتابة هذا المعنى صراحة، لأن تغيير طريقة جمع الشروط قد يحول نتيجة معطوبة إلى نجاح ظاهري.
rescue فرع تعاف لا محرك معاملات
تجمع block والإنقاذ فرع للفشل المناسب وalways عمل بعمرها. قد يستمر ناجح الإنقاذ ولا يعكس السابق أو يثبت الصحة. عرف ما يستعيده وفشله وهل يبقى العام فاشلاً. لا تدع ذرية لسلسلة وحدات؛ تختلف استجابة الإعداد والغائب والترحيل الجزئي. وقد يبقى جزء من الحالة الدائمة مختلفاً حتى لو نفذت جميع خطوات rescue بنجاح، ولذلك يلزم تعريف ما الذي استعيد وما الذي ما زال يحتاج إجراءً.
- name: Illustrate a bounded recovery structure
hosts: lab_nodes
gather_facts: false
vars:
lab_ready: true
tasks:
- name: Describe validation and recovery boundaries
block:
- name: Validate a synthetic input
ansible.builtin.assert:
that:
- lab_ready is boolean
- lab_ready
rescue:
- name: Describe recovery intent
ansible.builtin.debug:
msg: Synthetic recovery branch only
always:
- name: Describe final evidence collection
ansible.builtin.debug:
msg: Synthetic lifecycle complete
يستخدم تحققاً وdebug مصطنعين ولم ينفذ؛ لا يثبت التحليل الأهلية أو المحرك أو تعافياً.
تحديد المحاولات واشتراط أمان التكرار
تعالج until المحدودة عابراً موثقاً وقد تكرر أثراً. ميز قراءة الحالة من إعادة المعاملة واحفظ العدد والنهائي وسبب التالي. لا تثبت المهلة غياب الأثر، ولا تعد المشوه أو الرفض أو غير المدعوم بلا حد. يوقف النموذج نجاحاً بقائمة محدودة لا محركاً أو استطلاعاً حياً. وتكون إعادة قراءة حالة مستقرة أضيق خطراً من إعادة إرسال فعل ربما التزم بالفعل، لذلك يجب أن تأتي سياسة المحاولة من عقد العملية نفسها.
outcomes = ['transient', 'transient', 'ok']
limit = 3
final = 'failed'
for attempt, outcome in enumerate(outcomes[:limit], 1):
if outcome == 'ok':
final = 'success'
break
print(f'attempts={attempt} final={final}')
attempts=3 final=success
ينجح الثالث المصطنع دون أمر أو API أو مؤقت أو وحدة ولا يثبت أمان إعادة العمل المغير.
يحتاج التعافي شروطاً لاحقة مستقلة
عرف الدائم وتوافق الإعداد والسلوك ومتابعة الباقي. تحقق من اللاحق لا خروج rescue فقط. اختبر قبل الأثر والجزئي والنفاد وفشل التعافي والغائب بمؤقت مصرح، واحفظ خط الزمن. لا نحقن عطلاً أو نتعاف بعيداً؛ نميز التصميم من الإثبات التشغيلي. ويفصل خط الزمن بين الخطأ الأول ومحاولات الاسترداد اللاحقة، حتى لا تصبح رسالة تنظيف أخيرة هي التفسير الوحيد لفشل بدأ في مرحلة أخرى.
الأخطاء الشائعة وإصلاحها
استخدام ignore_errors معالجة نجاح
- لماذا يحدث؟
- اختلط الاستمرار بالشرط الصحيح.
- كيف تصلحه؟
- صنف وعالج الفشل صراحة.
- كيف تتجنب تكراره؟
- تحقق من الإنجاز مستقلاً.
توقع rescue للمضيف الغائب
- لماذا يحدث؟
- اختلطت الفئات.
- كيف تصلحه؟
- استخدم سياسة الغائب مستقلة.
- كيف تتجنب تكراره؟
- اختبر الفئات منفصلة.
إعادة معاملة منتهية المهلة عميانياً
- لماذا يحدث؟
- اعتُبر المجهول غياب أثر.
- كيف تصلحه؟
- افحص عقد التكرار.
- كيف تتجنب تكراره؟
- افصل استطلاع الحالة من الإرسال.
اختبر فهمك
1. لماذا قد يترك إنقاذ ناجح نشراً مرفوضاً؟
اعرض الحل المشروح
قد يبقى دائم أو جزئي لم يستعد والتطبيق معطلاً؛ عرف شروط التعافي وقرر فشل العام.
2. ما الذي يبرر شرط الإعادة؟
اعرض الحل المشروح
عابر موثق بحد ومحاولة آمنة أو مزالة التكرار مع دليل المحاولات واللاحق لا مجرد صفر.
أهم ما تعلمته
- احفظ فئات الفشل وصدق الإبلاغ.
- اشترط إعادة محدودة وتعافياً متحققاً.