اختبار لي إذا كنت تستطيع. هل يحلم مطورو YML باختبار ansible؟

مخطط المطبخ ci


إنه نسخة نصية للعرض التقديمي 2018-04-25 في مجموعة مستخدمي سانت بطرسبرغ لينكس . مثال التكوين موجود في https://github.com/ultral/ansible-role-testing


أفترض أنك تجعل إدارة التكوين ، وليس باش . هذا يعني أنه يجب عليك اختباره بطريقة ما. هل سبق لك اختبار الأدوار ansible؟ كيف يمكنك أن تفعل ذلك؟


كيف نفعل ذلك؟


في حالتي ، لدينا:


  • الكثير من الأدوار المختلفة.
  • يستضيف Hyper-V كمشرف.
  • سحابة خاصة مع إمكانية محدودة لإنشاء أجهزة VM عند الطلب.
  • وكيل للوصول إلى الإنترنت.
  • عدم القدرة على اختبار الأدوار ansible داخل عامل ميناء ، بسبب دور = التكوين الكامل VM.
  • قرار لتنفيذ سياسة البناء الأخضر لمستودع بوابة مع أدوار ansible.

دعونا نقارن الحلول الحالية للاختبار.


الاسماختبار المطبخجزيءإنشاء جديد
اللغةروبيالثعبانباش / روبي
المراقبون1321260
نجوم141311541
الشوك5021742
رخصةاباتشي 2.0معهد ماساتشوستس للتكنولوجياأي
يرتكب192912640
النشرات1011210
المساهمون109825

الاسمtestinfraserverspecInspecجوس
جيثبفيليب / تيستيفراmizzy / serverspecالشيف / inspecaelsabbahy / goss
اللغةالثعبانروبيروبياذهب
المراقبون9314516567
نجوم997210511672170
الشوك138361330156
رخصةاباتشي 2.0معهد ماساتشوستس للتكنولوجيااباتشي 2.0اباتشي 2.0
يرتكب38018544609309
النشرات3528234647
المساهمون4311015931

قررنا عدم إعادة اختراع العجلة والحصول على حل جاهز للإنتاج. كان لدى فريق البنية التحتية لدينا مهارات روبي قوية وتجربة رائعة مع روبي ، ونتيجة لذلك اخترنا Test Kitchen & inspec


المطبخ- ci


مخطط المطبخ ci


الفكرة الرئيسية هي إنشاء VM جديد ، وتطبيق دور ansible وإجراء بعض اختبارات الدخان.


سياسة البناء الخضراء


مخطط سياسة البناء الأخضر


أيضا ، قمنا بتنفيذ سياسة البناء الأخضر. أجرينا اختبارات لكل التزام في فرع رئيسي وإذا كانت الاختبارات على ما يرام ، عند تطبيق أدوار ansible.


الافتراضية المتداخلة


كما تتذكر ، كان لدينا سحابة خاصة مع إمكانية محدودة لإنشاء أجهزة VM عند الطلب. قررنا إنشاء VMs داخل VMs.


نحن بحاجة للذهاب أعمق


بادئ ذي بدء ، حاولنا تشغيل Virtualbox x32 دون تداخل. كانت فكرة سيئة بسبب ذعر النواة. الغالبية العظمى من أجهزة VM في البنية التحتية لدينا هي x86_64 ، لذلك قررنا مواصلة البحث. نتيجة لذلك قررنا استخدام الافتراضية المتداخلة. نأمل أن يكون مدعومًا بخوادمنا المضيفة.


تواجه القضايا


كنت تنفذ testkitchen وتواجه بعض القضايا.


تمرير إعدادات الوكيل من المضيف إلى testkitchen guest VM


في بعض دعاوى الاختبار ، قمنا بتكوين إعدادات عميل الوكيل داخل VM التي أنشأتها testkitchen. ومع ذلك ، لم يتم تكوين الخادم الوكيل على مضيف testkitchen ولا يمكن لـ ansible استخدام متغيرات إضافية ذات قيم فارغة


