هل يحلم مبرمجو YML باختبار ansible؟

مخطط المطبخ ci


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


أعتقد أنك تستخدم إدارة التكوين ، وليس باش . أي التكوين الخاص بك هو رمز. إذا قلنا أن البنية التحتية عبارة عن كود ، فيجب تطبيق نفس الفلسفة على إنشائها كما في تطوير البرمجيات. هل فكرت في هذا؟ كيف يمكنك أن تفعل ذلك؟ وغيرها؟


المتطلبات الأساسية


في هذه الحالة ، كان هناك العديد من تلك التمهيدية:


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

قبل أن نفعل ما نقوم به ، نقوم بمقارنة الحلول الحالية.


مشروعاختبار المطبخجزيءالخاصة
اللغةروبيالثعبانباش / روبي
المراقبون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


الفكرة بسيطة قبيحة. نخلق جهازًا افتراضيًا جديدًا ، ونستخدم الدور ، ونجري اختبار الدخان.


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


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


لكننا قررنا المضي قدمًا. استخدم ala github flow ، أي الأدوار في برنش الفردية وبعد مراجعة merjim في الماجستير. إذا كانت الاختبارات جيدة ، فنحن نعيد الأدوار إلى البنية التحتية.


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


كما تتذكر ، كان لدينا قيود على إنشاء أجهزة افتراضية ، لذلك كان علينا اتخاذ قرار غير سارة في شكل ظاهرية متداخلة.


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


في البداية ، حاولنا Virtualbox x32 عدم تضمين الدعم المتداخل. تبين أن هذه ليست أفكارًا بسبب ثبات ذعر النواة. العامل الثاني المهم هو أننا نجلس على x86_64 ، لذلك استمر البحث (مرحبا libvirt) ، ولكن استقر على virtualbox كأكثر شيوعا على نظام التشغيل المدعوم.


الصعوبات


أثناء الإطلاق ، كان كل شيء جيدًا وكان لديه عدد من الصعوبات


تخطي إعدادات الخادم الوكيل من المضيف إلى ضيف الضيف


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


الحل: مبتذل - إنشاء قالب ERB.


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

إدارة إعدادات الشبكة من خلال ansible


في بعض الأدوار ، تم تكوين الشبكة ، في اختبارات بدا الأمر كما يلي:


  • نحن تكوين الشبكة عن طريق نسخ الملف.
  • تطبيق إعدادات الشبكة.
  • كل شيء سيء.

الحل: إضافة واجهة إلى الجهاز الظاهري


إذا كانت مجموعة الاختبار تحتوي على "_" كل شيء يسقط


لا يمكن استخدام Virtualbox "_" في اسم الجهاز الظاهري. والجهاز الظاهري يستخدم اسم البرنامج النصي.


الحل: إعادة تسمية مجموعات الاختبار "vm_" => "vm-"


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


تم استخدام الدور في المبيعات الشرطية عندما قرروا تغطيتها بالاختبارات. عندما تقوم بتدويرها إلى جهاز VM معد ، فإنها تفي بالدور ، فهي تقع من خلال testkitchen.


تلميح قليلا


 [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 server.
  4. Vagrant يخلق VM والتحديثات /etc/hosts .

ساوضح قليلا:
ماذا يحدث في حالة vm-oracle ؟


  1. المتشرد يخلق آلة افتراضية.
  2. تحديثات غامضة /etc/hosts ( vm-oracle x2)
  3. مستمع أوراكل يستمع إلى IPv4.
  4. المستمعين أوراكل يحل اسم المجال أوراكل. & يحصل IPv6.
  5. فشل

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


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

OOM يأتي لزيارتنا


قتل OOM الأجهزة الافتراضية بشكل عشوائي. أعطى Testkitchen في نفس الوقت كل أنواع الرسائل الغريبة في سجلاته.


الحل: زيادة مقدار الذاكرة.


يبني بطيئة


هذا المخطط بأكمله يعمل ببطء ، لعشرات الدقائق ، وأحيانا أكثر من ساعة.


الحلول:


  • باكر . Preassemble صور الجهاز الظاهري.
  • تشغيل حالات اختبار متعددة في نفس الوقت

الخاتمة


إذا قلنا أن البنية التحتية عبارة عن كود ، فيجب تطبيق نفس الفلسفة على إنشائها كما في تطوير البرمجيات. من ناحية ، حصلنا على حل عملي ، ولكن هناك بعض اللحظات غير السارة:


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

في الخرج ، يبدو الجزيء مع عامل الإرساء مثيرًا للاهتمام وأكثر محلية. نحن نفكر في ذلك.


المراجع


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


All Articles