ProHoster > Blogs > Administrācija > Norādījumi: kā pārbaudīt iespējamās lomas un uzzināt par problēmām pirms ražošanas
Norādījumi: kā pārbaudīt iespējamās lomas un uzzināt par problēmām pirms ražošanas
Sveiki visiem!
Es strādāju par DevOps inženieri viesnīcu rezervēšanas pakalpojumā. Ostrovok.ru. Šajā rakstā es vēlos runāt par mūsu pieredzi iespējamo lomu pārbaudē.
Vietnē Ostrovok.ru mēs izmantojam ansible kā konfigurācijas pārvaldnieku. Nesen mēs nonācām pie nepieciešamības pārbaudīt lomas, taču, kā izrādījās, tam nav tik daudz rīku - vispopulārākais, iespējams, ir Molecule ietvars, tāpēc nolēmām to izmantot. Bet izrādījās, ka viņa dokumentācija klusē par daudzām kļūmēm. Mēs nevarējām atrast pietiekami detalizētu rokasgrāmatu krievu valodā, tāpēc nolēmām uzrakstīt šo rakstu.
molekula
Molekula - sistēma, kas palīdz pārbaudīt iespējamās lomas.
Vienkāršots apraksts: molekula izveido instanci jūsu norādītajā platformā (mākonis, virtuālā mašīna, konteiners; sīkāku informāciju skatiet sadaļā Vadītājs), izpilda tajā jūsu lomu, pēc tam veic testus un izdzēš gadījumu. Neveiksmes gadījumā kādā no soļiem Molekula jūs par to informēs.
Tagad vairāk
Mazliet teorija
Apsveriet divas galvenās molekulas vienības: scenārijs un draiveris.
Scenārijs
Skripts satur aprakstu, kas, kur, kā un kādā secībā tiks izpildīts. Vienai lomai var būt vairāki skripti, un katrs no tiem ir direktorijs ceļā <role>/molecule/<scenario>, kas satur testam nepieciešamo darbību aprakstus. Jāiekļauj skripts default, kas tiks automātiski izveidota, ja inicializēsit lomu ar molekulu. Tālāk norādīto skriptu nosaukumi ir jūsu ziņā.
Tiek izsaukta skripta testēšanas darbību secība matrica, un pēc noklusējuma tas ir:
(Soļi ir marķēti ?, pēc noklusējuma tiek izlaists, ja lietotājs to nav norādījis)
lint - skriešanas līkumi. Pēc noklusējuma tiek izmantoti yamllint и flake8,
destroy - gadījumu dzēšana no pēdējās molekulas palaišanas (ja tāda ir),
side_effect? - darbības, kas nav tieši saistītas ar lomu, bet nepieciešamas testiem,
verify - iegūtās konfigurācijas testu veikšana, izmantojot testinfra(noklusējums) /goss/inspec,
cleanup? - (jaunās versijās) - rupji sakot, Molekulas ietekmētās ārējās infrastruktūras "tīrīšana",
destroy - instances dzēšana.
Šī secība aptver lielāko daļu gadījumu, taču vajadzības gadījumā to var mainīt.
Katru no iepriekšminētajām darbībām var veikt atsevišķi ar molecule <command>. Bet jāsaprot, ka katrai šādai klimandam var būt sava darbību secība, kuru varat uzzināt, izpildot molecule matrix <command>. Piemēram, palaižot komandu converge (palaižot pārbaudāmo rokasgrāmatu), tiks veiktas šādas darbības:
$ molecule matrix converge
...
└── default # название сценария
├── dependency # установка зависимостей
├── create # создание инстанса
├── prepare # преднастройка инстанса
└── converge # прогон плейбука
Šo darbību secību var rediģēt. Ja kaut kas no saraksta jau ir izdarīts, tas tiks izlaists. Pašreizējo stāvokli, kā arī gadījumu konfigurāciju Molecule saglabā direktorijā $TMPDIR/molecule/<role>/<scenario>.
Pievienojiet soļus ar ? jūs varat aprakstīt vēlamās darbības ansible-playbook formātā un izveidot faila nosaukumu atbilstoši darbībai: prepare.yml/side_effect.yml. Gaidiet šos failus Molekula atradīsies skripta mapē.
Vadītājs
Draiveris ir entītija, kurā tiek izveidoti testa gadījumi.
Standarta draiveru saraksts, kuriem Molecule ir gatavas veidnes, ir šāds: Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Delegated.
Vairumā gadījumu veidnes ir faili create.yml и destroy.yml skripta mapē, kas attiecīgi apraksta instances izveidi un dzēšanu.
Izņēmumi ir Docker un Vagrant, jo mijiedarbība ar to moduļiem var notikt bez iepriekšminētajiem failiem.
Ir vērts izcelt deleģēto draiveri, jo, ja tas tiek izmantots failos instances izveidei un dzēšanai, ir aprakstīts tikai darbs ar gadījumu konfigurāciju, pārējais jāapraksta inženierim.
Noklusējuma draiveris ir Docker.
Tagad pāriesim pie prakses un apsvērsim turpmākās funkcijas.
Darba sākšana
Kā "sveika pasaule", pārbaudīsim vienkāršu nginx instalēšanas lomu. Mēs izvēlēsimies docker kā draiveri — es domāju, ka lielākajai daļai no jums tas ir instalēts (un atcerieties, ka docker ir noklusējuma draiveris).
Sagatavot virtualenv un instalējiet tajā molecule:
Nākamais solis ir inicializēt jauno lomu.
Jaunas lomas, kā arī jauna skripta inicializācija tiek veikta, izmantojot komandu 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
Izrādījās tipiska iespējamā loma. Turklāt visas mijiedarbības ar CLI molekulām tiek veidotas no lomas saknes.
Apskatīsim, kas atrodas lomu direktorijā:
> tree molecule/default/
molecule/default/
├── Dockerfile.j2 # Jinja-шаблон для Dockerfile
├── INSTALL.rst. # Немного информации об установке зависимостей сценария
├── molecule.yml # Файл конфигурации
├── playbook.yml # Плейбук запуска роли
└── tests # Директория с тестами стадии verify
└── test_default.py
1 directory, 6 files
Analizēsim konfigurāciju molecule/default/molecule.yml (aizstāt tikai docker attēlu):
Apraksta gadījumu konfigurāciju.
Docker kā draivera gadījumā molekula tiek atkārtota šajā sadaļā, un katrs saraksta elements ir pieejams Dockerfile.j2 kā mainīgo item.
Gadījumā, ja vadītājs, kas prasa create.yml и destroy.yml, sadaļa tajos ir pieejama kā molecule_yml.platforms, un iterācijas pār to jau ir aprakstītas šajos failos.
Tā kā Molecule nodrošina iespējamo moduļu gadījumu kontroli, tur ir jāmeklē arī iespējamo iestatījumu saraksts. Piemēram, dokerim tiek izmantots modulis docker_container_module. Kuri moduļi tiek izmantoti citos draiveros, varat uzzināt dokumentācija.
Kā arī var atrast dažādu draiveru izmantošanas piemērus pašas molekulas testos.
Nomainiet šeit centos:7 par Ubuntu.
nodrošinātājs
"Piegādātājs" - entītija, kas pārvalda gadījumus. Molecule gadījumā tas ir iespējams, atbalsts citiem nav plānots, tāpēc šo sadaļu ar piebildi var saukt par ansible paplašināto konfigurāciju.
Šeit jūs varat norādīt daudzas lietas, es izcelšu galvenos punktus, manuprāt:
rotaļu grāmatas: varat norādīt, kuras rokasgrāmatas ir jāizmanto noteiktos posmos.
Skriptu secību nosaukums un apraksts.
Varat mainīt jebkuras komandas noklusējuma darbību matricu, pievienojot atslēgu <command>_sequence un kā vērtību, definējot nepieciešamo darbību sarakstu.
Pieņemsim, ka, palaižot rokasgrāmatas palaišanas komandu, vēlamies mainīt darbību secību: molecule converge
Mūsu vienkāršā loma tika pārbaudīta bez problēmām.
Ir vērts atcerēties, ka, ja darba laikā rodas problēmas molecule test, tad, ja nemainījāt noklusējuma secību, molekula izdzēsīs gadījumu.
Šādas komandas ir noderīgas atkļūdošanai:
> molecule --debug <command> # debug info. При обычном запуске Молекула скрывает логи.
> molecule converge # Оставляет инстанс после прогона тестируемой роли.
> molecule login # Зайти в созданный инстанс.
> molecule --help # Полный список команд.
Esošā loma
Jauna skripta pievienošana esošai lomai ir no lomu direktorijas ar šādām komandām:
# полный список доступных параметров
> molecule init scenarion --help
# создание нового сценария
> molecule init scenario -r <role_name> -s <scenario_name>
Ja šis ir pirmais scenārijs lomai, tad parametrs -s var izlaist, jo tiks izveidots skripts default.
Secinājums
Kā redzat, molekula nav īpaši sarežģīta, un, izmantojot savas veidnes, jauna skripta izvietošanu var samazināt līdz mainīgo rediģēšanai gadījumu izveides un dzēšanas rokasgrāmatās. Molekula nemanāmi integrējas ar CI sistēmām, kas ļauj palielināt izstrādes ātrumu, samazinot laiku rokasgrāmatu testēšanai.
Paldies par jūsu uzmanību. Ja tev ir pieredze spējīgu lomu testēšanā, un tas nav saistīts ar Molekulu, pastāsti par to komentāros!