الحل: قم بإنشاء قالب erb لإعداد الخادم الوكيل الافتراضي إذا لم يتم تعيين متغيرات ENV


<%= ENV['http_proxy'].to_s.empty? ? 'http://proxy.example.com:3128' : ENV['http_proxy'] %> 

إدارة إعدادات الشبكة عبر قواعد اللعبة


بعض الأدوار تكوين واجهات الشبكة. بدت بدلة الاختبار مثل:


  • نشر إعدادات الشبكة على VMs
  • تحديث الشبكة
  • لقد فشلت

الحل: إضافة واجهات إلى VMs


تفشل إذا كانت حالات الدعوى تحتوي على "-" بالاسم


لا يمكن لـ Virtualbox استخدام "_" باسم vm


الحل: إعادة تسمية حقائب السفر "vm_" => "vm-"


فشل اختبار Oracle بدون "." في نهاية اسم VM


نحن نستخدم دورًا في الإنتاج ، ولكن عندما قررنا اختباره ، فقد فشل. نحن استنساخها.


وأود أن تظهر فكرة.


 [root@vm-oracle vagrant]# getent ahosts vm-oracle 127.0.0.1 STREAM vm-oracle 127.0.0.1 DGRAM 127.0.0.1 RAW [root@vm-oracle vagrant]# getent ahosts vm-oracle. fe80::a00:27ff:febd:bd6a STREAM vm-oracle fe80::a00:27ff:febd:bd6a DGRAM fe80::a00:27ff:febd:bd6a RAW 10.0.2.15 STREAM 10.0.2.15 DGRAM 10.0.2.15 RAW [root@oracle vagrant]# getent ahosts oracle.example.com. 192.168.128.182 STREAM oracle.example.local 192.168.128.182 DGRAM 192.168.128.182 RAW 

هل لديك أي أفكار ماذا يحدث؟


إنه خطأ صعب:


  1. مكّننا الاستماع IPv4 فقط في إعدادات مستمع أوراكل
  2. أوراكل تستخدم FQDN
  3. يحتوي linux على قاعدة بيانات خاصة "myhostname" لحل اسم المضيف ، ويستخدم بعد / etc / hosts & dns solution
  4. خلق Vagrant VM وتحديثها /etc/hosts

أود أن أوضحها أكثر قليلاً:
ماذا حدث في حالة vm-oracle ؟


  1. المتشرد خلق vm
  2. تحديث المهبل /etc/hosts ( vm- أوراكل x2)
  3. مستمع أوراكل استمع IPv4
  4. المستمعين أوراكل حل vm أوراكل. & حصلت IPv6
  5. فشل

ما حدث في حالة vm-oracle. ؟


  1. المتشرد خلق vm
  2. تحديث متشرد / الخ / المضيفين ( vm-oracle & vm-oracle. )
  3. مستمع أوراكل استمع IPv4
  4. المستمعين أوراكل حل vm أوراكل. & حصلت IPv4
  5. حسنا

قادم


كان عشوائيا قتل VMs. فشل Testkitchen مع أخطاء غريبة.


الحل: زيادة ذاكرة الوصول العشوائي


يبني بطيئة


كان يعمل ببطء


الحلول:


  • باكر . مربع متشرد مُجهز مسبقًا بمهام مشتركة
  • التزامن

الخاتمة


من ناحية ، يعمل التنفيذ الحالي ، ولكن من ناحية أخرى ، هناك بعض المشكلات


  • ليست سهلة الاستخدام.
  • نحن مزيج روبي وبيثون.
  • لا يوجد تحقق indepotence.
  • انها تعمل بطيئة.
  • من الصعب تتبع السجلات في وظيفة واحدة.

نتيجة لذلك ، قد يكون الجزيء والرسو حلًا مثيرًا للاهتمام.


بعض الروابط ذات الصلة


Source: https://habr.com/ru/post/ar436960/


All Articles