ProHoster > Blog > İdarə > Təlimatlar: istehsaldan əvvəl mümkün rolları necə sınamaq və problemlər barədə məlumat əldə etmək
Təlimatlar: istehsaldan əvvəl mümkün rolları necə sınamaq və problemlər barədə məlumat əldə etmək
Hello!
Mən otel sifarişi xidmətində DevOps mühəndisi kimi işləyirəm. Ostrovok.ru. Bu yazıda mən ansible rolları sınamaq təcrübəmizdən danışmaq istəyirəm.
Ostrovok.ru saytında biz konfiqurasiya meneceri kimi ansible istifadə edirik. Bu yaxınlarda biz rolları sınamaq zərurətinə gəldik, lakin məlum oldu ki, bunun üçün o qədər də çox alət yoxdur - ən populyar, bəlkə də, Molekul çərçivəsidir, ona görə də ondan istifadə etmək qərarına gəldik. Ancaq məlum oldu ki, onun sənədləri bir çox tələlər haqqında susur. Rus dilində kifayət qədər ətraflı təlimat tapa bilmədik, ona görə də bu məqaləni yazmağa qərar verdik.
Molekulyar
Molekul - əsaslı rolları sınamağa kömək edən çərçivə.
Sadələşdirilmiş təsvir: Molekul göstərdiyiniz platformada nümunə yaradır (bulud, virtual maşın, konteyner; daha ətraflı məlumat üçün bölməyə baxın Sürücü), rolunuzu işə salır, sonra testləri həyata keçirir və nümunəni silir. Addımlardan birində uğursuzluq halında, Molekul bu barədə sizə məlumat verəcəkdir.
İndi daha çox.
Bir az nəzəriyyə
Molekulun iki əsas obyektini nəzərdən keçirin: Ssenari və Sürücü.
Ssenari
Ssenaridə nəyin, harada, necə və hansı ardıcıllıqla yerinə yetiriləcəyi təsviri var. Bir rolda bir neçə skript ola bilər və hər biri yol boyunca bir kataloqdur <role>/molecule/<scenario>, test üçün tələb olunan hərəkətlərin təsvirlərini ehtiva edir. Skript daxil edilməlidir default, rolu bir Molekulla başlatsanız, avtomatik olaraq yaradılacaq. Aşağıdakı skriptlərin adları sizə bağlıdır.
Skriptdə sınaq hərəkətlərinin ardıcıllığı deyilir matris, və standart olaraq belədir:
(Addımlar etiketlənir ?, istifadəçi tərəfindən göstərilmədiyi təqdirdə standart olaraq atlanır)
lint - işləyən linters. Varsayılan olaraq istifadə olunur yamllint и flake8,
destroy - Molekulun son buraxılışından nümunələrin silinməsi (əgər varsa),
dependency? - sınaqdan keçirilmiş rolun əsaslı asılılığının quraşdırılması;
syntax - istifadə edərək rolun sintaksisinin yoxlanılması ansible-playbook --syntax-check,
create - nümunə yaratmaq,
prepare? — nümunənin hazırlanması; məsələn, python2-ni yoxlayın/quraşdırın
converge — sınaqdan keçirilən oyun kitabının işə salınması,
idempotence - identifikasiya testi üçün oyun kitabını yenidən işə salmaq,
side_effect? - birbaşa rola aid olmayan, lakin testlər üçün zəruri olan hərəkətlər;
verify - istifadə edərək, nəticədə konfiqurasiyanın sınaqdan keçirilməsi testinfra(defolt) /goss/inspec,
cleanup? - (yeni versiyalarda) - kobud desək, Molekulun təsir etdiyi xarici infrastrukturun "təmizlənməsi",
destroy - Bir nümunənin silinməsi.
Bu ardıcıllıq əksər halları əhatə edir, lakin zəruri hallarda dəyişdirilə bilər.
Yuxarıdakı addımların hər biri ilə ayrıca icra edilə bilər molecule <command>. Ancaq başa düşmək lazımdır ki, hər bir belə cli-əmr üçün öz hərəkət ardıcıllığı ola bilər, onu yerinə yetirməklə öyrənə bilərsiniz. molecule matrix <command>. Məsələn, əmri yerinə yetirərkən converge (test altında olan oyun kitabını işə salmaqla) aşağıdakı hərəkətlər yerinə yetiriləcək:
$ molecule matrix converge
...
└── default # название сценария
├── dependency # установка зависимостей
├── create # создание инстанса
├── prepare # преднастройка инстанса
└── converge # прогон плейбука
Bu hərəkətlərin ardıcıllığı düzəldilə bilər. Siyahıdan bir şey artıq edilibsə, atılacaq. Cari vəziyyət, eləcə də nümunələrin konfiqurasiyası, Molekul kataloqda saxlayır $TMPDIR/molecule/<role>/<scenario>.
ilə addımlar əlavə edin ? istədiyiniz hərəkətləri ansible-playbook formatında təsvir edə və addıma uyğun olaraq fayl adını edə bilərsiniz: prepare.yml/side_effect.yml. Bu faylları gözləyin Molekul skript qovluğunda olacaq.
Sürücü
Sürücü sınaq nümunələrinin yaradıldığı bir qurumdur.
Molecule şablonlarının hazır olduğu standart sürücülərin siyahısı aşağıdakı kimidir: Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Delegated.
Əksər hallarda şablonlar fayllardır create.yml и destroy.yml müvafiq olaraq nümunənin yaradılması və silinməsini təsvir edən skript qovluğunda.
İstisnalar Docker və Vagrant-dır, çünki onların modulları ilə qarşılıqlı əlaqə yuxarıda qeyd olunan fayllar olmadan baş verə bilər.
Təqdim edilmiş sürücünü vurğulamağa dəyər, çünki o, bir nümunə yaratmaq və silmək üçün fayllarda istifadə olunursa, yalnız nümunələrin konfiqurasiyası ilə iş təsvir olunur, qalanları mühəndis tərəfindən təsvir edilməlidir.
Defolt sürücü Docker-dir.
İndi təcrübəyə keçək və oradakı digər xüsusiyyətləri nəzərdən keçirək.
Başlarken
"Salam dünya" olaraq sadə nginx quraşdırma rolunu sınaqdan keçirək. Biz docker-i sürücü kimi seçəcəyik - məncə, çoxunuz onu quraşdırmısınız (və unutmayın ki, docker standart sürücüdür).
Hazırlayın virtualenv və içərisinə quraşdırın molecule:
Növbəti addım yeni rolu işə salmaqdır.
Yeni rolun, eləcə də yeni skriptin işə salınması əmrdən istifadə etməklə həyata keçirilir 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
Tipik bir ansible rol çıxdı. Bundan əlavə, CLI Molekulları ilə bütün qarşılıqlı əlaqə rolun kökündən edilir.
Gəlin rol kataloqunda nə olduğuna baxaq:
> tree molecule/default/
molecule/default/
├── Dockerfile.j2 # Jinja-шаблон для Dockerfile
├── INSTALL.rst. # Немного информации об установке зависимостей сценария
├── molecule.yml # Файл конфигурации
├── playbook.yml # Плейбук запуска роли
└── tests # Директория с тестами стадии verify
└── test_default.py
1 directory, 6 files
Konfiqurasiyanı təhlil edək molecule/default/molecule.yml (yalnız docker şəklini dəyişdirin):
Shell sadəcə qalaktika və zər sizin ehtiyaclarınızı ödəmədiyi halda istifadə olunan əmr qabığıdır.
Burada uzun müddət qalmayacağam, kifayət qədər təsvir edilmişdir sənədləşdirmə.
sürücü
Sürücünün adı. Bizimki dokerdir.
tük
Linter yamllintdir.
Konfiqurasiyanın bu hissəsindəki faydalı seçimlər yamllint üçün konfiqurasiya faylını təyin etmək, ətraf mühit dəyişənlərini irəli çəkmək və ya linteri söndürmək imkanıdır:
Nümunələrin konfiqurasiyasını təsvir edir.
Sürücü kimi doker vəziyyətində, Molekul bu bölmə üzərində təkrarlanır və siyahının hər bir elementi burada mövcuddur. Dockerfile.j2 dəyişən kimi item.
Tələb edən bir sürücü vəziyyətində create.yml и destroy.yml, bölmə olaraq onlarda mövcuddur molecule_yml.platforms, və onun üzərində təkrarlamalar artıq bu fayllarda təsvir edilmişdir.
Molekul nüsxələrə nəzarəti təmin edən modullara uyğun olduğundan, mümkün parametrlərin siyahısı da orada axtarılmalıdır. Docker üçün, məsələn, modul istifadə olunur docker_container_modulu. Digər sürücülərdə hansı modulların istifadə edildiyini burada tapa bilərsiniz sənədləşdirmə.
Həm də müxtəlif sürücülərin istifadəsinə dair nümunələr tapıla bilər Molekulun özünün sınaqlarında.
Buranı dəyişdirin centos: 7 haqqında ubuntu.
təminatçı
"Təchizatçı" - nümunələri idarə edən qurum. Molekulun vəziyyətində bu, mümkündür, başqaları üçün dəstək planlaşdırılmır, buna görə də bu bölməni bir xəbərdarlıq ilə ansible genişləndirilmiş konfiqurasiya adlandırmaq olar.
Burada bir çox şeyi qeyd edə bilərsiniz, məncə, əsas məqamları vurğulayacağam:
oyun kitabları: müəyyən mərhələlərdə hansı oyun kitablarının istifadə olunacağını təyin edə bilərsiniz.
Skript ardıcıllığının adı və təsviri.
Açarı əlavə etməklə istənilən əmrin standart fəaliyyət matrisini dəyişə bilərsiniz <command>_sequence və ehtiyacımız olan addımların siyahısını müəyyən edərək bunun üçün bir dəyər olaraq.
Tutaq ki, biz playbook run əmrini yerinə yetirərkən hərəkətlərin ardıcıllığını dəyişmək istəyirik: molecule converge
Bizim sadə rolumuz problemsiz sınaqdan keçirildi.
İş zamanı problemlər yaranarsa, xatırlamağa dəyər molecule test, onda siz default ardıcıllığı dəyişməmisinizsə, Molekul nümunəni siləcək.
Aşağıdakı əmrlər sazlama üçün faydalıdır:
> molecule --debug <command> # debug info. При обычном запуске Молекула скрывает логи.
> molecule converge # Оставляет инстанс после прогона тестируемой роли.
> molecule login # Зайти в созданный инстанс.
> molecule --help # Полный список команд.
Mövcud rol
Mövcud rola yeni skript əlavə etməkdir rol kataloqundan aşağıdakı əmrlərlə:
# полный список доступных параметров
> molecule init scenarion --help
# создание нового сценария
> molecule init scenario -r <role_name> -s <scenario_name>
Bu rolda ilk ssenaridirsə, sonra parametr -s skript yaradacağı üçün buraxıla bilər default.
Nəticə
Gördüyünüz kimi, Molekul çox mürəkkəb deyil və öz şablonlarınızdan istifadə etməklə yeni skriptin yerləşdirilməsi nümunənin yaradılması və silinməsi kitablarında dəyişənlərin redaktə edilməsinə qədər azaldıla bilər. Molekul CI sistemləri ilə mükəmməl birləşir ki, bu da oyun kitablarının əllə sınaqdan keçirilməsi vaxtını azaltmaqla inkişaf sürətini artırmağa imkan verir.
Diqqətinizə görə təşəkkürlər. Anlamlı rolları sınamaq təcrübəniz varsa və bu Molekulla əlaqəli deyilsə, şərhlərdə bu barədə bizə məlumat verin!