ProHoster > Блог > Administracija > Upute: kako testirati ansible uloge i saznati o problemima prije produkcije
Upute: kako testirati ansible uloge i saznati o problemima prije produkcije
Pozdrav svima!
Radim kao DevOps inženjer u servisu za rezervacije hotela. Ostrovok.ru. U ovom članku želim govoriti o našem iskustvu u testiranju ansible uloga.
Na Ostrovok.ru koristimo ansible kao konfiguracijski menadžer. Nedavno smo došli do potrebe da testiramo uloge, ali kako se pokazalo, nema toliko alata za to - najpopularniji je, možda, okvir Molecule, pa smo ga odlučili koristiti. Ali pokazalo se da njegova dokumentacija šuti o mnogim zamkama. Nismo mogli pronaći dovoljno detaljan priručnik na ruskom, pa smo odlučili napisati ovaj članak.
Molecule
Molekula - okvir koji pomaže u testiranju ansible uloga.
Pojednostavljeni opis: Molekul kreira instancu na platformi koju navedete (oblak, virtuelna mašina, kontejner; za više detalja pogledajte odeljak vozač), pokreće vašu ulogu na njemu, zatim pokreće testove i briše instancu. U slučaju kvara na jednom od koraka, Molekul će vas obavijestiti o tome.
Sada više.
Malo teorije
Razmotrite dva ključna entiteta Molekula: scenario i pokretač.
scenario
Skripta sadrži opis šta, gdje, kako i kojim redoslijedom će se izvoditi. Jedna uloga može imati nekoliko skripti, a svaka je direktorij duž putanje <role>/molecule/<scenario>, koji sadrži opise radnji potrebnih za test. Skripta mora biti uključena default, koji će se automatski kreirati ako inicijalizirate ulogu molekulom. Nazivi sljedećih skripti su na vama.
Poziva se niz radnji testiranja u skripti matrica, a po defaultu je:
(Označeni koraci ?, preskočeno prema zadanim postavkama ako nije navedeno od strane korisnika)
lint - trčanje lintera. Standardno se koriste yamllint и flake8,
destroy - brisanje instanci iz posljednjeg lansiranja molekula (ako ih ima),
cleanup? - (u novim verzijama) - grubo rečeno, "čišćenje" vanjske infrastrukture na koju utiče Molekul,
destroy - Brisanje instance.
Ovaj redoslijed pokriva većinu slučajeva, ali se može promijeniti ako je potrebno.
Svaki od gore navedenih koraka može se pokrenuti zasebno sa molecule <command>. Ali treba shvatiti da za svaku takvu kli-naredbu može postojati vlastiti slijed radnji, što možete saznati izvršavanjem molecule matrix <command>. Na primjer, kada se izvodi naredba converge (pokretanje playbook-a koji se testira), izvršit će se sljedeće radnje:
$ molecule matrix converge
...
└── default # название сценария
├── dependency # установка зависимостей
├── create # создание инстанса
├── prepare # преднастройка инстанса
└── converge # прогон плейбука
Redoslijed ovih radnji se može uređivati. Ako je nešto sa liste već urađeno, biće preskočeno. Trenutno stanje, kao i konfiguraciju instanci, Molecule pohranjuje u direktorij $TMPDIR/molecule/<role>/<scenario>.
Dodajte korake sa ? možete opisati željene radnje u ansible-playbook formatu i napraviti naziv datoteke prema koraku: prepare.yml/side_effect.yml. Očekujte ove datoteke Molekul će biti u fascikli skripte.
vozač
Upravljački program je entitet u kojem se kreiraju testne instance.
Lista standardnih drajvera za koje Molecule ima spremne šablone je sljedeća: Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Delegated.
U većini slučajeva, predlošci su datoteke create.yml и destroy.yml u fascikli skripte koja opisuje kreiranje i brisanje instance, respektivno.
Izuzetak su Docker i Vagrant, jer se interakcije s njihovim modulima mogu dogoditi bez gore navedenih datoteka.
Vrijedno je istaknuti Delegirani drajver, jer ako se koristi u datotekama za kreiranje i brisanje instance, opisan je samo rad sa konfiguracijom instanci, ostalo bi trebao opisati inženjer.
Podrazumevani drajver je Docker.
Sada pređimo na praksu i razmotrimo dalje karakteristike.
Prvi koraci
Kao "zdravo svijete", hajde da testiramo jednostavnu nginx instalacijsku ulogu. Odabraćemo docker kao drajver - mislim da ga je većina vas instalirala (i zapamtite da je docker podrazumevani drajver).
Pripremite se virtualenv i instalirati u njega molecule:
Sljedeći korak je inicijalizacija nove uloge.
Inicijalizacija nove uloge, kao i nove skripte, vrši se pomoću naredbe 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
Ispalo je tipična ansible-uloga. Nadalje, sve interakcije s CLI Molecules su napravljene iz korijena uloge.
Hajde da vidimo šta se nalazi u direktorijumu uloga:
> tree molecule/default/
molecule/default/
├── Dockerfile.j2 # Jinja-шаблон для Dockerfile
├── INSTALL.rst. # Немного информации об установке зависимостей сценария
├── molecule.yml # Файл конфигурации
├── playbook.yml # Плейбук запуска роли
└── tests # Директория с тестами стадии verify
└── test_default.py
1 directory, 6 files
Hajde da analiziramo konfiguraciju molecule/default/molecule.yml (zamijenite samo docker sliku):
Shell je samo komandna ljuska koja se koristi u slučaju da galaksija i pozlata ne pokriju vaše potrebe.
Neću se dugo zadržavati ovdje, dovoljno je opisano u dokumentaciju.
Vozač
Ime vozača. Naš je docker.
obloga
Linter je yamllint.
Korisne opcije u ovom dijelu konfiguracije su mogućnost specificiranja konfiguracijske datoteke za yamllint, prosljeđivanje varijabli okruženja ili onemogućavanje lintera:
Opisuje konfiguraciju instanci.
U slučaju dokera kao drajvera, molekul se ponavlja u ovom odeljku, a svaki element liste je dostupan u Dockerfile.j2 kao varijabla item.
U slučaju vozača koji zahtijeva create.yml и destroy.yml, odjeljak je dostupan u njima kao molecule_yml.platforms, a iteracije preko njega su već opisane u ovim datotekama.
Pošto Molecule omogućava kontrolu instanci ansible modulima, listu mogućih podešavanja takođe treba potražiti tamo. Za docker, na primjer, koristi se modul docker_container_module. Koji se moduli koriste u drugim drajverima možete pronaći u dokumentaciju.
Kao i primjeri korištenja raznih drajvera se mogu naći u testovima samog Molekula.
Zamijenite ovdje centos:7 na ubuntu.
dobavljač
"Dobavljač" - entitet koji upravlja instancama. U slučaju Molecule-a, ovo je ansible, podrška za druge nije planirana, tako da se ovaj dio može nazvati ansible proširenom konfiguracijom uz upozorenje.
Ovdje možete navesti dosta stvari, ja ću istaknuti glavne tačke, po mom mišljenju:
playbooks: možete odrediti koji bi se priručniki trebali koristiti u određenim fazama.
Naziv i opis sekvenci skripta.
Možete promijeniti zadanu matricu akcija bilo koje komande dodavanjem ključa <command>_sequence i kao vrijednost za to definiranjem liste koraka koji su nam potrebni.
Recimo da želimo promijeniti redoslijed radnji prilikom pokretanja naredbe playbook run: molecule converge
Naša jednostavna uloga je testirana bez problema.
Vrijedi zapamtiti da ako dođe do problema tokom rada molecule test, onda ako niste promijenili zadanu sekvencu, Molekul će izbrisati instancu.
Sljedeće naredbe su korisne za otklanjanje grešaka:
> molecule --debug <command> # debug info. При обычном запуске Молекула скрывает логи.
> molecule converge # Оставляет инстанс после прогона тестируемой роли.
> molecule login # Зайти в созданный инстанс.
> molecule --help # Полный список команд.
Postojeća uloga
Dodavanje nove skripte postojećoj ulozi je iz direktorija uloga sa sljedećim naredbama:
# полный список доступных параметров
> molecule init scenarion --help
# создание нового сценария
> molecule init scenario -r <role_name> -s <scenario_name>
U slučaju da je ovo prvi scenario u ulozi, onda parametar -s može biti izostavljen jer će kreirati skriptu default.
zaključak
Kao što vidite, Molecule nije mnogo složen, a korištenjem vaših vlastitih predložaka, postavljanje nove skripte može se svesti na uređivanje varijabli u priručnicima za kreiranje i brisanje instance. Molekul se neprimetno integriše sa CI sistemima, što vam omogućava da povećate brzinu razvoja smanjenjem vremena za ručno testiranje knjiga.
Hvala vam na pažnji. Ako imate iskustva u testiranju ansible uloga, a nije vezano za Molecule, recite nam o tome u komentarima!