ProHoster > Blog > Ma'muriyat > Ko'rsatmalar: qanday qilib aniq rollarni sinab ko'rish va ishlab chiqarishdan oldin muammolarni aniqlash
Ko'rsatmalar: qanday qilib aniq rollarni sinab ko'rish va ishlab chiqarishdan oldin muammolarni aniqlash
Hammaga salom!
Men mehmonxonani bron qilish xizmatida DevOps muhandisi sifatida ishlayman. Ostrovok.ru. Ushbu maqolada men aniq rollarni sinab ko'rish tajribamiz haqida gapirmoqchiman.
Ostrovok.ru saytida biz konfiguratsiya menejeri sifatida ansible-dan foydalanamiz. Yaqinda biz rollarni sinab ko'rish zarurati tug'ildi, ammo ma'lum bo'lishicha, buning uchun juda ko'p vositalar mavjud emas - eng mashhuri, ehtimol, Molekulyar ramka, shuning uchun biz undan foydalanishga qaror qildik. Ammo ma'lum bo'lishicha, uning hujjatlari ko'plab tuzoqlar haqida sukut saqlamoqda. Biz rus tilida etarlicha batafsil qo'llanmani topa olmadik, shuning uchun biz ushbu maqolani yozishga qaror qildik.
Molekula
Molekula - aniq rollarni sinab ko'rishga yordam beradigan ramka.
Soddalashtirilgan tavsif: Molekula siz ko'rsatgan platformada namuna yaratadi (bulut, virtual mashina, konteyner; batafsil ma'lumot uchun bo'limga qarang. haydovchi), undagi rolingizni ishga tushiradi, so'ngra testlarni o'tkazadi va misolni o'chiradi. Bosqichlardan birida muvaffaqiyatsizlikka uchragan taqdirda, Molekula sizga bu haqda xabar beradi.
Endi ko'proq.
Bir oz nazariya
Molekulaning ikkita asosiy ob'ektini ko'rib chiqing: stsenariy va haydovchi.
Stsenariy
Skriptda nima, qaerda, qanday va qanday ketma-ketlikda bajarilishi tavsifi mavjud. Bitta rolda bir nechta skriptlar bo'lishi mumkin va ularning har biri yo'l bo'ylab katalogdir <role>/molecule/<scenario>, unda test uchun zarur bo'lgan harakatlarning tavsiflari mavjud. Skript kiritilishi kerak defaultRolni Molekula bilan ishga tushirsangiz, avtomatik ravishda yaratiladi. Quyidagi skriptlarning nomlari sizga bog'liq.
Skriptdagi sinov harakatlarining ketma-ketligi deyiladi Matritsa, va sukut bo'yicha u:
(Qadamlar belgilangan ?, agar foydalanuvchi tomonidan belgilanmagan bo'lsa, sukut bo'yicha o'tkazib yuborilgan)
lint - ishlaydigan linters. Odatiy bo'lib foydalaniladi yamllint и flake8,
destroy - Molekulaning so'nggi ishga tushirilishidan misollarni o'chirish (agar mavjud bo'lsa),
dependency? - sinovdan o'tgan rolning ishonchli bog'liqligini o'rnatish;
syntax - yordamida rol sintaksisini tekshirish ansible-playbook --syntax-check,
create - misol yaratish,
prepare? — namunani tayyorlash; masalan, python2 ni tekshiring/o'rnating
converge - sinovdan o'tkazilayotgan o'yin kitobini ishga tushirish;
idempotence - identifikatsiya testi uchun o'yin kitobini qayta ishga tushirish,
side_effect? - rolga bevosita bog'liq bo'lmagan, ammo testlar uchun zarur bo'lgan harakatlar;
verify - yordamida olingan konfiguratsiyani sinovdan o'tkazish testinfra(standart) /goss/inspec,
cleanup? - (yangi versiyalarda) - taxminan aytganda, Molekula ta'sir qiladigan tashqi infratuzilmani "tozalash",
destroy - Bir misolni o'chirish.
Ushbu ketma-ketlik ko'p holatlarni qamrab oladi, ammo kerak bo'lganda o'zgartirilishi mumkin.
Yuqoridagi qadamlarning har biri bilan alohida bajarilishi mumkin molecule <command>. Ammo shuni tushunish kerakki, har bir bunday cli-buyruq uchun o'ziga xos harakatlar ketma-ketligi bo'lishi mumkin, siz buni bajarish orqali bilib olishingiz mumkin. molecule matrix <command>. Masalan, buyruqni ishga tushirganda converge (test ostidagi o'yin kitobini ishga tushirish), quyidagi harakatlar amalga oshiriladi:
$ molecule matrix converge
...
└── default # название сценария
├── dependency # установка зависимостей
├── create # создание инстанса
├── prepare # преднастройка инстанса
└── converge # прогон плейбука
Ushbu harakatlar ketma-ketligini tahrirlash mumkin. Agar ro'yxatdagi biror narsa allaqachon bajarilgan bo'lsa, u o'tkazib yuboriladi. Joriy holat, shuningdek namunalar konfiguratsiyasi, Molekula katalogda saqlanadi $TMPDIR/molecule/<role>/<scenario>.
bilan qadamlar qo'shing ? siz kerakli harakatlarni ansible-playbook formatida tasvirlashingiz va fayl nomini bosqichga ko'ra qilishingiz mumkin: prepare.yml/side_effect.yml. Ushbu fayllarni kuting Molekula skript papkasida bo'ladi.
haydovchi
Haydovchi - bu sinov namunalari yaratiladigan ob'ekt.
Molecule shablonlari tayyor bo'lgan standart drayverlar ro'yxati quyidagicha: Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Delegated.
Aksariyat hollarda shablonlar fayllardir create.yml и destroy.yml mos ravishda namunani yaratish va o'chirishni tavsiflovchi skript papkasida.
Istisnolar Docker va Vagrant hisoblanadi, chunki ularning modullari bilan o'zaro aloqalar yuqorida aytib o'tilgan fayllarsiz sodir bo'lishi mumkin.
Delegatsiya qilingan drayverni ta'kidlash kerak, chunki agar u misol yaratish va o'chirish uchun fayllarda ishlatilsa, faqat misollar konfiguratsiyasi bilan ishlash tavsiflanadi, qolganini muhandis tasvirlab berishi kerak.
Standart drayver Docker hisoblanadi.
Keling, amaliyotga o'tamiz va u erda boshqa xususiyatlarni ko'rib chiqamiz.
Ishga kirishish
"Salom dunyo" sifatida oddiy nginx o'rnatish rolini sinab ko'raylik. Biz haydovchi sifatida dockerni tanlaymiz - menimcha, ko'pchiligingiz uni o'rnatgansiz (va docker standart drayver ekanligini unutmang).
Tayyor bo'ling virtualenv va unga o'rnating molecule:
Keyingi qadam yangi rolni ishga tushirishdir.
Yangi rolni, shuningdek, yangi skriptni ishga tushirish buyruq yordamida amalga oshiriladi molecule init <params>:
> molecule init role -r nginx
--> Initializing new role nginx...
Initialized role in <path>/nginx successfully.
> cd nginx
> tree -L 1
.
├── README.md
├── defaults
├── handlers
├── meta
├── molecule
├── tasks
└── vars
6 directories, 1 file
Bu odatiy rol bo'lib chiqdi. Bundan tashqari, CLI molekulalari bilan barcha o'zaro ta'sirlar rolning ildizidan amalga oshiriladi.
Keling, rollar katalogida nima borligini ko'rib chiqaylik:
> tree molecule/default/
molecule/default/
├── Dockerfile.j2 # Jinja-шаблон для Dockerfile
├── INSTALL.rst. # Немного информации об установке зависимостей сценария
├── molecule.yml # Файл конфигурации
├── playbook.yml # Плейбук запуска роли
└── tests # Директория с тестами стадии verify
└── test_default.py
1 directory, 6 files
Keling, konfiguratsiyani tahlil qilaylik molecule/default/molecule.yml (faqat docker tasvirini almashtiring):
Shell shunchaki buyruq qobig'i bo'lib, u galaxy va gilt sizning ehtiyojlaringizni qondira olmasa ishlatiladi.
Men bu erda uzoq vaqt turmayman, bu etarli darajada tasvirlangan hujjatlar.
haydovchi
Haydovchining ismi. Bizniki doker.
zig'ir
Linter - yallint.
Konfiguratsiyaning ushbu qismidagi foydali variantlar yamllint uchun konfiguratsiya faylini belgilash, atrof-muhit o'zgaruvchilarini yo'naltirish yoki linterni o'chirish qobiliyatidir:
Namunalarning konfiguratsiyasini tavsiflaydi.
Docker haydovchi sifatida bo'lsa, Molekula ushbu bo'limda takrorlanadi va ro'yxatning har bir elementi mavjud. Dockerfile.j2 o'zgaruvchi sifatida item.
Talab qiladigan haydovchi bo'lsa create.yml и destroy.yml, bo'lim ularda sifatida mavjud molecule_yml.platforms, va uning ustidagi takrorlashlar allaqachon ushbu fayllarda tasvirlangan.
Molekula mos modullarga misollarni boshqarishni ta'minlaganligi sababli, mumkin bo'lgan sozlamalar ro'yxatini ham u erda izlash kerak. Masalan, docker uchun modul ishlatiladi docker_container_module. Boshqa drayverlarda qaysi modullar qo'llanilishini topish mumkin hujjatlar.
Shuningdek, turli drayverlardan foydalanish misollarini topish mumkin Molekulaning o'zi sinovlarida.
Bu yerda almashtiring centos: 7 haqida Ubuntu.
provayder
"Yetkazib beruvchi" - misollarni boshqaradigan ob'ekt. Molekulaga kelsak, bu mumkin, boshqalarni qo'llab-quvvatlash rejalashtirilmagan, shuning uchun bu bo'limni ogohlantirish bilan kengaytirilgan konfiguratsiya deb atash mumkin.
Bu erda siz ko'p narsalarni belgilashingiz mumkin, men asosiy fikrlarni ta'kidlayman, menimcha:
o'yin kitoblari: muayyan bosqichlarda qaysi o'yin kitoblaridan foydalanish kerakligini belgilashingiz mumkin.
Skript ketma-ketliklarining nomi va tavsifi.
Kalitni qo'shish orqali har qanday buyruqning standart harakatlar matritsasini o'zgartirishingiz mumkin <command>_sequence va bizga kerak bo'lgan qadamlar ro'yxatini belgilash orqali uning qiymati sifatida.
Aytaylik, biz o'yin kitobini ishga tushirish buyrug'ini bajarayotganda harakatlar ketma-ketligini o'zgartirmoqchimiz: molecule converge
Bizning oddiy rolimiz muammosiz sinovdan o'tdi.
Shuni esda tutish kerakki, agar ish paytida muammolar mavjud bo'lsa molecule test, agar siz standart ketma-ketlikni o'zgartirmagan bo'lsangiz, Molekula misolni o'chirib tashlaydi.
Nosozliklarni tuzatish uchun quyidagi buyruqlar foydalidir:
> molecule --debug <command> # debug info. При обычном запуске Молекула скрывает логи.
> molecule converge # Оставляет инстанс после прогона тестируемой роли.
> molecule login # Зайти в созданный инстанс.
> molecule --help # Полный список команд.
Mavjud rol
Mavjud rolga yangi skript qo'shish rollar katalogidan quyidagi buyruqlar bilan:
# полный список доступных параметров
> molecule init scenarion --help
# создание нового сценария
> molecule init scenario -r <role_name> -s <scenario_name>
Agar bu roldagi birinchi stsenariy bo'lsa, keyin parametr -s o'tkazib yuborilishi mumkin, chunki u skript yaratadi default.
xulosa
Ko'rib turganingizdek, molekula unchalik murakkab emas va o'zingizning shablonlaringizdan foydalanib, yangi skriptni o'rnatish misol yaratish va o'chirish kitoblarida o'zgaruvchilarni tahrirlashga qisqartirilishi mumkin. Molekula CI tizimlari bilan muammosiz birlashadi, bu sizga o'yin kitoblarini qo'lda tekshirish vaqtini qisqartirish orqali rivojlanish tezligini oshirishga imkon beradi.
E'tiboringiz uchun rahmat. Agar sizda aniq rollarni sinab ko'rish bo'yicha tajribangiz bo'lsa va u Molekula bilan bog'liq bo'lmasa, bu haqda bizga izohlarda aytib bering!