Ansible / المتوسط: الإعادة والأسرار والتحقق النطاقي / الدرس 9
تجميع السلوك المعاد كواجهات أدوار
صمم مدخلات الدور وافتراضياته ومهامه ومعالجاته واعتماداته وإعادته الثابتة والديناميكية بتحقق صريح.
في هذه الصفحة
أهداف الدرس
- شرح تخطيط الدور وملكية مدخلاته.
- تمييز الاستيراد الثابت من التضمين الديناميكي.
- التحقق من الوسائط ومنع الاعتماد الخفي بين الأدوار.
الدور عقد قابل للإعادة لا مجلد فقط
تنظم الأدوار المهام والمعالجات والقيم والملفات والقوالب والبيانات بتخطيط معروف. تصح الإعادة بإعلان المطلوب والافتراضي والمنصات والآثار والقبول. تجنب متغيراً عاماً من كتاب آخر وميز العام والداخلي. ليس الدور مخزناً لكل مهام المؤسسة؛ تصغر المراجعة بمسؤولية متماسكة ومخطط صغير. وتسهل الواجهة الصغيرة معرفة ما إذا كان تعديل إصدار الدور يغير مدخلات المستدعي أو آثاره، بدلاً من اكتشاف ذلك بعد تنفيذ اعتماد مخفي.
للافتراضيات ومتغيرات الدور قصد تجاوز مختلف
توفر defaults تخصيصاً منخفضاً وvars قد تتجاوز ما توقعه المستدعي. اختر بالملكية لا الراحة ولا تعوض كل مطلوب. تضيف أدوار الاعتماد مهام وقِيماً ومعالجات فوثق الرسم والإصدار. لتكرار الدور والاعتماد قواعد لا تفترض كل استدعاء أو مساواة قائمة المهام. وقد يغير تحديث اعتماد واحد سلسلة المهام والمعالجات بأكملها، لذلك لا يكفي توثيق اسم الدور المباشر من دون بيان ما سيجلبه معه.
يختلف وقت الاستيراد والتضمين
توسع imports المحتوى بالمعالجة وتدخله includes وقت التشغيل بقواعدها. يؤثر ذلك التقييم والعرض والوسوم والوراثة. قد يطبق شرط الاستيراد على الموسع ويقرر شرط التضمين إدخاله؛ راجع المختار. اختر للعقد لا تبديل الاسم واختبر الوسم والقيم والمعالج بالسياق. ويؤثر فرق التوقيت في الأسئلة التي يمكن الإجابة عنها قبل التنفيذ، مثل عرض المهام والوسوم وتوفر القيم، ولهذا لا تعد الصيغتان استبدالاً نصياً بسيطاً.
إظهار معاملات استدعاء دور ديناميكي
يظهر include_role الدور والمدخل ولا يثبت وجوده أو سلامة اعتماده ودعمه. الدور الافتراضي هنا لا يحمل. استخدم تحقق الوسائط وسجل الواجهة وافصل التحقق قبل الآثار. اختر عرض المتغير ووراثة الوسم صراحة لا من تشغيل واحد. وتفيد مراجعة كشف المتغيرات العامة في منع تسرب حالة داخلية إلى المستدعي، مثلما تفيد مراجعة الوسوم في حفظ مداخل التنفيذ الجزئي المدعومة.
- name: Illustrate a role interface
hosts: lab_nodes
gather_facts: false
tasks:
- name: Request the fictional report role
ansible.builtin.include_role:
name: lab_report
vars:
lab_report_settings:
workers: 2
mode: review
الدور افتراضي للواجهة ولا يحله التحليل أو ينفذه أو يثبت اعتماداً أو يتصل.
اختبار واجهة البيانات منفصلة من التنفيذ
يفحص تحقق غير متصل المفاتيح والنوع لا محرك argument spec أو الملحق والهدف. يوضح المطلوب فقط. اختبر لاحقاً الصحيح والغائب والمنصة والأول والثبات والتعافي. ركز السلوك العام لا عدد المهام كي لا يكسر تنظيم داخلي عقداً صحيحاً. أما فحوص التنفيذ اللاحقة فيجب أن تثبت سلوك الواجهة عند إعادة تنظيم الداخل أيضاً، لا أن تتعطل لمجرد تقسيم مهمة إلى مهمتين متكافئتين.
settings = {'workers': 2, 'mode': 'review'}
required = {'workers', 'mode'}
assert required <= settings.keys()
assert type(settings['workers']) is int and settings['workers'] > 0
assert settings['mode'] in {'review', 'archive'}
print('synthetic_role_contract=valid')
synthetic_role_contract=valid
تخص التحققات المثبت ولا تستدعي تحقق Ansible أو تكتشف دوراً أو تنفذ.
الأخطاء الشائعة وإصلاحها
استهلاك الدور قيماً عامة غير متعلقة
- لماذا يحدث؟
- لم يعرف حد المدخل.
- كيف تصلحه؟
- استخدم مدخلات نطاقية وافتراضيات موثقة.
- كيف تتجنب تكراره؟
- اختبر الدور بأكثر من مستدع.
اعتبار include وimport مترادفين
- لماذا يحدث؟
- أُهمل الوقت والوراثة.
- كيف تصلحه؟
- اختر واختبر العقد المقصود.
- كيف تتجنب تكراره؟
- اختبر الوسوم والشروط بالإعادة.
إخفاء اسم الدور اعتمادات غير مراجعة
- لماذا يحدث؟
- أُهمل الرسم المتعدي.
- كيف تصلحه؟
- اجرد الأدوار والإصدارات والآثار.
- كيف تتجنب تكراره؟
- راجع الاعتماد كتغير نطاق.
اختبر فهمك
1. لماذا يفضل مدخل قابل للتجاوز في defaults لا مصدر عال اعتباطي؟
اعرض الحل المشروح
يعكس الموقع ملكية المستدعي؛ يتيح الافتراضي تخصيصاً صريحاً وقد يهزمه الأقوى خفية.
2. ماذا لا يثبته نجاح مخطط الدور غير المتصل؟
اعرض الحل المشروح
لا يثبت التحميل والاعتماد والتوسعة والوحدة والآثار والتكرارية والصحة؛ أبلغ فحص البيانات وخطط البقية بتصريح مستقل.
أهم ما تعلمته
- صمم الأدوار واجهات صغيرة بإصدارات.
- راجع الوقت والوراثة والاعتماد المتعدي.