يوم جيد. تم ذكر Ansible أكثر من مرة على Habré ، لكنني لم أجد مقالات عن اختبار أدواره باستخدام الجزيء ، ومع ذلك أجد أن هذا الإطار مناسب للغاية وأرغب في مشاركة هذا مع جمهور Habr.
ولكن أولا ، قليلا عن ما اعتدت من قبل.
في السابق ، لاختبار الأدوار الملموسة التي أقوم بإنشائها ، كنت أستخدمها بشكل واضح:
$ vagrant init debian/jessie64 $ vagrant up
إنشاء أجهزة افتراضية ، وبعد ذلك كتبت الجرد وكتاب اللعب لإطلاق الدور ، حتى تعرفت على الجزيء في يوم من الأيام.
ما الذي يمكن أن يقدمه الجزيء؟
- تهيئة الدور الأولي
- سائق / مزود
- اختبارات العاطفة
- التحقق
تهيئة الدور الأولي
إذا تم تحديد دور جديد ، يقوم بإنشاء بنية نموذج للدور ansible
سائق / مزود
يسمح لنا Molecule باستخدام حاوية Docker أو آلة افتراضية كخنزير غينيا باستخدام Vagrant ، ويتم تحديد ذلك عن طريق تحديد برنامج التشغيل أثناء التهيئة ، أو في molecule.yml. بسبب إذا كان لا بد لي من اختبار أدوار تنظيم الحاويات ، فسيظل Vagrant هو المحرك المفضل بالنسبة لي. اختيار Vagrant كسائق يتيح لك أيضًا اختيار موفر.
التالية متوفرة:
- Libvirt
- يوازي
- VirtualBox (افتراضي)
- برنامج VMware Fusion
بعد ذلك ، سننظر في متغير Vagrant مع VirtualBox كموفر.
اختبارات العاطفة
حسب الويكي:
خاصية كائن أو عملية عند تطبيق العملية على الكائن مرة أخرى تعطي نفس النتيجة كما لو كانت واحدة.
فيما يتعلق بالأدوار غير المرئية ، عند إعادة تشغيل الدور ، يجب عدم إجراء أي تغييرات.
التحقق
من أجل التأكد من أن الدور قد عمل بشكل صحيح ، فإن عدم القيام بأي مهمة لا يكفي. بعد كل شيء ، تحتاج إلى التحقق من أن الخدمات قد بدأت ، والمنافذ مفتوحة ، إلخ.
الأطر التالية متاحة للتحقق:
- جوس
- Serverspec
- Testinfra (افتراضي)
لقد اختبرت من قبل جوس و Testinfra. بنفسي ، اخترت Testinfra.
مثال للاستخدام:
$ molecule init --role sample-role
بعد تنفيذ هذا الأمر ، نحصل على دليل لعينات الأدوار بهيكل دور غير مرئي نموذجي وملفات yaml اللازمة:
defaults handlers meta molecule.yml // - molecule playbook.yml // README.md tasks tests // vars
يمكنك البدء دون تحديد مفتاح التبديل --role ، في هذه الحالة ، سيتم إنشاء ملفات molecule.yml و playbook.yml في الدليل الحالي.
يحدث أنك تحتاج إلى التأكد من أن الدور يعمل على عدة توزيعات في هذه الحالة ، في molecyle.yml ، يجب عليك تحديد أسماء الصناديق المهجورة (في الأنظمة الأساسية):
vagrant: platforms: - name: jessie64 box: debian/jessie64 - name: centos7 box: centos/7
بعد ذلك ، أضف الإجراءات / المتغيرات الضرورية ، إلخ. في الدور ، وبعد ذلك نختبر على جميع المنصات المحددة:
$ molecule test --platform all
بعد هذا الجزيء:
- إذا كانت هناك أجهزة افتراضية تم إنشاؤها بالفعل ، فستتوقف وستحذفها
- سوف ترفع الأجهزة الافتراضية اللازمة
- اختبار دورنا مع الوبر لينس
- الوفاء بدورنا في الحاويات التي تم إنشاؤها حديثا
- سوف اختبار ل idempotency
- تشغيل اختبارات testinfra
- سيحذف الأجهزة الافتراضية التي تم إنشاؤها
قد تحتاج إلى تغيير سلوك الجزيء عند إجراء اختبار ، على سبيل المثال ، لا تقم باختبار عدم وجود قوة ، ولهذا أضف ما يلي إلى molecule.yml:
molecule: test: sequence: - destroy - syntax - create - converge - verify - destroy
يمكنك أيضًا استدعاء كل خطوة من الخطوات المقابلة بشكل منفصل باستخدام الأمر المناسب ، على سبيل المثال:
$ molecule create --platform all $ molecule syntax $ molecule create $ molecule converge $ molecule verify
كخيار واحد ، لا تقم بحذف / إنشاء جهاز ظاهري جديد قبل كل التقارب.
يمكنك تحديد منصة معينة واختبارها بشكل منفصل:
$ molecule create --platform jessie64 $ molecule syntax $ molecule create $ molecule converge $ molecule verify
شكرا لاهتمامكم!