{"id":38747,"date":"2019-10-31T22:25:42","date_gmt":"2019-10-31T19:25:42","guid":{"rendered":"https:\/\/prohoster.info\/blog\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp\/"},"modified":"2019-10-31T22:25:42","modified_gmt":"2019-10-31T19:25:42","slug":"infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp","title":{"rendered":"Infrastructure as Code: cum s\u0103 dep\u0103\u0219im problemele cu ajutorul XP","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Salut, Habr! C\u00e2ndva m\u0103 pl\u00e2ngeam de via\u021ba \u00een paradigma Infrastructure as Code \u0219i nu ofeream nicio solu\u021bie pentru situa\u021bia existent\u0103. Ast\u0103zi m-am \u00eentors s\u0103 \u00eemp\u0103rt\u0103\u0219esc ce abord\u0103ri \u0219i practici ne pot ajuta s\u0103 ie\u0219im din abisul disper\u0103rii \u0219i s\u0103 \u00eendrept\u0103m lucrurile \u00een direc\u021bia corect\u0103. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: cum s\u0103 dep\u0103\u0219im problemele cu ajutorul XP\" src=\"\/wp-content\/uploads\/2019\/10\/e23fbf20980e731ae1cdb4719c97eb00.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n\u00cen articolul anterior <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/465137\/\">\u00abInfrastructure as Code: prima \u00eent\u00e2lnire\u00bb<\/a><\/noindex> \u00cemi \u00eemp\u0103rt\u0103\u0219eam impresiile despre acest domeniu, \u00eencerc\u00e2nd s\u0103 reflectez asupra situa\u021biei actuale \u0219i chiar am presupus c\u0103 practicile standard, cunoscute de to\u021bi dezvoltatorii, ar putea ajuta. Ar fi putut p\u0103rea c\u0103 am exprimat multe pl\u00e2ngeri despre via\u021b\u0103, dar nu au fost propuneri pentru a ie\u0219i din aceast\u0103 situa\u021bie. <\/p>\n<h2>Cine suntem, unde suntem \u0219i ce probleme avem<\/h2>\n<p>\nAcum ne afl\u0103m \u00een echipa SRE Onboarding, care const\u0103 din \u0219ase programatori \u0219i trei ingineri de infrastructur\u0103. To\u021bi \u00eencerc\u0103m s\u0103 scriem Infrastructure as Code (IaC). Facem asta pentru c\u0103, \u00een principiu, \u0219tim s\u0103 scriem cod \u0219i \u00een trecut am fost dezvoltatori de nivel \u00abpeste medie\u00bb. <\/p>\n<ul>\n<li>Avem un set de avantaje: un anumit background, cuno\u0219tin\u021be de practici, abilitatea de a scrie cod, dorin\u021ba de a \u00eenv\u0103\u021ba lucruri noi. <\/li>\n<li>\u0218i exist\u0103 o parte c\u0103zut\u0103, adic\u0103 un dezavantaj: lipsa de cuno\u0219tin\u021be \u00een domeniul infrastructurii. <\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Tehnologiile pe care le folosim \u00een IaC-ul nostru.<\/b><\/p>\n<ul>\n<li>Terraform pentru crearea resurselor.<\/li>\n<li>Packer pentru construirea imaginii. Acestea sunt imagini Windows, CentOS 7.<\/li>\n<li>Jsonnet, pentru a face un build puternic \u00een drone.io, precum \u0219i pentru generarea packer json \u0219i modulele noastre Terraform.<\/li>\n<li>Azure.<\/li>\n<li>Ansible pentru preg\u0103tirea imaginilor.<\/li>\n<li>Python pentru servicii auxiliare, precum \u0219i scripturi de provisioning.<\/li>\n<li>\u0218i toate acestea \u00een VSCode cu pluginuri, partajate \u00eentre membrii echipei.<\/li>\n<\/ul>\n<p>Concluzia mea <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/465137\/\">articolului precedent<\/a><\/noindex> a fost c\u0103 \u00eencercam s\u0103 insufl (\u00een primul r\u00e2nd \u00een mine) optimism, voiam s\u0103 spun c\u0103 vom \u00eencerca abord\u0103rile \u0219i practicile pe care le cunoa\u0219tem pentru a lupta \u00eempotriva dificult\u0103\u021bilor \u0219i complexit\u0103\u021bilor din acest domeniu. <\/p>\n<p>Acum ne confrunt\u0103m cu urm\u0103toarele probleme IaC:<\/p>\n<ul>\n<li>Imperfec\u021biunea instrumentelor, mijloacelor de dezvoltare a codului.<\/li>\n<li>Dezvoltarea lent\u0103. Infrastructura este o parte a realit\u0103\u021bii, iar aceasta poate fi lent\u0103.<\/li>\n<li>Lipsa abord\u0103rilor \u0219i practicilor.<\/li>\n<li>Suntem noi \u00een acest domeniu \u0219i \u0219tim foarte pu\u021bin.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Programarea extrem\u0103 (XP) se gr\u0103be\u0219te \u00een ajutor<\/h2>\n<p>\nTo\u021bi dezvoltatorii sunt familiariza\u021bi cu programarea extrem\u0103 (XP) \u0219i practicile care o sus\u021bin. Mul\u021bi dintre noi au lucrat dup\u0103 aceast\u0103 abordare, iar aceasta a avut succes. Atunci de ce s\u0103 nu ne folosim de principiile \u0219i practicile stabilite acolo pentru a dep\u0103\u0219i dificult\u0103\u021bile infrastructurii? Am decis s\u0103 aplic\u0103m aceast\u0103 abordare \u0219i s\u0103 vedem ce va ie\u0219i.<\/p>\n<p><b class=\"spoiler_title\">Verificarea aplicabilit\u0103\u021bii abord\u0103rii XP \u00een domeniul vostru<\/b>Prezint o descriere a mediului pentru care XP este adecvat \u0219i cum se coreleaz\u0103 acesta cu noi: <\/p>\n<p>1. Cerin\u021be software care se schimb\u0103 dinamic. Ne era clar care este scopul final. Dar \u00een detalii putem varia. Noi decidem \u00een ce direc\u021bie dorim s\u0103 ne \u00eendrept\u0103m, a\u0219a c\u0103 cerin\u021bele se schimb\u0103 periodic (\u00een principal de c\u0103tre noi \u00een\u0219ine). Dac\u0103 lu\u0103m echipa SRE, care realizeaz\u0103 automatizarea \u0219i \u00ee\u0219i limiteaz\u0103 singur\u0103 cerin\u021bele \u0219i sfera de lucru, atunci acest punct se potrive\u0219te bine. <\/p>\n<p>2. Riscuri cauzate de proiectele cu timp fix care folosesc tehnologii noi. Putem avea riscuri atunci c\u00e2nd folosim lucruri necunoscute nou\u0103. \u0218i acesta este 100% cazul nostru. \u00centregul nostru proiect const\u0103 \u00een utilizarea tehnologiilor cu care nu am fost pe deplin familiariza\u021bi. Aceasta este, de fapt, o problem\u0103 constant\u0103, deoarece \u00een domeniul infrastructurii apar mereu multe tehnologii noi. <\/p>\n<p>3,4. Echipa de dezvoltare extins\u0103, mic\u0103 \u0219i co-locat\u0103. Tehnologia pe care o folosi\u021bi permite teste unitare \u0219i func\u021bionale automate. Aceste dou\u0103 puncte nu se potrivesc prea bine cu noi. \u00cen primul r\u00e2nd, nu suntem o echip\u0103 co-locat\u0103, iar \u00een al doilea r\u00e2nd, suntem nou\u0103 persoane, ceea ce poate fi considerat o echip\u0103 mare. Totu\u0219i, conform unor defini\u021bii ale \u201eechipelor mari\u201d, multe \u00eenseamn\u0103 14+ persoane. <\/p>\n<p>S\u0103 examin\u0103m unele practici din XP \u0219i cum influen\u021beaz\u0103 acestea viteza \u0219i calitatea feedback-ului.<\/p>\n<h4>Principiul ciclului de feedback \u00een XP<\/h4>\n<p>\n\u00cen \u00een\u021belegerea mea, feedback-ul este r\u0103spunsul la \u00eentrebarea: fac bine? Mergem \u00een direc\u021bia corect\u0103? \u00cen XP, exist\u0103 o schem\u0103 divin\u0103 pe acest subiect: ciclul de feedback \u00een timp. Interesant este c\u0103, cu c\u00e2t suntem mai jos, cu at\u00e2t mai repede putem ob\u021bine feedback-ul necesar pentru a r\u0103spunde la \u00eentreb\u0103rile esen\u021biale. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: cum s\u0103 dep\u0103\u0219im problemele cu ajutorul XP\" src=\"\/wp-content\/uploads\/2019\/10\/e381fb2d7937cbd1978fd6740e63e790.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAceasta este o tem\u0103 destul de interesant\u0103 pentru discu\u021bie, deoarece \u00een industria IT este posibil s\u0103 ob\u021binem rapid feedback. Imagina\u021bi-v\u0103 c\u00e2t de dureros este s\u0103 lucra\u021bi la un proiect timp de \u0219ase luni \u0219i abia apoi s\u0103 afla\u021bi c\u0103 la \u00eenceput a fost s\u0103dit\u0103 o gre\u0219eal\u0103. Aceasta se \u00eent\u00e2mpl\u0103 at\u00e2t \u00een proiectare, c\u00e2t \u0219i \u00een construirea oric\u0103ror sisteme complexe. <\/p>\n<p>\u00cen cazul nostru, IaC ne ajut\u0103 cu feedbackul. Fac imediat o mic\u0103 corectare \u00een schema de mai sus: planul de lansare nu are un ciclu lunar, ci se desf\u0103\u0219oar\u0103 de mai multe ori pe zi. La acest ciclu sunt legate anumite practici, pe care le vom explora mai \u00een detaliu.<\/p>\n<blockquote><p>Important: feedbackul poate deveni solu\u021bia pentru toate problemele men\u021bionate mai sus. \u00cen combina\u021bie cu practicile XP, poate scoate din abisul disper\u0103rii.<\/p><\/blockquote>\n<p><\/p>\n<h2>Cum s\u0103 te sco\u021bi din abisul disper\u0103rii: trei practici<\/h2>\n<p><\/p>\n<h4>Teste <\/h4>\n<p>\nTestele sunt men\u021bionate de dou\u0103 ori \u00een ciclul de feedback XP. Nu este \u00eent\u00e2mpl\u0103tor. Ele sunt extrem de importante pentru \u00eentreaga tehnic\u0103 de programare extrem\u0103. <\/p>\n<p>Se presupune c\u0103 ai teste Unit \u0219i Acceptance. Unele \u00ee\u021bi ofer\u0103 feedback \u00een c\u00e2teva minute, iar altele \u00een c\u00e2teva zile, deoarece acestea sunt scrise mai lent \u0219i rulat\u0103 mai rar. <\/p>\n<p>Exist\u0103 o piramid\u0103 clasic\u0103 a test\u0103rii, care arat\u0103 c\u0103 trebuie s\u0103 existe mai multe teste de acest tip. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: cum s\u0103 dep\u0103\u0219im problemele cu ajutorul XP\" src=\"\/wp-content\/uploads\/2019\/10\/29f3217f11b67378c9c0c3f14fab9d61.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCum se aplic\u0103 aceast\u0103 schem\u0103 \u00een proiectul nostru IaC? De fapt... deloc. <\/p>\n<ul>\n<li>Testele Unit, de\u0219i ar trebui s\u0103 fie foarte multe, nu pot fi niciodat\u0103 prea multe. Fiecare dintre ele testeaz\u0103 ceva foarte indirect. Practic, se poate spune c\u0103 nu le scriem deloc. Dar iat\u0103 c\u00e2teva aplica\u021bii pentru astfel de teste pe care totu\u0219i am reu\u0219it s\u0103 le implement\u0103m:\n<ol>\n<li>Testarea codului \u00een jsonnet. Acesta este, de exemplu, pipeline-ul nostru de construire \u00een drone, care este destul de complicat. Codul \u00een jsonnet este bine acoperit de teste. <br \/>\n Folosim acest <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yugui\/jsonnetunit\">cadru de testare Unit pentru Jsonnet<\/a><\/noindex>. <\/li>\n<li> Teste pentru scripturile care sunt executate la pornirea resursei. Scripturile sunt \u00een Python, ceea ce \u00eenseamn\u0103 c\u0103 \u0219i testele pentru acestea pot fi scrise.<\/li>\n<\/ol>\n<\/li>\n<li>Este poten\u021bial posibil s\u0103 verifici configura\u021bia \u00een teste, dar noi nu facem asta. Exist\u0103, de asemenea, op\u021biunea de a seta verificarea regulilor de configurare a resurselor prin <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wata727\/tflint\">tflint<\/a><\/noindex>. Totu\u0219i, pentru terraform sunt prea multe verific\u0103ri de baz\u0103, dar multe scenarii de verificare sunt scrise pentru AWS. Noi suntem pe Azure, a\u0219a c\u0103 din nou nu se potrive\u0219te.<\/li>\n<li>Teste de integrare a componentelor: aici depinde de cum le clasifici \u0219i unde le plasezi. Dar, \u00een principiu, acestea func\u021bioneaz\u0103.\n<p>A\u0219a arat\u0103 testele de integrare. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: cum s\u0103 dep\u0103\u0219im problemele cu ajutorul XP\" src=\"\/wp-content\/uploads\/2019\/10\/b4771e9e5d329ffb2ba565ead7fdddfd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAcesta este un exemplu \u00een timpul construirii imaginilor \u00een Drone CI. Pentru a ajunge la ele, trebuie s\u0103 a\u0219tep\u021bi 30 de minute pentru a construi imaginea Packer, apoi \u00eenc\u0103 15 minute pentru a le rula. Dar exist\u0103! <\/p>\n<p><b class=\"spoiler_title\">Algoritmul de verificare a imaginilor<\/b> <\/p>\n<ol>\n<li>Mai \u00eent\u00e2i, Packer trebuie s\u0103 preg\u0103teasc\u0103 imaginea complet.<\/li>\n<li>Aproape de test exist\u0103 un terraform cu starea local\u0103, cu care desf\u0103\u0219ur\u0103m aceast\u0103 imagine. <\/li>\n<li>Pentru desf\u0103\u0219urare se folose\u0219te un mic modul aflat \u00een apropiere, pentru a lucra mai u\u0219or cu imaginea. <\/li>\n<li>C\u00e2nd o VM este desf\u0103\u0219urat\u0103 din imagine, se pot \u00eencepe verific\u0103rile. \u00cen principal, verific\u0103rile se efectueaz\u0103 pe ma\u0219in\u0103. Se verific\u0103 cum au func\u021bionat scripturile la pornire, cum func\u021bioneaz\u0103 demonii. Pentru aceasta, prin ssh sau winrm, acces\u0103m ma\u0219ina proasp\u0103t ridicat\u0103 \u0219i verific\u0103m starea configura\u021biei sau dac\u0103 serviciile s-au pornit.<\/li>\n<\/ol>\n<p>\n <\/li>\n<li>Situa\u021bia este similar\u0103 cu testele de integrare \u0219i \u00een modulele pentru terraform. Iat\u0103 un tabel scurt care explic\u0103 particularit\u0103\u021bile acestor teste.\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: cum s\u0103 dep\u0103\u0219im problemele cu ajutorul XP\" src=\"\/wp-content\/uploads\/2019\/10\/e2624fb97831701e374a7e8e7fe39a16.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nFeedback-ul pe pipeline este de aproximativ 40 de minute. Totul dureaz\u0103 foarte mult. Poate fi folosit pentru regres, dar pentru dezvoltarea nou\u0103 este complet nerealizabil. Dac\u0103 ne preg\u0103tim foarte, foarte bine, preg\u0103tind running \u0219i scripturi, putem reduce timpul la 10 minute. Dar aceasta nu este totu\u0219i o testare Unit care dureaz\u0103 5 secunde pentru 100 de teste. <\/li>\n<\/ul>\n<p>\nLipsa testelor Unit la construirea imaginilor sau modulelor terraform ne determin\u0103 s\u0103 externaliz\u0103m munca c\u0103tre servicii separate, pe care le putem accesa prin REST, sau c\u0103tre scripturi Python.<\/p>\n<p>De exemplu, a trebuit s\u0103 facem astfel \u00eenc\u00e2t, la pornirea ma\u0219inii virtuale, aceasta s\u0103 se \u00eenregistreze \u00een serviciul <noindex><a rel=\"nofollow\" href=\"https:\/\/www.scaleft.com\/\">ScaleFT<\/a><\/noindex>, iar la distrugerea VM-ului s\u0103 se elimine singur\u0103.<\/p>\n<p>Av\u00e2nd \u00een vedere c\u0103 ScaleFT este un serviciu, suntem nevoi\u021bi s\u0103 lucr\u0103m cu el prin API. A fost scris un wrapper, pe care \u00eel putem apela \u0219i s\u0103 spunem: \u201eAcceseaz\u0103 \u0219i elimin\u0103 acesta, acesta\u201d. Acesta p\u0103streaz\u0103 toate set\u0103rile \u0219i accesurile necesare. <\/p>\n<p>Pe aceasta putem scrie teste normale, deoarece nu se deosebe\u0219te de orice alt software: se simuleaz\u0103 un API, \u00eel apeli\u021bi \u0219i vedem ce se \u00eent\u00e2mpl\u0103. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: cum s\u0103 dep\u0103\u0219im problemele cu ajutorul XP\" src=\"\/wp-content\/uploads\/2019\/10\/dc17aaa64038acb080669d31fe8ecfe0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>Rezultatele testelor: testarea Unit, care ar trebui s\u0103 ofere OS-ului un rezultat \u00eentr-un minut, nu o face. Iar tipurile de testare mai \u00eenalte din piramid\u0103 ofer\u0103 un efect, dar acoper\u0103 doar o parte din probleme. <\/p><\/blockquote>\n<h4>Programare \u00een pereche<\/h4>\n<p>\nTestele sunt, desigur, utile. Se pot scrie multe \u0219i pot fi de diferite tipuri. Vor func\u021biona la nivelurile lor \u0219i ne vor oferi feedback. Dar problema testelor Unit slabe, care ofer\u0103 cele mai rapide OS-uri, r\u0103m\u00e2ne. Pe de alt\u0103 parte, dorin\u021ba de a avea un OS rapid persist\u0103; este u\u0219or \u0219i pl\u0103cut de utilizat. Nemaivorbind de calitatea solu\u021biei ob\u021binute. Din fericire, exist\u0103 tehnici care ofer\u0103 un feedback chiar mai rapid dec\u00e2t testele modulare. Aceasta este programarea \u00een pereche.<\/p>\n<p>C\u00e2nd scriem cod, dorim s\u0103 ob\u021binem feedback despre calitatea acestuia c\u00e2t mai repede posibil. Da, putem scrie totul \u00een ramura de func\u021bionalitate (pentru a nu strica nimic nim\u0103nui), s\u0103 facem un pull request pe GitHub, s\u0103 nominaliz\u0103m pe cineva a c\u0103rui opinie conteaz\u0103 \u0219i s\u0103 a\u0219tept\u0103m r\u0103spunsul. <\/p>\n<p>\u00cens\u0103 a\u0219teptarea poate dura mult. Oamenii sunt ocupa\u021bi \u0219i r\u0103spunsul, chiar dac\u0103 vine, poate s\u0103 nu fie de cea mai bun\u0103 calitate. S\u0103 presupunem c\u0103 r\u0103spunsul a venit imediat, revizorul a \u00een\u021beles instantaneu tot conceptul, dar totul vine cu \u00eent\u00e2rziere, dup\u0103 fact. \u0218i vrem s\u0103 avem r\u0103spunsul mai devreme. Aici intervine programarea \u00een pereche \u2013 pentru a ob\u021bine feedback imediat, \u00een momentul scrierii.<\/p>\n<p>Aici sunt prezentate stilurile program\u0103rii \u00een pereche \u0219i aplicabilitatea lor \u00een munca cu IaC: <\/p>\n<p><b>1. Clasic, Experien\u021biat + Experien\u021biat, schimbare la un interval de timp stabilit.<\/b> Dou\u0103 roluri \u2013 driver \u0219i navigator. Dou\u0103 persoane. Lucreaz\u0103 la acela\u0219i cod \u0219i \u00ee\u0219i schimb\u0103 rolurile la un anumit interval de timp stabilit anterior. <\/p>\n<p>S\u0103 examin\u0103m compatibilitatea problemelor noastre cu stilul: <\/p>\n<ul>\n<li>Problem\u0103: imperfec\u021biunea instrumentelor, a mijloacelor de dezvoltare a codului. <br \/>\nInfluen\u021b\u0103 negativ\u0103: dezvoltare mai lung\u0103, ne \u00eencetinim, ritmul\/ne fiin\u021ba este afectat.<br \/>\n Cum combatem: folosim un alt instrument, un IDE comun \u0219i \u00eenv\u0103\u021b\u0103m scurt\u0103turi.<\/li>\n<li> Problem\u0103: desf\u0103\u0219urare lent\u0103. <br \/>\nInfluen\u021b\u0103 negativ\u0103: cre\u0219te timpul necesar cre\u0103rii unei p\u0103r\u021bi func\u021bionale de cod. Ne plictisim \u00een timpul a\u0219tept\u0103rii \u0219i m\u00e2inile ni se \u00eendreapt\u0103 spre altceva, \u00een timp ce a\u0219tept\u0103m. <br \/>\nCum combatem: nu am rezolvat.<\/li>\n<li> Problem\u0103: lipsa abord\u0103rilor \u0219i practicilor. <br \/>\nInfluen\u021b\u0103 negativ\u0103: nu \u0219tim cum s\u0103 facem bine \u0219i cum s\u0103 facem r\u0103u. \u00cendelunge\u0219te ob\u021binerea feedback-ului. <br \/>\nCum combatem: schimbul de opinii \u0219i practici \u00een munc\u0103 \u00een pereche aproape rezolv\u0103 problema.<\/li>\n<\/ul>\n<p>\nProblema principal\u0103 a aplic\u0103rii acestui stil \u00een IaC este ritmul de munc\u0103 neregulat. \u00cen dezvoltarea tradi\u021bional\u0103 de software, ai o mi\u0219care foarte uniform\u0103. Po\u021bi s\u0103 cheltuie\u0219ti cinci minute \u0219i s\u0103 scrii N. S\u0103 cheltuie\u0219ti zece minute \u0219i s\u0103 scrii 2N, cincisprezece minute \u2013 3N. Aici po\u021bi s\u0103 cheltuie\u0219ti cinci minute \u0219i s\u0103 scrii N, iar apoi s\u0103 cheltuie\u0219ti \u00eenc\u0103 treizeci de minute \u0219i s\u0103 scrii o zecime din N. Aici nu \u0219tii nimic, ai o blocare, o stagnare. Investigarea dureaz\u0103 timp \u0219i te distrage de la programarea propriu-zis\u0103. <\/p>\n<blockquote><p>Concluzie: \u00een forma sa pur\u0103, nu se potrive\u0219te.<\/p><\/blockquote>\n<p><b>2. Ping-pong. Aceast\u0103 abordare presupune c\u0103 un participant scrie un test, iar altul face implementarea acestuia.<\/b> \u021ain\u00e2nd cont de faptul c\u0103 cu testele unit\u0103\u021bii este complicat, \u0219i trebuie s\u0103 scrii un test de integrare care dureaz\u0103 mult timp, toat\u0103 u\u0219urin\u021ba ping-pong-ului se pierde. <\/p>\n<p>Pot spune c\u0103 am \u00eencercat s\u0103 separ\u0103m responsabilit\u0103\u021bile \u00eentre proiectarea scenariului de test \u0219i implementarea codului pentru acesta. Un participant concepea scenariul, iar \u00een aceast\u0103 parte a muncii el era responsabil, el avea cuv\u00e2ntul final. Iar cel\u0103lalt era responsabil pentru implementare. S-a dovedit a fi eficient. Calitatea scenariului este \u00eembun\u0103t\u0103\u021bit\u0103 prin aceast\u0103 abordare. <\/p>\n<blockquote><p>Concluzie: din p\u0103cate, ritmul de munc\u0103 nu permite utilizarea ping-pong-ului ca practic\u0103 de programare \u00een pereche \u00een IaC.<\/p><\/blockquote>\n<p>\n <b>3. Strong Style.<\/b> <noindex><a rel=\"nofollow\" href=\"http:\/\/llewellynfalco.blogspot.com\/2014\/06\/llewellyns-strong-style-pairing.html\">O practic\u0103 complicat\u0103.<\/a><\/noindex>Ideea este c\u0103 un participant devine navigator directiv, iar cel\u0103lalt preia rolul de driver executiv. \u00cen acest context, dreptul de decizie apar\u021bine exclusiv navigatorului. Driverul doar tasteaz\u0103 \u0219i poate influen\u021ba desf\u0103\u0219urarea evenimentelor prin cuv\u00e2nt. Rolurile nu se schimb\u0103 pentru o perioad\u0103 lung\u0103 de timp. <\/p>\n<p>Se potrive\u0219te bine pentru \u00eenv\u0103\u021bare, dar necesit\u0103 abilit\u0103\u021bi soft puternice. Aici ne-am \u00eempotmolit. Tehnica era dificil de aplicat. \u0218i problema nu \u021bine nici m\u0103car de infrastructur\u0103. <\/p>\n<blockquote><p>Concluzie: poate fi aplicat\u0103 poten\u021bial, nu renun\u021b\u0103m la \u00eencerc\u0103ri.<\/p><\/blockquote>\n<p>\n<b>4. Mobbing, swarming \u0219i toate stilurile cunoscute, dar neenumerate aici.<\/b> nu le consider\u0103m, deoarece nu le-am \u00eencercat \u0219i nu putem spune nimic despre ele \u00een contextul muncii noastre.<\/p>\n<blockquote><p>Concluziile generale privind utilizarea program\u0103rii \u00een pereche:<\/p>\n<ul>\n<li>Avem un ritm de munc\u0103 inegal, care perturbeaz\u0103.<\/li>\n<li>Ne-am lovit de abilit\u0103\u021bi soft insuficient de bune. \u0218i domeniul de aplicare nu contribuie la dep\u0103\u0219irea acestor deficien\u021be.<\/li>\n<li>Testele lungi, problemele cu instrumentele fac ca dezvoltarea \u00een pereche s\u0103 fie dificil\u0103.<\/li>\n<\/ul>\n<\/blockquote>\n<p><b>5. Cu toate acestea, au existat \u0219i succese. Am creat propria noastr\u0103 metod\u0103 de \u201eConvergen\u021b\u0103 - Divergen\u021b\u0103\u201d.<\/b> \u00ce\u021bi voi descrie pe scurt cum func\u021bioneaz\u0103. <\/p>\n<p>Avem parteneri permanen\u021bi pentru c\u00e2teva zile (mai pu\u021bin de o s\u0103pt\u0103m\u00e2n\u0103). Facem o sarcin\u0103 \u00eempreun\u0103. O perioad\u0103 st\u0103m \u00eempreun\u0103: unul scrie, cel\u0103lalt st\u0103 \u0219i observ\u0103, ca un suport de echip\u0103. Apoi ne dispers\u0103m pentru un timp, fiecare \u00ee\u0219i face lucruri independente, apoi ne reunim din nou, ne sincroniz\u0103m foarte repede, facem ceva \u00eempreun\u0103 \u0219i din nou ne dispers\u0103m. <\/p>\n<h4>Planificare \u0219i comunicare<\/h4>\n<p>\nUltimul bloc de practici prin care se rezolv\u0103 problemele sistemului de operare este organizarea muncii cu sarcinile \u00een sine. Aici intr\u0103 \u0219i schimbul de experien\u021b\u0103 care se afl\u0103 \u00een afara muncii \u00een echip\u0103. S\u0103 examin\u0103m trei practici:<\/p>\n<p><b>1. Sarcini printr-un arbore de obiective.<\/b> Gestionarea general\u0103 a proiectului a fost organizat\u0103 printr-un arbore care se \u00eentinde infinit \u00een viitor. Tehnic, gestionarea se face \u00een Miro. Exist\u0103 o sarcin\u0103 - aceasta este un obiectiv intermediar. De la aceasta deriv\u0103 fie obiective mai mici, fie grupuri de sarcini. De la acestea deriv\u0103 sarcinile propriu-zise. Toate sarcinile sunt create \u0219i gestionate pe acest board. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: cum s\u0103 dep\u0103\u0219im problemele cu ajutorul XP\" src=\"\/wp-content\/uploads\/2019\/10\/fe601e959f0055de4f7f4c39ae713c31.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAceast\u0103 schem\u0103 ofer\u0103, de asemenea, feedback, care are loc o dat\u0103 pe zi, c\u00e2nd ne sincroniz\u0103m \u00een timpul \u00eent\u00e2lnirilor. Existen\u021ba unui plan comun pentru to\u021bi, structurat \u0219i complet deschis, permite fiec\u0103ruia s\u0103 fie la curent cu ceea ce se \u00eent\u00e2mpl\u0103 \u0219i cu c\u00e2t de departe am avansat \u00een progres. <\/p>\n<p>Avantajele unei viziuni vizuale a sarcinilor:<\/p>\n<ul>\n<li>Causalitate. Fiecare sarcin\u0103 duce la un anumit obiectiv global. Sarcinile sunt grupate \u00een func\u021bie de obiectivele mai mici. Domeniul infrastructurii este \u00een sine destul de tehnic. Nu este \u00eentotdeauna imediat evident ce influen\u021b\u0103 specific\u0103 asupra afacerii are, de exemplu, redactarea unui ghid de migrare pe un alt nginx. Existen\u021ba unei c\u0103r\u021bi de obiective l\u00e2ng\u0103 aceasta face ca lucrurile s\u0103 fie mai clare.<br \/>\n <img decoding=\"async\" alt=\"Infrastructure as Code: cum s\u0103 dep\u0103\u0219im problemele cu ajutorul XP\" src=\"\/wp-content\/uploads\/2019\/10\/fc4da9d277f7dc186a5710cf2be4419c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Causalitatea este o proprietate important\u0103 a sarcinilor. Aceasta r\u0103spunde direct la \u00eentrebarea: \u201eFac bine?\u201d <\/li>\n<li>Paralelism. Suntem nou\u0103 persoane, \u0219i a ne concentra cu to\u021bii pe o singur\u0103 sarcin\u0103 este pur \u0219i simplu imposibil din punct de vedere fizic. Sarcinile dintr-un singur domeniu nu sunt \u00eentotdeauna suficiente. Suntem nevoi\u021bi s\u0103 paraleliz\u0103m munca \u00eentre mici grupuri de lucru. \u00cen acest timp, grupurile stau pe sarcina lor, iar cineva le poate \u00eent\u0103ri. Din aceast\u0103 grup\u0103 de lucru uneori pleac\u0103 oameni. Unii merg \u00een concediu, al\u021bii preg\u0103tesc o prezentare pentru conferin\u021ba DevOps conf, iar al\u021bii scriu un articol pe Habr. A \u0219 i \u0219ti care obiective \u0219i sarcini pot fi realizate \u00een paralel devine foarte important. <\/li>\n<\/ul>\n<p>\n<b>2. Schimbarea facilitatorilor \u00eent\u00e2lnirilor de diminea\u021b\u0103.<\/b> La standup-uri a ap\u0103rut o problem\u0103 \u2013 mul\u021bi oameni lucreaz\u0103 la sarcini \u00een paralel. Uneori sarcinile sunt slab legate \u0219i nu exist\u0103 o \u00een\u021belegere clar\u0103 despre cine ce face. P\u0103rerea unui alt membru al echipei este foarte important\u0103. Este o informa\u021bie suplimentar\u0103 care poate schimba direc\u021bia rezolv\u0103rii sarcinii. Desigur, de obicei ai pe cineva l\u00e2ng\u0103 tine, dar consultarea \u0219i sugestiile nu sunt niciodat\u0103 \u00een plus. <\/p>\n<p>Pentru a \u00eembun\u0103t\u0103\u021bi aceast\u0103 situa\u021bie, am aplicat tehnica \u201eSchimbarea facilitatorului standup-ului\u201d. Acum ace\u0219tia se rotesc dup\u0103 o list\u0103 stabilit\u0103, iar acest lucru are efectul s\u0103u. C\u00e2nd \u00ee\u021bi vine r\u00e2ndul, e\u0219ti obligat s\u0103 te implici \u0219i s\u0103 \u00een\u021belegi ce se \u00eent\u00e2mpl\u0103, pentru a conduce bine \u00eent\u00e2lnirea scrum. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: cum s\u0103 dep\u0103\u0219im problemele cu ajutorul XP\" src=\"\/wp-content\/uploads\/2019\/10\/622973a654ecd3e27a7a366596814ffc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>3. Demo intern.<\/b> Ajutorul \u00een rezolvarea sarcinilor prin programare pereche, vizualizarea pe un arbore de sarcini \u0219i asisten\u021ba \u00een \u00eent\u00e2lnirile scrum de diminea\u021b\u0103 sunt bune, dar nu perfecte. \u00cen pereche e\u0219ti limitat doar de cuno\u0219tin\u021bele tale. Arborele de sarcini ajut\u0103 s\u0103 \u00een\u021belegi global cine \u0219i ce face. Iar facilitatorul \u0219i colegii din \u00eent\u00e2lnirea de diminea\u021b\u0103 nu se vor ad\u00e2nci \u00een problemele tale. Cu siguran\u021b\u0103 pot rata ceva. <\/p>\n<p>Solu\u021bia a fost g\u0103sit\u0103 \u00een prezentarea muncii realizate unii altora \u0219i \u00een discu\u021bia ulterioar\u0103 a acestora. Ne \u00eent\u00e2lnim o dat\u0103 pe s\u0103pt\u0103m\u00e2n\u0103 timp de o or\u0103 \u0219i ar\u0103t\u0103m detaliile solu\u021biilor pentru sarcinile realizate \u00een ultima s\u0103pt\u0103m\u00e2n\u0103. <\/p>\n<p>\u00cen timpul prezent\u0103rii trebuie s\u0103 detaliem sarcina \u0219i s\u0103 demonstr\u0103m neap\u0103rat cum func\u021bioneaz\u0103 aceasta. <\/p>\n<p><b class=\"spoiler_title\">Prezentarea poate fi realizat\u0103 pe baza unui checklist.<\/b>1. Introduce\u021bi \u00een context. De unde a ap\u0103rut sarcina, de ce a fost necesar\u0103 aceasta?<\/p>\n<p>2. Cum se rezolva sarcina anterior? De exemplu, era necesar un clic masiv cu mouse-ul, sau era imposibil s\u0103 se fac\u0103 ceva.<\/p>\n<p>3. Cum \u00eembun\u0103t\u0103\u021bim aceasta. De exemplu: \u201eUita\u021bi, acum avem un mic script, iat\u0103 readme-ul\".<\/p>\n<p>4. Ar\u0103ta\u021bi cum func\u021bioneaz\u0103. Ar fi bine s\u0103 implementa\u021bi un scenariu al utilizatorului. Vreau X, fac Y, v\u0103d Z (sau Z). De exemplu, implementez NGINX, accesez url-ul, primesc 200 OK. Dac\u0103 ac\u021biunea dureaz\u0103, preg\u0103ti\u021bi-o din timp pentru a o putea ar\u0103ta. Ideal ar fi s\u0103 evita\u021bi s\u0103 se strice ceva cu o or\u0103 \u00eenainte de demo, dac\u0103 este fragil.<\/p>\n<p>5. Explica\u021bi c\u00e2t de bine a fost rezolvat\u0103 problema, ce dificult\u0103\u021bi au r\u0103mas, ce nu a fost finalizat \u0219i ce \u00eembun\u0103t\u0103\u021biri sunt posibile \u00een viitor. De exemplu, acum avem CLI, iar mai t\u00e2rziu va fi automatizare complet\u0103 \u00een CI.<\/p>\n<p>Fiecare vorbitor ar trebui s\u0103 se \u00eencadreze \u00een 5-10 minute. Dac\u0103 prezentarea dumneavoastr\u0103 este crucial\u0103 \u0219i va dura mai mult timp, asigura\u021bi-v\u0103 c\u0103 a\u021bi convenit acest lucru \u00een canalul sre-takeover.<\/p>\n<p>Dup\u0103 partea fa\u021b\u0103 \u00een fa\u021b\u0103, va urma cu siguran\u021b\u0103 o discu\u021bie \u00een thread. Aici apare feedback-ul necesar cu privire la sarcinile noastre. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: cum s\u0103 dep\u0103\u0219im problemele cu ajutorul XP\" src=\"\/wp-content\/uploads\/2019\/10\/77da888d24b52c7eea7e65d2400e152c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nLa final, se va realiza un sondaj pentru a evalua utilitatea a ceea ce s-a \u00eent\u00e2mplat. Acesta este feedback-ul referitor la prezentare \u0219i la importan\u021ba sarcinii.<\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: cum s\u0103 dep\u0103\u0219im problemele cu ajutorul XP\" src=\"\/wp-content\/uploads\/2019\/10\/7642cd87050171cc4a6bf278329dd283.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Concluzii lungi \u0219i ce urmeaz\u0103<\/h2>\n<p>\nPoate p\u0103rea c\u0103 tonul articolului este oarecum pesimist. Nu este a\u0219a. Cele dou\u0103 niveluri inferioare de ob\u021binere a feedback-ului, \u0219i anume testele \u0219i programarea \u00een pereche, func\u021bioneaz\u0103. Nu perfect, ca \u00een dezvoltarea tradi\u021bional\u0103, dar exist\u0103 un efect pozitiv. <\/p>\n<p>Testele, \u00een forma lor actual\u0103, ofer\u0103 doar o acoperire par\u021bial\u0103 a codului. Multe func\u021bii de configurare r\u0103m\u00e2n netestate. Influen\u021ba lor asupra activit\u0103\u021bii directe \u00een scrierea codului este sc\u0103zut\u0103. Totu\u0219i, efectul testelor de integrare este vizibil \u0219i ele permit s\u0103 efectu\u0103m f\u0103r\u0103 fric\u0103 refactoriz\u0103ri. Aceasta este o realizare mare. De asemenea, odat\u0103 cu mutarea accentului pe dezvoltarea \u00een limbaje de nivel \u00eenalt (la noi python, go), problema dispare. O mul\u021bime de verific\u0103ri pentru \u201elipici\u201d nu sunt necesare, este suficient\u0103 integratia general\u0103.<\/p>\n<p>Munca \u00een pereche depinde mult de persoanele implicate. Exist\u0103 o factor al sarcinii \u0219i abilit\u0103\u021bile noastre soft. Cu unii rezultateaz\u0103 foarte bine, cu al\u021bii mai pu\u021bin bine. Beneficiul este cert. Este clar c\u0103, chiar \u0219i \u00een cazul nerespect\u0103rii insuficiente a regulilor de munc\u0103 \u00een pereche, simplul fapt de a lucra \u00eempreun\u0103 asupra sarcinilor influen\u021beaz\u0103 pozitiv calitatea rezultatului. Personal, \u00eemi este mai u\u0219or \u0219i mai pl\u0103cut s\u0103 lucrez \u00een pereche.<\/p>\n<p>Metodele mai avansate de influen\u021bare asupra OS \u2013 planificarea \u0219i gestionarea sarcinilor aduc cu siguran\u021b\u0103 efecte: un schimb calitativ de cuno\u0219tin\u021be \u0219i \u00eembun\u0103t\u0103\u021birea calit\u0103\u021bii dezvolt\u0103rii. <\/p>\n<h4>Concluzii scurte \u00eentr-o singur\u0103 linie <\/h4>\n<p><\/p>\n<ul>\n<li>Practicile XP func\u021bioneaz\u0103 \u00een IaC, dar cu o eficien\u021b\u0103 mai mic\u0103.<\/li>\n<li>Consolidati ceea ce func\u021bioneaz\u0103.<\/li>\n<li>Inventa\u021bi propriile mecanisme compensatorii \u0219i practici.<\/li>\n<\/ul>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/470620\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u0436\u0438\u0437\u043d\u044c \u0432 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0435 Infrastructure as code \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0440\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u0431\u0435\u0437\u0434\u043d\u044b \u043e\u0442\u0447\u0430\u044f\u043d\u0438\u044f \u0438 \u0432\u044b\u0440\u0443\u043b\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0440\u0443\u0441\u043b\u043e. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u00abInfrastructure as code: \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e\u00bb \u044f \u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435\u043c \u043e\u0442 \u044d\u0442\u043e\u0439 \u0441\u0444\u0435\u0440\u044b, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29066,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38747","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u0436\u0438\u0437\u043d\u044c \u0432 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0435 Infrastructure as code \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Infrastructure as Code: \u043a\u0430\u043a \u043f\u043e\u0431\u043e\u0440\u043e\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e XP | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u0436\u0438\u0437\u043d\u044c \u0432 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0435 Infrastructure as code \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:25:42+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:25:42+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Infrastructure as Code: cum s\u0103 dep\u0103\u0219e\u0219ti problemele cu ajutorul XP | ProHoster","description":"Salut, Habr! \u00cen trecut, m\u0103 pl\u00e2ngeam de via\u021ba \u00een paradigma Infrastructure as Code \u0219i nu propuneam nimic pentru a rezolva situa\u021bia creat\u0103.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Infrastructure as Code: \u043a\u0430\u043a \u043f\u043e\u0431\u043e\u0440\u043e\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e XP | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u0436\u0438\u0437\u043d\u044c \u0432 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0435 Infrastructure as code \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:25:42+00:00","article:modified_time":"2019-10-31T19:25:42+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38747","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 23:16:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:04:30","updated":"2026-01-23 23:16:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/38747","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=38747"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/38747\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/29066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=38747"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=38747"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=38747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}