ProHoster > Blog > Administrazioa > Argibideak: nola probatu rol ansibleak eta nola aurkitu arazoei buruz produkzioa baino lehen
Argibideak: nola probatu rol ansibleak eta nola aurkitu arazoei buruz produkzioa baino lehen
Hola a todos!
DevOps ingeniari gisa lan egiten dut hotelen erreserba zerbitzu batean. Ostrovok.ru. Artikulu honetan, rol ansibleak probatzen dugun esperientziari buruz hitz egin nahi dut.
Ostrovok.ru-n, ansible erabiltzen dugu konfigurazio-kudeatzaile gisa. Duela gutxi, rolak probatzeko beharra ikusi genuen, baina ondorioztatu zenez, ez dago horrenbeste tresna horretarako - ezagunena, agian, Molecule esparrua da, beraz, erabiltzea erabaki genuen. Baina ondorioztatu zen bere dokumentazioa tranpa askori buruz isiltzen dela. Errusieraz ezin izan genuen eskuliburu behar bezain zehatzik aurkitu, beraz, artikulu hau idaztea erabaki genuen.
molekula
Molekula - rol ansibleak probatzen laguntzeko esparru bat.
Deskribapen sinplifikatua: molekulak instantzia bat sortzen du zuk zehazten duzun plataforman (hodeia, makina birtuala, edukiontzia; xehetasun gehiagorako, ikusi atala. Driver), zure rola exekutatzen du bertan, ondoren probak exekutatzen ditu eta instantzia ezabatzen du. Urratsetako batean huts egiten bada, Molekulak horren berri emango dizu.
Orain gehiago.
Teoria apur bat
Demagun Molekularen bi funtsezko entitate: Eszenarioa eta Gidaria.
eszenatokia
Gidoiak zer, non, nola eta zein sekuentziatan interpretatuko den deskribatzen du. Rol batek hainbat script izan ditzake, eta bakoitza bideko direktorio bat da <role>/molecule/<scenario>, probarako beharrezkoak diren ekintzen deskribapenak jasotzen dituena. Gidoia sartu behar da default, Molekula batekin rola hasieratzen baduzu automatikoki sortuko dena. Ondorengo gidoien izenak zure esku daude.
Script bateko proba-ekintzen sekuentziari deitzen zaio matrizea, eta berez hau da:
(Etiketatutako urratsak ?, lehenespenez saltatuta, erabiltzaileak zehaztu ez badu)
lint - linters martxan. Lehenespenez erabiltzen dira yamllint и flake8,
destroy - Molekularen azken abiarazteko instantziak ezabatzea (halakorik badago),
side_effect? - eginkizunarekin zerikusirik ez duten ekintzak, baina probetarako beharrezkoak,
verify - Sortutako konfigurazioaren probak egitea erabiliz testinfra(lehenetsia) /goss/inspec,
cleanup? - (bertsio berrietan) - gutxi gorabehera, Molekulak eragindako kanpoko azpiegitura "garbitzea",
destroy - Instantzia bat ezabatzea.
Sekuentzia honek kasu gehienak hartzen ditu, baina behar izanez gero alda daiteke.
Aurreko urratsetako bakoitza bereizita exekutatu daiteke molecule <command>. Baina ulertu behar da cli-komando bakoitzarentzat bere ekintza-sekuentzia propioa egon daitekeela, exekutatuta aurki dezakezuna. molecule matrix <command>. Adibidez, komandoa exekutatzean converge (proban dagoen jolas liburua exekutatzen), ekintza hauek egingo dira:
$ molecule matrix converge
...
└── default # название сценария
├── dependency # установка зависимостей
├── create # создание инстанса
├── prepare # преднастройка инстанса
└── converge # прогон плейбука
Ekintza hauen sekuentzia editatu daiteke. Zerrendako zerbait dagoeneko eginda badago, saltatu egingo da. Uneko egoera, baita instantzien konfigurazioa ere, Molekulak direktorioa gordetzen du $TMPDIR/molecule/<role>/<scenario>.
Gehitu urratsak honekin ? nahi dituzun ekintzak deskriba ditzakezu ansible-playbook formatuan eta egin fitxategiaren izena urratsaren arabera: prepare.yml/side_effect.yml. Espero fitxategi hauek Molekula script karpetan egongo da.
Driver
Gidari bat proba-instantziak sortzen diren entitate bat da.
Molecule-k txantiloiak prest dituen kontrolatzaile estandarren zerrenda hau da: Azure, Docker, EC2, GCE, LXC, LXD, OpenStack, Vagrant, Delegated.
Kasu gehienetan, txantiloiak fitxategiak dira create.yml и destroy.yml instantzia bat sortzea eta ezabatzea deskribatzen duen script karpetan, hurrenez hurren.
Salbuespenak Docker eta Vagrant dira, haien moduluekin elkarrekintzak aipatutako fitxategirik gabe gerta daitezkeelako.
Azpimarratzekoa da Delegated kontrolatzailea, izan ere, instantzia bat sortzeko eta ezabatzeko fitxategietan erabiltzen bada, instantzien konfigurazioarekin bakarrik funtzionatzea deskribatzen da, gainerakoak ingeniariak deskribatu beharko lituzke.
Gidari lehenetsia Docker da.
Orain, praktikara pasa gaitezen eta bertan ezaugarri gehiago aztertu.
Pizten
"Kaixo mundua" gisa, proba dezagun nginx instalazio-funtzio sinple bat. Aukera dezagun docker kontrolatzaile gisa - uste dut gehienek instalatuta daukazutela (eta gogoratu docker kontrolatzaile lehenetsia dela).
prestatu virtualenv eta bertan instalatu molecule:
Hurrengo urratsa rol berria hasieratzea da.
Rol berri baten hasieratzea, baita script berri bat ere, komandoa erabiliz egiten da 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
Ansible-rol tipikoa izan zen. Gainera, CLI Molekulen interakzio guztiak rolaren errotik egiten dira.
Ikus dezagun zer dagoen rol-direktorioan:
> tree molecule/default/
molecule/default/
├── Dockerfile.j2 # Jinja-шаблон для Dockerfile
├── INSTALL.rst. # Немного информации об установке зависимостей сценария
├── molecule.yml # Файл конфигурации
├── playbook.yml # Плейбук запуска роли
└── tests # Директория с тестами стадии verify
└── test_default.py
1 directory, 6 files
Azter dezagun konfigurazioa molecule/default/molecule.yml (ordeztu docker irudia soilik):
Shell komando-shell bat besterik ez da, galaxiak eta urrezkoak zure beharrak estaltzen ez badira.
Hemen ez naiz denbora luzez biziko, nahikoa da deskribatua dokumentazioa.
kontrolatzailea
Gidariaren izena. Gurea docker da.
Lint
Lintera yamllint da.
Konfigurazioaren zati honetako aukera erabilgarriak yamllint-erako konfigurazio-fitxategi bat zehazteko, ingurune-aldagaiak birbidaltzeko edo linter-a desgaitzeko aukera dira:
Instantziaren konfigurazioa deskribatzen du.
Docker gidari gisa, Molekula errepikatzen da atal honetan, eta zerrendako elementu bakoitza eskuragarri dago. Dockerfile.j2 aldagai gisa item.
eskatzen duen gidari baten kasuan create.yml и destroy.yml, atala eskuragarri dago horietan bezala molecule_yml.platforms, eta haren gaineko errepikapenak dagoeneko deskribatzen dira fitxategi hauetan.
Molekulak modulu ansibleen instantzien kontrola eskaintzen duenez, ezarpen posibleen zerrenda ere bertan bilatu behar da. Docker-erako, adibidez, modulua erabiltzen da docker_container_module. Beste kontrolatzaile batzuetan zein modulu erabiltzen diren aurki daiteke dokumentazioa.
Baita hainbat gidariren erabileraren adibideak ere aurki daitezke Molekularen beraren probetan.
Ordezkatu hemen zentimoak:7 on ubuntu.
hornitzaile
"Hornitzailea" - instantziak kudeatzen dituen entitate bat. Molekularen kasuan, hau ansible da, besteentzako laguntza ez dago aurreikusita, beraz, atal honi konfigurazio hedatu ansible dei daiteke ohar batekin.
Hemen gauza asko zehaztu ditzakezu, puntu nagusiak nabarmenduko ditut, nire ustez:
playbooks: fase jakin batzuetan zein jolas-liburu erabili behar diren zehaztu dezakezu.
Gidoi-sekuentzien izena eta deskribapena.
Edozein komandoren ekintza-matrize lehenetsia alda dezakezu tekla gehituta <command>_sequence eta horretarako balio gisa behar ditugun urratsen zerrenda zehaztuz.
Demagun playbook run komandoa exekutatzean ekintzen sekuentzia aldatu nahi dugula: molecule converge
Gure rol sinplea arazorik gabe probatu zen.
Lanean zehar arazoak egonez gero gogoratzea komeni da molecule test, orduan sekuentzia lehenetsia aldatu ez baduzu, Molekulak instantzia ezabatuko du.
Komando hauek erabilgarriak dira arazketarako:
> molecule --debug <command> # debug info. При обычном запуске Молекула скрывает логи.
> molecule converge # Оставляет инстанс после прогона тестируемой роли.
> molecule login # Зайти в созданный инстанс.
> molecule --help # Полный список команд.
Dauden Rola
Lehendik dagoen rol bati script berri bat gehitzea da Rolen direktoriotik komando hauekin:
# полный список доступных параметров
> molecule init scenarion --help
# создание нового сценария
> molecule init scenario -r <role_name> -s <scenario_name>
Rolaren lehenengo eszenatokia bada, gero parametroa -s ezabatu egin daiteke script bat sortuko baitu default.
Ondorioa
Ikus dezakezunez, Molekula ez da oso konplexua, eta zure txantiloiak erabiliz, script berri bat zabaltzea instantzia sortzeko eta ezabatzeko liburuxketan aldagaiak editatzera murriztu daiteke. Molekula ezin hobeto integratzen da CI sistemekin, eta horrek garapen-abiadura handitzeko aukera ematen du, jolas-liburuen eskuzko probak egiteko denbora murriztuz.
Eskerrik asko zure arretagatik. Rol ansibleak probatzen esperientzia baduzu eta Molekularekin erlazionatuta ez badago, konta iezaguzu iruzkinetan!