
إنه نسخة نصية للعرض التقديمي 2018-04-25 في مجموعة مستخدمي سانت بطرسبرغ لينكس . مثال التكوين موجود في https://github.com/ultral/ansible-role-testing
أفترض أنك تجعل إدارة التكوين ، وليس باش . هذا يعني أنه يجب عليك اختباره بطريقة ما. هل سبق لك اختبار الأدوار ansible؟ كيف يمكنك أن تفعل ذلك؟
كيف نفعل ذلك؟
في حالتي ، لدينا:
- الكثير من الأدوار المختلفة.
- يستضيف Hyper-V كمشرف.
- سحابة خاصة مع إمكانية محدودة لإنشاء أجهزة VM عند الطلب.
- وكيل للوصول إلى الإنترنت.
- عدم القدرة على اختبار الأدوار ansible داخل عامل ميناء ، بسبب دور = التكوين الكامل VM.
- قرار لتنفيذ سياسة البناء الأخضر لمستودع بوابة مع أدوار ansible.
دعونا نقارن الحلول الحالية للاختبار.
الاسم | اختبار المطبخ | جزيء | إنشاء جديد |
---|
اللغة | روبي | الثعبان | باش / روبي |
المراقبون | 132 | 126 | 0 |
نجوم | 1413 | 1154 | 1 |
الشوك | 502 | 174 | 2 |
رخصة | اباتشي 2.0 | معهد ماساتشوستس للتكنولوجيا | أي |
يرتكب | 1929 | 1264 | 0 |
النشرات | 101 | 121 | 0 |
المساهمون | 109 | 82 | 5 |
قررنا عدم إعادة اختراع العجلة والحصول على حل جاهز للإنتاج. كان لدى فريق البنية التحتية لدينا مهارات روبي قوية وتجربة رائعة مع روبي ، ونتيجة لذلك اخترنا Test Kitchen & inspec
المطبخ- 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
هل لديك أي أفكار ماذا يحدث؟
إنه خطأ صعب:
- مكّننا الاستماع IPv4 فقط في إعدادات مستمع أوراكل
- أوراكل تستخدم FQDN
- يحتوي linux على قاعدة بيانات خاصة "myhostname" لحل اسم المضيف ، ويستخدم بعد / etc / hosts & dns solution
- خلق Vagrant VM وتحديثها
/etc/hosts
أود أن أوضحها أكثر قليلاً:
ماذا حدث في حالة vm-oracle ؟
- المتشرد خلق vm
- تحديث المهبل
/etc/hosts
( vm- أوراكل x2) - مستمع أوراكل استمع IPv4
- المستمعين أوراكل حل vm أوراكل. & حصلت IPv6
- فشل
ما حدث في حالة vm-oracle. ؟
- المتشرد خلق vm
- تحديث متشرد / الخ / المضيفين ( vm-oracle & vm-oracle. )
- مستمع أوراكل استمع IPv4
- المستمعين أوراكل حل vm أوراكل. & حصلت IPv4
- حسنا
قادم
كان عشوائيا قتل VMs. فشل Testkitchen مع أخطاء غريبة.
الحل: زيادة ذاكرة الوصول العشوائي
يبني بطيئة
كان يعمل ببطء
الحلول:
- باكر . مربع متشرد مُجهز مسبقًا بمهام مشتركة
- التزامن
الخاتمة
من ناحية ، يعمل التنفيذ الحالي ، ولكن من ناحية أخرى ، هناك بعض المشكلات
- ليست سهلة الاستخدام.
- نحن مزيج روبي وبيثون.
- لا يوجد تحقق indepotence.
- انها تعمل بطيئة.
- من الصعب تتبع السجلات في وظيفة واحدة.
نتيجة لذلك ، قد يكون الجزيء والرسو حلًا مثيرًا للاهتمام.