Jibda mit-tieni impenn, kwalunkwe kodiċi isir wirt, għaliex l-ideat inizjali jibdew jitbiegħdu mir-realtà ħarxa. Dan la hu tajjeb u lanqas ħażin, huwa fatt li huwa diffiċli li wieħed jargumenta miegħu u li jrid jgħix miegħu. Parti minn dan il-proċess huwa refactoring. Refactoring Infrastruttura bħala Kodiċi. Ħalli l-istorja tibda dwar kif Refactor Ansible f'sena u ma tiġnunx.
It-Twelid tal-Legat
Jum #1: Pazjent Żero
Darba kien hemm proġett kundizzjonali. Kellha tim ta 'żvilupp Dev u inġiniera Ops. Huma kienu qed isolvu l-istess problema: kif jużaw servers u jmexxu applikazzjoni. Il-problema kienet li kull tim solva din il-problema bil-mod tiegħu. Fil-proġett, ġie deċiż li jintuża Ansible biex jissinkronizza l-għarfien bejn it-timijiet Dev u Ops.
Jum #89: It-Twelid tal-Legat
Mingħajr ma ndunawh huma stess, riedu jagħmluha bl-aħjar mod possibbli, iżda rriżulta li kien wirt. Kif jiġri dan?
Għandna kompitu urġenti hawn, ejja nagħmlu hack maħmuġ u mbagħad nirranġawha.
M'għandekx għalfejn tikteb dokumentazzjoni u kollox huwa ċar x'inhu għaddej hawn.
Naf Ansible/Python/Bash/Terraform! Ara kif nista' naħrab!
Jien Developer Full Stack Overflow u kkuppjat dan minn stackoverflow, ma nafx kif taħdem, iżda jidher frisk u ssolvi l-problema.
Bħala riżultat, tista 'tikseb tip ta' kodiċi inkomprensibbli li għalih m'hemm l-ebda dokumentazzjoni, mhuwiex ċar x'tagħmel, jekk huwiex meħtieġ, iżda l-problema hija li għandek bżonn tiżviluppaha, timmodifikaha, żid krozzi u appoġġi , jagħmlu s-sitwazzjoni saħansitra agħar.
Il-mudell IaC inizjalment maħsub u implimentat m'għadux jissodisfa r-rekwiżiti tal-utenti / tan-negozju / timijiet oħra, u ż-żmien biex isiru bidliet fl-infrastruttura ma jibqax aċċettabbli. F'dan il-mument, il-fehim jasal li wasal iż-żmien li tieħu azzjoni.
Refactoring IaC
Jum #139: Tassew għandek bżonn refactoring?
Qabel ma tgħaġġel biex tirrefactor, trid twieġeb numru ta 'mistoqsijiet importanti:
Għaliex għandek bżonn dan kollu?
Għandek ħin?
L-għarfien huwa biżżejjed?
Jekk ma tkunx taf kif twieġeb il-mistoqsijiet, allura r-refactoring jintemm qabel ma jibda, jew jista 'biss imur għall-agħar. Għax kellu esperjenza ( Dak li Tgħallimt mill-Ittestjar ta' 200 Linja ta' Kodiċi tal-Infrastruttura), imbagħad il-proġett irċieva talba għall-għajnuna biex jiffissa r-rwoli u jkoprihom bit-testijiet.
Jum #149: Tħejjija tar-refactoring
L-ewwel ħaġa hija li tipprepara. Iddeċiedi x'se nagħmlu. Biex nagħmlu dan, nikkomunikaw, insibu oqsma problematiċi u nsibu modi kif insolvuhom. Aħna nirreġistraw il-kunċetti li jirriżultaw b'xi mod, pereżempju artiklu fil-konfluwenza, sabiex meta tqum il-mistoqsija "x'inhu l-aħjar?" jew "li huwa korrett?" Aħna ma tlifna triqitna. Fil-każ tagħna, aħna żammejna mal-idea jaqsam u jaħkem: aħna nkissru l-infrastruttura f’biċċiet żgħar/briks. Dan l-approċċ jippermettilek tieħu biċċa infrastruttura iżolata, tifhem x'tagħmel, tkopriha b'testijiet u tibdelha mingħajr biża' li tkisser xejn.
Jirriżulta li l-ittestjar tal-infrastruttura jsir il-pedament u hawn ta’ min isemmi l-piramida tal-ittestjar tal-infrastruttura. Eżattament l-istess idea li tinsab fl-iżvilupp, iżda għall-infrastruttura: qed nimxu minn testijiet rapidi rħas li jiċċekkjaw affarijiet sempliċi, bħall-indentazzjoni, għal testijiet sħaħ għaljin li jużaw l-infrastruttura kollha.
Tentattivi ta' ttestjar Ansible
Qabel ma mmorru niddeskrivew kif koprejna t-testijiet Ansible fuq il-proġett, ser niddeskrivi t-tentattivi u l-approċċi li kelli l-opportunità li nuża qabel sabiex nifhem il-kuntest tad-deċiżjonijiet meħuda.
Jum Nru -997: Provvista SDS
L-ewwel darba li ttestja Ansible kien fuq proġett biex tiżviluppa SDS (Software Defined Storage). Hemm artiklu separat dwar dan is-suġġett Kif tkisser ir-roti fuq il-krozzi meta tittestja d-distribuzzjoni tiegħek, iżda fil-qosor, spiċċajna b'piramida ta 'ttestjar invertita u ttestjar qattajna 60-90 minuta fuq rwol wieħed, li huwa żmien twil. Il-bażi kienet it-testijiet e2e, i.e. skjerajna installazzjoni sħiħa u mbagħad ttestjajna. Li kien saħansitra aktar aggravanti kienet l-invenzjoni tar-rota tiegħu stess. Imma għandi nammetti, din is-soluzzjoni ħadmet u ppermettiet rilaxx stabbli.
Jum # -701: Ansible u kċina tat-test
L-iżvilupp tal-idea tal-ittestjar Ansible kien l-użu ta 'għodod lesti, jiġifieri test kitchen / kitchen-ci u spe. L-għażla kienet determinata mill-għarfien ta 'Ruby (għal aktar dettalji, ara l-artiklu dwar Habré: Il-programmaturi YML joħolmu li jittestjaw Ansible?) ħadem aktar malajr, madwar 40 minuta għal 10 rwoli. Ħloqna pakkett ta’ magni virtwali u għamilna testijiet ġewwa.
B'mod ġenerali, is-soluzzjoni ħadmet, iżda kien hemm xi sediment minħabba l-eteroġeneità. Meta n-numru ta 'nies ittestjati żdied għal 13-il rwol bażiku u 2 rwoli meta jgħaqqdu rwoli iżgħar, allura f'daqqa waħda t-testijiet bdew iseħħu għal 70 minuta, li huwa kważi 2 darbiet itwal. Kien diffiċli li titkellem dwar prattiċi XP (programmazzjoni estrema) għax... ħadd ma jrid jistenna 70 minuta. Din kienet ir-raġuni għall-bidla fl-approċċ
Jum # -601: Ansible u molekula
Kunċettwalment, dan huwa simili għal testkitchen, biss ċċaqlaqna l-ittestjar tar-rwol għal docker u biddilna l-munzell. Bħala riżultat, il-ħin tnaqqas għal 20-25 minuta stabbli għal 7 rwoli.
Billi żiedu n-numru ta 'rwoli ttestjati għal 17 u liting 45 rwol, aħna mexxa dan fi 28 minuta fuq 2 skjavi jenkins.
Jum #167: Żieda ta’ testijiet Ansible mal-proġett
Ħafna probabbli, mhux se jkun possibbli li tagħmel il-kompitu ta 'refactoring bil-għaġla. Il-kompitu għandu jkun jista 'jitkejjel sabiex tkun tista' taqsamha f'biċċiet żgħar u tiekol l-iljunfant biċċa biċċa b'kuċċarina. Għandu jkun hemm fehim ta 'jekk inti miexja fid-direzzjoni t-tajba, kemm żmien biex tmur.
B'mod ġenerali, ma jimpurtax kif se jsir, tista 'tikteb fuq biċċa karta, tista' tpoġġi stikers fuq il-closet, tista 'toħloq kompiti f'Jira, jew tista' tiftaħ Google Docs u tikteb l-istatus attwali hemm. Ir-riġlejn jikbru mill-fatt li l-proċess mhuwiex immedjat, se jkun twil u tedious. Huwa improbabbli li xi ħadd iridek tinħaraq l-ideat, tgħejja, u ssir megħlub waqt ir-refactoring.
Ir-refactoring huwa sempliċi:
Kul.
Sleep.
Kodiċi.
Test IaC.
Irrepeti
u nirrepetu dan sakemm nilħqu l-għan maħsub.
Jista' jkun li ma jkunx possibbli li nibdew nittestjaw kollox mill-ewwel, għalhekk l-ewwel kompitu tagħna kien li nibdew bil-linting u l-verifika tas-sintassi.
Jum #181: Green Build Master
Linting huwa l-ewwel pass żgħir lejn Green Build Master. Dan ma jkisser kważi xejn, iżda jippermettilek tiddibaggja proċessi u tagħmel bini aħdar f'Jenkins. L-idea hija li jiġu żviluppati drawwiet fost it-tim:
It-testijiet ħomor huma ħżiena.
Wasalt biex nirranġa xi ħaġa u fl-istess ħin nagħmel il-kodiċi ftit aħjar milli kien qabel int.
Jum #193: Mill-linting għal testijiet tal-unità
Wara li bnew il-proċess li jdaħħal il-kodiċi fil-kaptan, tista 'tibda l-proċess ta' titjib pass pass - tissostitwixxi linting b'rwoli ta 'tnedija, tista' anki tagħmel dan mingħajr idempotenza. Trid tifhem kif tapplika r-rwoli u kif jaħdmu.
Meta l-biċċa l-kbira tar-rwoli huma koperti b'testijiet ta 'unità u kollox ikun linted, tista' tkompli żżid it-testijiet ta 'integrazzjoni. Dawk. ittestjar mhux briks wieħed fl-infrastruttura, iżda kombinazzjoni tagħhom, per eżempju, konfigurazzjoni istanza sħiħa.
Bl-użu jenkins, aħna ġġeneraw ħafna stadji li linted rwoli/playbooks b'mod parallel, imbagħad testijiet ta 'unità f'kontenituri, u finalment testijiet ta' integrazzjoni.
Jenkins + Docker + Ansible = Testijiet
Iċċekja repo u ġġenera stadji tal-bini.
Mexxi l-istadji tal-playbook tal-lint b'mod parallel.
Mexxi l-istadji tar-rwol tal-lint b'mod parallel.
Mexxi l-istadji tar-rwol tal-kontroll tas-sintassi b'mod parallel.
Mexxi l-istadji tar-rwol tat-test b'mod parallel.
Rwol lint.
Iċċekkja d-dipendenza fuq rwoli oħra.
Iċċekkja s-sintassi.
Oħloq istanza ta' docker
Mexxi molecule/default/playbook.yml.
Iċċekkja l-idempotenza.
Mexxi testijiet ta 'integrazzjoni
Finatura
Jum #271: Fattur Xarabank
Għall-ewwel, ir-refactoring sar minn grupp żgħir ta’ żewġ jew tliet persuni. Huma rrevedew il-kodiċi fil-kaptan. Maż-żmien, it-tim żviluppa għarfien dwar kif tikteb il-kodiċi u r-reviżjoni tal-kodiċi kkontribwixxa għat-tixrid tal-għarfien dwar l-infrastruttura u kif taħdem. Il-qofol hawn kien li r-reviżuri ntgħażlu wieħed wieħed, skont skeda, i.e. b'ċertu grad ta' probabbiltà inti titla' f'biċċa infrastruttura ġdida.
U għandu jkun komdu hawn. Huwa konvenjenti li tagħmel reviżjoni, tara fil-qafas ta 'liema kompitu sar, u l-istorja tad-diskussjonijiet. Integrajna jenkins + bitbucket + jira.
Iżda bħala tali, reviżjoni mhix rimedju; b'xi mod, dħalna fil-kodiċi prinċipali, li għamilna testijiet flop:
Maż-żmien, kien hemm aktar testijiet, il-bini dam aktar bil-mod, sa siegħa fl-agħar każ. Fuq wieħed mir-retros kien hemm frażi bħal "huwa tajjeb li hemm it-testijiet, iżda huma bil-mod." Bħala riżultat, abbandunajna testijiet ta 'integrazzjoni fuq magni virtwali u adattajnahom għal Docker biex jagħmilha aktar mgħaġġla. Bidnejna wkoll testinfra b'verifikatur ansible biex jitnaqqas in-numru ta 'għodod użati.
Strettament, kien hemm sett ta’ miżuri:
Aqleb għal docker.
Neħħi l-ittestjar tar-rwol, li huwa duplikat minħabba dipendenzi.
Żid in-numru ta 'skjavi.
Ordni tat-tħaddim tat-test.
Kapaċità li lint KOLLHA lokalment bi kmand wieħed.
Bħala riżultat, Pipeline fuq jenkins ġie unifikat ukoll
Iġġenera stadji tal-bini.
Lint kollha b'mod parallel.
Mexxi l-istadji tar-rwol tat-test b'mod parallel.
Finitura.
Lezzjonijiet mitgħallma
Evita varjabbli globali
Ansible juża varjabbli globali, hemm soluzzjoni parzjali fil-forma private_role_vars, iżda din mhix rimedju.
Ħa nagħtikom eżempju. Ejjew ikollna role_a и role_b
Il-ħaġa umoristiċi hija li r-riżultat tal-playbooks jiddependi fuq affarijiet li mhux dejjem ikunu ovvji, bħall-ordni li fiha r-rwoli huma elenkati. Sfortunatament, din hija n-natura ta 'Ansible u l-aħjar ħaġa li tista' ssir hija li tuża xi tip ta 'ftehim, pereżempju, fi ħdan rwol, uża biss il-varjabbli deskritt f'dan ir-rwol.
TAJBA: Fir-rwoli għall-varjabbli, uża varjabbli prefissati bl-isem tar-rwol; dan, billi tħares lejn l-inventarju, jagħmilha aktar faċli biex tifhem dak li qed jiġri.
Qbilna li nużaw prefissi varjabbli; ma jkunx superfluwu li niċċekkjaw li huma definiti kif nistennew u, pereżempju, ma ġewx overrived minn valur vojt
TAJBA: Iċċekkja l-varjabbli.
- 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
Evita dizzjunarji tal-hashes, uża struttura ċatta
Jekk rwol jistenna hash/dizzjunarju f'wieħed mill-parametri tiegħu, allura jekk irridu nbiddlu wieħed mill-parametri tat-tfal, ikollna bżonn naqbdu l-hash/dizzjunarju kollu, li se jżid il-kumplessità tal-konfigurazzjoni.
Ir-rwoli u l-playbooks għandhom ikunu idempotenti, għax inaqqas id-drift tal-konfigurazzjoni u l-biża 'li tkisser xi ħaġa. Imma jekk tuża molekula, allura din hija l-imġieba default.
Evita li tuża moduli tal-qoxra tal-kmand
L-użu ta 'modulu tal-qoxra jirriżulta f'paradigma ta' deskrizzjoni imperattiva, minflok dik dikjarattiva, li hija l-qalba ta 'Ansible.
Ittestja r-rwoli tiegħek permezz tal-molekula
Il-molekula hija ħaġa flessibbli ħafna, ejja nħarsu lejn ftit xenarji.
Molekula Każijiet multipli
В molecule.yml fit-taqsima platforms tista' tiddeskrivi ħafna hosts li tista' tuża.
Fil-molekula huwa possibbli li tuża ansible biex tiċċekkja li l-istanza ġiet ikkonfigurata b'mod korrett, barra minn hekk, din kienet l-awtomatika minn rilaxx 3. Mhuwiex flessibbli daqs testnfra/inspec, iżda nistgħu niċċekkjaw li l-kontenut tal-fajl jaqbel mal-aspettattivi tagħna:
Jew uża s-servizz, stenna li jsir disponibbli u agħmel test tad-duħħan:
---
- 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
Poġġi loġika kumplessa f'moduli u plugins
Ansible jippromwovi approċċ dikjarattiv, għalhekk meta tagħmel fergħat tal-kodiċi, trasformazzjoni tad-dejta, moduli tal-qoxra, il-kodiċi isir diffiċli biex jinqara. Biex tiġġieled dan u żżommha sempliċi biex tinftiehem, ma jkunx superfluwu li tiġġieled din il-kumplessità billi toħloq il-moduli tiegħek stess.
Agħti fil-qosor Tips & Tricks
Evita varjabbli globali.
Varjabbli tar-rwol tal-prefiss.
Uża varjabbli tal-kontroll tal-linja.
Iċċekkja l-varjabbli tad-dħul.
Evita dizzjunarji tal-hashes, uża struttura ċatta.
Oħloq playbooks u rwoli idempotenti.
Evita li tuża moduli tal-qoxra tal-kmand.
Ittestja r-rwoli tiegħek permezz tal-molekula.
Poġġi loġika kumplessa f'moduli u plugins.
Konklużjoni
Ma tistax sempliċement tmur u tiffattura mill-ġdid l-infrastruttura fuq proġett, anki jekk għandek IaC. Dan huwa proċess twil li jeħtieġ paċenzja, ħin u għarfien.
UPD1 2020.05.01 20:30 — Għall-profil primarju tal-playbooks tista' tuża callback_whitelist = profile_tasks biex tifhem x'jaħdem eżattament għal żmien twil. Imbagħad ngħaddu Klassiċi tal-aċċelerazzjoni Ansible. Tista 'wkoll tipprova mitoġenu UPD2 2020.05.03 16:34 - Verżjoni Maltija