SÄkot ar otro apÅemÅ”anos, jebkurÅ” kods kļūst mantots, jo sÄkotnÄjÄs idejas sÄk atŔķirties no skarbÄs realitÄtes. Tas nav ne labi, ne slikti, tas ir dots, ar kuru grÅ«ti strÄ«dÄties un ar ko ir jÄsadzÄ«vo. Daļa no Ŕī procesa ir pÄrstrukturÄÅ”ana. InfrastruktÅ«ras pÄrstrukturÄÅ”ana kÄ kods. SÄksim stÄstu par to, kÄ gada laikÄ pÄrveidot Ansible un nekļūt traks.
Mantojuma dzimŔana
1. diena: paciente nulle
Reiz bija nosacÄ«ts projekts. TajÄ bija Dev izstrÄdes komanda un Ops inženieri. ViÅi atrisinÄja to paÅ”u problÄmu: kÄ izvietot serverus un palaist lietojumprogrammu. ProblÄma bija tÄ, ka katra komanda Å”o problÄmu atrisinÄja savÄ veidÄ. ProjektÄ tika nolemts izmantot Ansible, lai sinhronizÄtu zinÄÅ”anas starp Dev un Ops komandÄm.
89. diena: mantojuma dzimŔana
PaÅ”iem to nemanot, gribÄjÄs to izdarÄ«t pÄc iespÄjas labÄk, taÄu tas izrÄdÄ«jÄs mantojums. KÄ tas notiek?
Mums Å”eit ir steidzams uzdevums, veiksim netÄ«ro uzlauÅ”anu un pÄc tam to izlabosim.
Jums nav jÄraksta dokumentÄcija, un viss ir skaidrs, kas Å”eit notiek.
Es zinu Ansible/Python/Bash/Terraform! Paskaties, kÄ es varu izvairÄ«ties!
Es esmu Full Stack Overflow Developer un nokopÄju Å”o no stackoverflow. Es nezinu, kÄ tas darbojas, bet tas izskatÄs lieliski un atrisina problÄmu.
RezultÄtÄ var iegÅ«t nesaprotamu koda veidu, kuram nav dokumentÄcijas, nav skaidrs, ko tas dara, vai tas ir vajadzÄ«gs, bet problÄma ir tÄ, ka jums tas ir jÄizstrÄdÄ, jÄpÄrveido, jÄpievieno kruÄ·i un balsti , padarot situÄciju vÄl sliktÄku.
SÄkotnÄji iecerÄtais un ieviestais IaC modelis vairs neatbilst lietotÄju/biznesa/citu komandu prasÄ«bÄm, un laiks izmaiÅu veikÅ”anai infrastruktÅ«rÄ vairs nav pieÅemams. Å ajÄ brÄ«dÄ« rodas izpratne, ka ir pienÄcis laiks rÄ«koties.
IaC pÄrstrukturÄÅ”ana
139. diena: vai jums tieÅ”Äm ir nepiecieÅ”ama pÄrstrukturÄÅ”ana?
Pirms steidzaties uz refraktoru, jums ir jÄatbild uz vairÄkiem svarÄ«giem jautÄjumiem:
KÄpÄc jums tas viss ir vajadzÄ«gs?
Vai tev ir laiks?
Vai pietiek ar zinÄÅ”anÄm?
Ja jÅ«s nezinÄt, kÄ atbildÄt uz jautÄjumiem, tad pÄrstrukturÄÅ”ana beigsies, pirms tÄ pat sÄksies, vai arÄ« tÄ var tikai pasliktinÄties. Jo bija pieredze ( Ko es uzzinÄju, pÄrbaudot 200 000 infrastruktÅ«ras koda lÄ«niju), tad projektÄ tika saÅemts lÅ«gums pÄc palÄ«dzÄ«bas, lai salabotu lomas un pÄrklÄtu tÄs ar testiem.
149. diena: Refaktoringa sagatavoŔana
PirmÄ lieta ir sagatavoties. Izlemiet, ko mÄs darÄ«sim. Lai to izdarÄ«tu, mÄs sazinÄmies, atrodam problÄmzonas un izdomÄjam veidus, kÄ tÄs atrisinÄt. MÄs kaut kÄ ierakstÄm iegÅ«tos jÄdzienus, piemÄram, rakstu saplÅ«stot, lai tad, kad rodas jautÄjums "kas ir labÄkais?" vai "kas ir pareizi?" MÄs neesam apmaldÄ«juÅ”ies. MÅ«su gadÄ«jumÄ mÄs palikÄm pie idejas sadali un valdi: mÄs sadalÄm infrastruktÅ«ru mazos gabaliÅos/Ä·ieÄ£eļos. Å Ä« pieeja ļauj paÅemt izolÄtu infrastruktÅ«ras gabalu, saprast, ko tÄ dara, pÄrklÄt to ar testiem un mainÄ«t to, nebaidoties kaut ko salauzt.
IzrÄdÄs, infrastruktÅ«ras testÄÅ”ana kļūst par stÅ«rakmeni un Å”eit ir vÄrts pieminÄt infrastruktÅ«ras testÄÅ”anas piramÄ«du. TieÅ”i tÄda pati ideja, kas ir izstrÄdes stadijÄ, bet infrastruktÅ«rai: mÄs pÄrejam no lÄtiem Ätrajiem testiem, kas pÄrbauda vienkÄrÅ”as lietas, piemÄram, ievilkumus, uz dÄrgiem pilnvÄrtÄ«giem testiem, kas izvieto visu infrastruktÅ«ru.
IespÄjamie testÄÅ”anas mÄÄ£inÄjumi
Pirms mÄs turpinÄm aprakstÄ«t, kÄ mÄs aptvÄrÄm Ansible testus projektÄ, es aprakstÄ«Å”u mÄÄ£inÄjumus un pieejas, kuras man bija iespÄja izmantot agrÄk, lai izprastu pieÅemto lÄmumu kontekstu.
Diena Nr.-997: SDS nodroÅ”inÄÅ”ana
Pirmo reizi es testÄju Ansible saistÄ«bÄ ar SDS (Software Defined Storage) izstrÄdes projektu. Par Å”o tÄmu ir atseviŔķs raksts KÄ salauzt velosipÄdus ar kruÄ·iem, pÄrbaudot savu sadalÄ«jumu, bet Ä«si sakot, mÄs nonÄcÄm pie apgrieztas testÄÅ”anas piramÄ«das un testÄÅ”anÄ vienai lomai pavadÄ«jÄm 60-90 minÅ«tes, kas ir ilgs laiks. PamatÄ bija e2e testi, t.i. mÄs izvietojÄm pilnvÄrtÄ«gu instalÄciju un pÄc tam to pÄrbaudÄ«jÄm. VÄl sarežģītÄk bija viÅa paÅ”a velosipÄda izgudrojums. Bet jÄatzÄ«st, ka Å”is risinÄjums darbojÄs un ļÄva nodroÅ”inÄt stabilu izlaiÅ”anu.
KopumÄ risinÄjums darbojÄs, taÄu neviendabÄ«guma dÄļ bija daži nosÄdumi. Kad pÄrbaudÄmo cilvÄku skaits tika palielinÄts lÄ«dz 13 pamata lomÄm un 2 meta lomÄm, apvienojot mazÄkas lomas, tad pÄkÅ”Åi testi sÄka darboties 70 minÅ«tes, kas ir gandrÄ«z 2 reizes ilgÄk. Bija grÅ«ti runÄt par XP (extreme programming) praksi, jo... neviens nevÄlas gaidÄ«t 70 minÅ«tes. Tas bija iemesls pieejas maiÅai
Diena # -601: Ansible un molekula
KonceptuÄli tas ir lÄ«dzÄ«gs testkitchen, tikai mÄs pÄrcÄlÄm lomu testÄÅ”anu uz docker un mainÄ«jÄm steku. RezultÄtÄ laiks tika samazinÄts lÄ«dz stabilÄm 20-25 minÅ«tÄm 7 lomÄm.
Palielinot pÄrbaudÄ«to lomu skaitu lÄ«dz 17 un izveidojot 45 lomas, mÄs to paveicÄm 28 minÅ«tÄs 2 Dženkinsa vergiem.
167. diena: Ansible testu pievienoŔana projektam
VisticamÄk, pÄrstrukturÄÅ”anas uzdevumu nebÅ«s iespÄjams veikt steigÄ. Uzdevumam jÄbÅ«t izmÄrÄmam, lai to varÄtu sadalÄ«t mazos gabaliÅos un ar tÄjkaroti pa gabalu apÄst ziloni. Ir jÄbÅ«t izpratnei par to, vai tu virzies pareizajÄ virzienÄ, cik ilgi iet.
VispÄr ir vienalga, kÄ tas tiks darÄ«ts, var rakstÄ«t uz lapiÅas, uz skapja var uzlÄ«mÄt uzlÄ«mes, JirÄ var izveidot uzdevumus vai arÄ« atvÄrt Google dokumentus un pierakstÄ«t paÅ”reizÄjo statusu tur. KÄjas aug no tÄ, ka process nav tÅ«lÄ«tÄjs, tas bÅ«s garÅ” un nogurdinoÅ”s. Maz ticams, ka kÄds vÄlas, lai jÅ«s pÄrÅemtu idejas, nogurtu un kļūtu pÄrÅemts pÄrstrukturÄÅ”anas laikÄ.
RefaktorÄÅ”ana ir vienkÄrÅ”a:
Äd.
GulÄt.
Kods.
IaC tests.
AtkÄrtot
un mÄs to atkÄrtojam, lÄ«dz sasniedzam paredzÄto mÄrÄ·i.
IespÄjams, ka nevar uzreiz sÄkt visu testÄt, tÄpÄc mÅ«su pirmais uzdevums bija sÄkt ar ŔķielÄÅ”anu un sintakses pÄrbaudi.
181. diena: Green Build Master
Linting ir neliels pirmais solis ceÄ¼Ä uz Green Build Master. Tas gandrÄ«z neko neizjauks, taÄu ļaus jums atkļūdot procesus un izveidot zaļÄs versijas pakalpojumÄ Jenkins. Ideja ir komandÄ attÄ«stÄ«t ieradumus:
Sarkanie testi ir slikti.
Es atnÄcu kaut ko salabot un tajÄ paÅ”Ä laikÄ padarÄ«t kodu mazliet labÄku nekÄ tas bija pirms jums.
193. diena: no plūkŔanas līdz vienību testiem
Kad esat izveidojis koda ievadÄ«Å”anas procesu galvenajÄ versijÄ, varat sÄkt pakÄpeniskas uzlaboÅ”anas procesu - aizstÄjot Ŕķiedru ar palaiÅ”anas lomÄm, jÅ«s pat varat to izdarÄ«t bez idempotences. Jums ir jÄsaprot, kÄ piemÄrot lomas un kÄ tÄs darbojas.
211. diena: no vienÄ«bas lÄ«dz integrÄcijas testiem
Kad lielÄkÄ daļa lomu ir pÄrklÄtas ar vienÄ«bu pÄrbaudÄm un viss ir izkliedÄts, varat pÄriet uz integrÄcijas testu pievienoÅ”anu. Tie. pÄrbaudot nevis vienu Ä·ieÄ£eli infrastruktÅ«rÄ, bet gan to kombinÄciju, piemÄram, pilnas instances konfigurÄciju.
Izmantojot jenkins, mÄs Ä£enerÄjÄm daudzus posmus, kuros paralÄli tika sadalÄ«tas lomas/spÄļu grÄmatas, tad vienÄ«bu testi konteineros un visbeidzot integrÄcijas testi.
Jenkins + Docker + Ansible = testi
PÄrbaudiet repo un Ä£enerÄjiet veidoÅ”anas posmus.
ParalÄli palaist sintakses pÄrbaudes lomu posmus.
ParalÄli palaist pÄrbaudes lomu posmus.
Lint loma.
PÄrbaudiet atkarÄ«bu no citÄm lomÄm.
PÄrbaudiet sintaksi.
Izveidojiet docker instanci
Palaidiet molecule/default/playbook.yml.
PÄrbaudiet idempotenci.
Palaidiet integrÄcijas testus
apdare
271. diena: Autobusu faktors
SÄkumÄ pÄrstrukturÄÅ”anu veica neliela divu vai trÄ«s cilvÄku grupa. ViÅi pÄrskatÄ«ja kodu galvenajÄ versijÄ. Laika gaitÄ komanda attÄ«stÄ«ja zinÄÅ”anas par to, kÄ rakstÄ«t kodu, un koda pÄrskatÄ«Å”ana veicinÄja zinÄÅ”anu izplatÄ«Å”anu par infrastruktÅ«ru un tÄs darbÄ«bu. Å eit galvenais bija tas, ka recenzentus atlasÄ«ja pa vienam, pÄc grafika, t.i. ar zinÄmu varbÅ«tÄ«bas pakÄpi jÅ«s iekÄpsiet jaunÄ infrastruktÅ«ras daļÄ.
Un Å”eit vajadzÄtu bÅ«t Ärti. Ir Ärti veikt apskatu, redzÄt, kÄda uzdevuma ietvaros tas tika veikts, un diskusiju vÄsturi. Mums ir integrÄti jenkins + bitbucket + jira.
Bet kÄ tÄds apskats nav brÄ«numlÄ«dzeklis; kaut kÄ mÄs nokļuvÄm galvenajÄ kodÄ, kas lika mums veikt flopa testus:
Laika gaitÄ testu bija vairÄk, bÅ«ves darbojÄs lÄnÄk, sliktÄkajÄ gadÄ«jumÄ lÄ«dz pat stundai. Uz viena no retro bija tÄda frÄze kÄ "labi, ka ir testi, bet tie ir lÄni." TÄ rezultÄtÄ mÄs atteicÄmies no integrÄcijas testiem virtuÄlajÄs maŔīnÄs un pielÄgojÄm tos Docker, lai padarÄ«tu to ÄtrÄku. MÄs arÄ« aizstÄjÄm testinfra ar piemÄrotu verificÄtÄju, lai samazinÄtu izmantoto rÄ«ku skaitu.
Stingri sakot, bija pasÄkumu kopums:
PÄrslÄdzieties uz doku.
NoÅemiet lomu testÄÅ”anu, kas tiek dublÄta atkarÄ«bu dÄļ.
Palieliniet vergu skaitu.
Testa darbības secība.
SpÄja plÅ«kt ALL lokÄli ar vienu komandu.
RezultÄtÄ tika apvienots arÄ« jenkins Pipeline
Ä¢enerÄjiet veidoÅ”anas posmus.
Lint visu paralÄli.
ParalÄli palaist pÄrbaudes lomu posmus.
Pabeigt.
GÅ«tÄs atziÅas
Izvairieties no globÄlajiem mainÄ«gajiem
Ansible izmanto globÄlos mainÄ«gos, veidlapÄ ir daļÄjs risinÄjums private_role_vars, bet tÄ nav panaceja.
Ä»aujiet man sniegt jums piemÄru. Ä»aujiet mums role_a Šø role_b
SmieklÄ«gi ir tas, ka rotaļu grÄmatu rezultÄts bÅ«s atkarÄ«gs no lietÄm, kas ne vienmÄr ir acÄ«mredzamas, piemÄram, lomu saraksta secÄ«ba. DiemžÄl tÄda ir Ansible bÅ«tÄ«ba, un labÄkais, ko var darÄ«t, ir izmantot kaut kÄdu vienoÅ”anos, piemÄram, lomas ietvaros izmantot tikai Å”ajÄ lomÄ aprakstÄ«to mainÄ«go.
MÄs vienojÄmies izmantot mainÄ«gos prefiksus; nebÅ«tu lieki pÄrbaudÄ«t, vai tie ir definÄti tÄ, kÄ mÄs sagaidÄm, un, piemÄram, tos nav ignorÄjusi tukÅ”a vÄrtÄ«ba
LABA: pÄrbaudiet mainÄ«gos.
- name: "Verify that required string variables are defined"
assert:
that: ahs_var is defined and ahs_var | length > 0 and ahs_var != None
fail_msg: "{{ ahs_var }} needs to be set for the role to work "
success_msg: "Required variables {{ ahs_var }} is defined"
loop_control:
loop_var: ahs_var
with_items:
- ahs_item1
- ahs_item2
- ahs_item3
Izvairieties no jaukÅ”anas vÄrdnÄ«cÄm, izmantojiet plakanu struktÅ«ru
Ja loma kÄdÄ no tÄs parametriem sagaida jaucÄjumu/vÄrdnÄ«cu, tad, ja vÄlamies mainÄ«t kÄdu no pakÄrtotajiem parametriem, mums vajadzÄs ignorÄt visu jaucÄjkodu/vÄrdnÄ«cu, kas palielinÄs konfigurÄcijas sarežģītÄ«bu.
LomÄm un rotaļu grÄmatÄm jÄbÅ«t idempotentÄm, jo samazina konfigurÄcijas novirzi un bailes kaut ko salauzt. Bet, ja izmantojat molekulu, tÄ ir noklusÄjuma darbÄ«ba.
Izvairieties no komandu Äaulas moduļu izmantoÅ”anas
Izmantojot Äaulas moduli, tiek iegÅ«ta obligÄta apraksta paradigma, nevis deklaratÄ«vÄ paradigma, kas ir Ansible kodols.
PÄrbaudiet savas lomas, izmantojot molekulu
Molekula ir ļoti elastÄ«ga lieta, apskatÄ«sim dažus scenÄrijus.
Molekula VairÄki gadÄ«jumi
Š molecule.yml sadaÄ¼Ä platforms varat aprakstÄ«t daudzus saimniekdatorus, kurus varat izvietot.
MolekulÄ ir iespÄjams izmantot ansible, lai pÄrbaudÄ«tu, vai instance ir pareizi konfigurÄta, turklÄt kopÅ” 3. izlaiduma tas ir bijis noklusÄjuma iestatÄ«jums. Tas nav tik elastÄ«gs kÄ testinfra/inspec, taÄu mÄs varam pÄrbaudÄ«t, vai faila saturs atbilst mÅ«su cerÄ«bÄm:
Vai arÄ« izvietojiet pakalpojumu, pagaidiet, lÄ«dz tas kļūs pieejams, un veiciet dÅ«mu pÄrbaudi:
---
- name: Verify
hosts: solr
tasks:
- command: /blah/solr/bin/solr start -s /solr_home -p 8983 -force
- uri:
url: http://127.0.0.1:8983/solr
method: GET
status_code: 200
register: uri_result
until: uri_result is not failed
retries: 12
delay: 10
- name: Post documents to solr
command: /blah/solr/bin/post -c master /exampledocs/books.csv
Ievietojiet sarežģītu loÄ£iku moduļos un spraudÅos
Ansible atbalsta deklaratÄ«vu pieeju, tÄpÄc, veicot koda sazaroÅ”anu, datu pÄrveidoÅ”anu, Äaulas moduļus, kods kļūst grÅ«ti lasÄms. Lai cÄ«nÄ«tos pret to un padarÄ«tu to viegli saprotamu, nebÅ«tu lieki cÄ«nÄ«ties ar Å”o sarežģītÄ«bu, izveidojot savus moduļus.
Apkopojiet padomus un ieteikumus
Izvairieties no globÄlajiem mainÄ«gajiem.
Prefiksa lomu mainīgie.
Izmantojiet cilpas vadības mainīgo.
PÄrbaudiet ievades mainÄ«gos.
Izvairieties no jaukÅ”anas vÄrdnÄ«cÄm, izmantojiet plakanu struktÅ«ru.
Izveidojiet idempotas rotaļu grÄmatas un lomas.
Izvairieties no komandu Äaulas moduļu izmantoÅ”anas.
PÄrbaudiet savas lomas, izmantojot molekulu.
Ievietojiet sarežģītu loÄ£iku moduļos un spraudÅos.
SecinÄjums
JÅ«s nevarat vienkÄrÅ”i iet un pÄrveidot infrastruktÅ«ru projektÄ, pat ja jums ir IaC. Tas ir ilgs process, kas prasa pacietÄ«bu, laiku un zinÄÅ”anas.
UPD1 2020.05.01. 20:30 ā Varat izmantot galveno rokasgrÄmatu profilÄÅ”anu callback_whitelist = profile_tasks lai saprastu, kas tieÅ”i darbojas ilgu laiku. Tad ejam cauri Ansible paÄtrinÄjuma klasika. Var arÄ« mÄÄ£inÄt mitogÄns UPD2 2020.05.03. 16:34 SÄkot no Angielski versija