{"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\/sl\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp","title":{"rendered":"Infrastruktura kot koda: kako re\u0161iti te\u017eave s pomo\u010djo XP","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>\u017divjo, Habr! Prej sem se prito\u017eeval nad \u017eivljenjem v paradigmi infrastruktura kot koda in nisem ponujal re\u0161itev za nastalo situacijo. Danes sem se vrnil, da povem, kateri pristopi in prakse nam bodo pomagali pobegniti iz brezna obupa in preusmeriti situacijo v pravo smer. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastruktura kot koda: kako re\u0161iti te\u017eave s pomo\u010djo 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 \/>\nV prej\u0161njem \u010dlanku <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/465137\/\">\u00bbInfrastruktura kot koda: prvo sre\u010danje\u00ab<\/a><\/noindex> Delil sem svoje vtise o tem podro\u010dju, posku\u0161al razmi\u0161ljati o trenutni situaciji na tem podro\u010dju in celo domneval, da bi standardne, znane vsem razvijalcem prakse, lahko pomagale. Morda se je zdelo, da je bilo tam veliko prito\u017eb nad \u017eivljenjem, a ni bilo predlogov za izhod iz nastale situacije. <\/p>\n<h2>Kdo smo, kje smo in katere te\u017eave imamo<\/h2>\n<p>\nTrenutno smo v Sre Onboarding Team, ki ga sestavlja \u0161est programerjev in trije infrastrukturni in\u017eenirji. Vsi se trudimo pisati infrastrukturo kot kodo (IaC). To delamo, ker v splo\u0161nem znamo pisati kodo in v preteklosti smo bili razvijalci na ravni \u00bbnad povpre\u010djem\u00ab. <\/p>\n<ul>\n<li>Imamo nekaj prednosti: dolo\u010deno ozadje, znanje praks, sposobnost pisanja kode, \u017eeljo po u\u010denju novega. <\/li>\n<li>In imamo tudi \u0161ibko to\u010dko, ki je slabost: pomanjkanje znanja o osnovah infrastrukture. <\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Tehnolo\u0161ki sklop, ki ga uporabljamo v na\u0161em IaC.<\/b><\/p>\n<ul>\n<li>Terraform za ustvarjanje virov.<\/li>\n<li>Packer za sestavljanje slik. To so Windows in CentOS 7 slike.<\/li>\n<li>Jsonnet, da ustvarimo mo\u010dno sestavo v drone.io, ter za generiranje packer json in na\u0161ih Terraform modulov.<\/li>\n<li>Azure.<\/li>\n<li>Ansible pri pripravi slik.<\/li>\n<li>Python za pomo\u010dnike ter skripte za provisioning.<\/li>\n<li>In vse to v VSCode s vti\u010dniki, ki jih delimo med \u010dlani ekipe.<\/li>\n<\/ul>\n<p>Izvlek iz moje <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/465137\/\">prej\u0161nje objave<\/a><\/noindex> je bil tak\u0161en: posku\u0161al sem vsaditi (predvsem v sebe) optimizem, \u017eelel sem povedati, da bomo poskusili znane pristope in prakse, da bi se borili proti te\u017eavam in izzivom, ki jih imamo na tem podro\u010dju. <\/p>\n<p>Trenutno se borimo s tak\u0161nimi te\u017eavami IaC:<\/p>\n<ul>\n<li>Nepopolnost orodij in sredstev za razvoj kode.<\/li>\n<li>Po\u010dasna uvedba. Infrastruktura je del resni\u010dnega sveta, ki lahko ni hiter.<\/li>\n<li>Pomanjkanje pristopov in praks.<\/li>\n<li>Smo novinci in veliko ne vemo.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Ekstremno programiranje (XP) prisko\u010di na pomo\u010d<\/h2>\n<p>\nVsem razvityam dobr\u00e9 zn\u00e1mo extr\u00e9mn\u00ed programov\u00e1n\u00ed (XP) a ty praktiky, kter\u00e9 za n\u00edm stoj\u00ed. Mnoz\u00ed z n\u00e1s pracovaly podle takov\u00e9ho p\u0159\u00edstupu a byl \u00fasp\u011b\u0161n\u00fd. Pro\u010d tedy nevyu\u017e\u00edt principy a praktiky, kter\u00e9 tam byly ulo\u017eeny, k p\u0159ekon\u00e1n\u00ed pot\u00ed\u017e\u00ed infrastruktury? Rozhodli jsme se tento p\u0159\u00edstup aplikovat a zjistit, co z toho vzejde.<\/p>\n<p><b class=\"spoiler_title\">Kontrola pou\u017eitelnosti p\u0159\u00edstupu XP ve va\u0161\u00ed oblasti<\/b>Uvedu popis prost\u0159ed\u00ed, pro kter\u00e9 je XP vhodn\u00e9, a jak to souvis\u00ed s n\u00e1mi: <\/p>\n<p>1. Dynamicky se m\u011bn\u00edc\u00ed po\u017eadavky na software. Bylo n\u00e1m jasn\u00e9, jak\u00fd je kone\u010dn\u00fd c\u00edl. Detaily v\u0161ak mohou kol\u00edsat. Rozhodujeme sami, kam pot\u0159ebujeme sm\u011b\u0159ovat, proto se po\u017eadavky periodicky m\u011bn\u00ed (v\u011bt\u0161inou na\u0161\u00edm vlastn\u00edm rozhodnut\u00edm). Pokud vezmeme t\u00fdm SRE, kter\u00fd s\u00e1m prov\u00e1d\u00ed automatizaci a s\u00e1m ur\u010duje po\u017eadavky a rozsah pr\u00e1ce, pak tento bod se velmi dob\u0159e hod\u00ed. <\/p>\n<p>2. Rizika zp\u016fsoben\u00e1 \u010dasov\u011b fixovan\u00fdmi projekty s pou\u017eit\u00edm nov\u00e9 technologie. M\u016f\u017eeme \u010delit rizik\u016fm p\u0159i pou\u017eit\u00ed n\u011b\u010deho, co n\u00e1m nen\u00ed zn\u00e1m\u00e9. A to je n\u00e1\u0161 100% p\u0159\u00edpad. Cel\u00fd n\u00e1\u0161 projekt spo\u010d\u00edv\u00e1 v pou\u017e\u00edv\u00e1n\u00ed technologi\u00ed, se kter\u00fdmi jsme nebyli zcela obezn\u00e1meni. To je obecn\u011b trval\u00fd probl\u00e9m, proto\u017ee v oblasti infrastruktury neust\u00e1le vznik\u00e1 mnoho nov\u00fdch technologi\u00ed. <\/p>\n<p>3,4. Mal\u00fd, spolu um\u00edst\u011bn\u00fd roz\u0161\u00ed\u0159en\u00fd v\u00fdvojov\u00fd t\u00fdm. Technologie, kterou pou\u017e\u00edv\u00e1te, umo\u017e\u0148uje automatizovan\u00e9 jednotkov\u00e9 a funk\u010dn\u00ed testy. Tyto dva body n\u00e1m zcela nevyhovuj\u00ed. Zaprv\u00e9, nejsme kolokovan\u00fd t\u00fdm, a zadruh\u00e9, m\u00e1me dev\u011bt lid\u00ed, co\u017e m\u016f\u017ee b\u00fdt pova\u017eov\u00e1no za velk\u00fd t\u00fdm. Nicm\u00e9n\u011b podle n\u011bkter\u00fdch definic je \"velk\u00fd\" t\u00fdm, kdy\u017e je n\u00e1s 14 nebo v\u00edce. <\/p>\n<p>Pod\u00edvejme se na n\u011bkter\u00e9 praktiky z XP a jak ovliv\u0148uj\u00ed rychlost a kvalitu zp\u011btn\u00e9 vazby.<\/p>\n<h4>Princip zp\u011btn\u00e9 vazby v XP<\/h4>\n<p>\nPodle m\u00e9ho n\u00e1zoru je zp\u011btn\u00e1 vazba odpov\u011bd\u00ed na ot\u00e1zku, zda d\u011bl\u00e1m v\u0161e spr\u00e1vn\u011b, zda sm\u011b\u0159ujeme tam, kam chceme? V XP je na to \u00fa\u017easn\u00fd diagram: \u010dasov\u00fd cyklus zp\u011btn\u00e9 vazby. Intrikuj\u00edc\u00ed je, \u017ee \u010d\u00edm n\u00ed\u017ee se nach\u00e1z\u00edme, t\u00edm rychleji m\u00e1me mo\u017enost z\u00edskat OS a odpov\u011bd\u011bt na pot\u0159ebn\u00e9 ot\u00e1zky. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastruktura kot koda: kako re\u0161iti te\u017eave s pomo\u010djo XP\" src=\"\/wp-content\/uploads\/2019\/10\/e381fb2d7937cbd1978fd6740e63e790.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo je pom\u011brn\u011b zaj\u00edmav\u00e9 t\u00e9ma k diskusi, \u017ee v IT pr\u016fmyslu je mo\u017en\u00e9 rychle z\u00edskat OS. P\u0159edstavte si, jak bolestiv\u00e9 je pracovat na n\u011bjak\u00e9m projektu p\u016fl roku a a\u017e pot\u00e9 zjistit, \u017ee na sam\u00e9m za\u010d\u00e1tku byla ulo\u017eena chyba. To se d\u011bje jak p\u0159i projektov\u00e1n\u00ed, tak i p\u0159i jak\u00e9mkoli budov\u00e1n\u00ed slo\u017eit\u00fdch syst\u00e9m\u016f. <\/p>\n<p>V na\u0161em p\u0159\u00edpad\u011b n\u00e1m IaC pom\u00e1h\u00e1 zp\u011btn\u00e1 vazba. Hned provedu drobnou \u00fapravu ve v\u00fd\u0161e uveden\u00e9m sch\u00e9matu: vyd\u00e1vac\u00ed pl\u00e1n nen\u00ed m\u011bs\u00ed\u010dn\u00ed cyklus, ale prob\u00edh\u00e1 n\u011bkolikr\u00e1t za den. K tomuto cyklu jsou p\u0159ipojeny n\u011bkter\u00e9 praktiky, kter\u00e9 si podrobn\u011bji probereme.<\/p>\n<blockquote><p>D\u016fle\u017eit\u00e9: zp\u011btn\u00e1 vazba m\u016f\u017ee b\u00fdt \u0159e\u0161en\u00edm v\u0161ech v\u00fd\u0161e uveden\u00fdch probl\u00e9m\u016f. V kombinaci s praktikami XP m\u016f\u017ee vyt\u00e1hnout z propasti zoufalstv\u00ed.<\/p><\/blockquote>\n<p><\/p>\n<h2>Jak se vyt\u00e1hnout z propasti zoufalstv\u00ed: t\u0159i praktiky<\/h2>\n<p><\/p>\n<h4>Testovi <\/h4>\n<p>\nTesty jsou v cyklu zp\u011btn\u00e9 vazby XP zm\u00edn\u011bny dvakr\u00e1t. Nen\u00ed to n\u00e1hodou. Jsou extr\u00e9mn\u011b d\u016fle\u017eit\u00e9 pro celou techniku extr\u00e9mn\u00edho programov\u00e1n\u00ed. <\/p>\n<p>P\u0159edpokl\u00e1d\u00e1 se, \u017ee m\u00e1\u0161 Unit a Acceptance testy. Jedny ti d\u00e1vaj\u00ed zp\u011btnou vazbu b\u011bhem n\u011bkolika minut, druh\u00e9 b\u011bhem n\u011bkolika dn\u016f, proto se p\u00ed\u0161\u00ed d\u00e9le a spou\u0161t\u011bj\u00ed se m\u00e9n\u011b \u010dasto. <\/p>\n<p>Existuje klasick\u00e1 pyramida testov\u00e1n\u00ed, kter\u00e1 ukazuje, \u017ee by m\u011blo b\u00fdt v\u00edce n\u011bkter\u00fdch test\u016f. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastruktura kot koda: kako re\u0161iti te\u017eave s pomo\u010djo XP\" src=\"\/wp-content\/uploads\/2019\/10\/29f3217f11b67378c9c0c3f14fab9d61.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJak je tento sch\u00e9ma aplikovateln\u00e9 na n\u00e1s v projektu IaC? Ve skute\u010dnosti\u2026 nijak. <\/p>\n<ul>\n<li>Unit test\u016f, i kdy\u017e jich mus\u00ed b\u00fdt hodn\u011b, nem\u016f\u017ee b\u00fdt p\u0159\u00edli\u0161 mnoho. Bu\u010f testuj\u00ed velmi nep\u0159\u00edmo n\u011bco. Skute\u010dn\u011b lze \u0159\u00edct, \u017ee je v\u016fbec nep\u00ed\u0161eme. Ale existuje n\u011bkolik aplikac\u00ed pro takov\u00e9 testy, kter\u00e9 jsme p\u0159ece jen dok\u00e1zali ud\u011blat:\n<ol>\n<li>Testov\u00e1n\u00ed k\u00f3du na jsonnet. Nap\u0159\u00edklad n\u00e1\u0161 pipeline pro sestaven\u00ed v drone, kter\u00fd je dost slo\u017eit\u00fd. K\u00f3d na jsonnet je dob\u0159e pokryt testy. <br \/>\n Pou\u017e\u00edv\u00e1me tento <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yugui\/jsonnetunit\">Unit testing framework for Jsonnet<\/a><\/noindex>. <\/li>\n<li> Testy na skripty, kter\u00e9 se vykon\u00e1vaj\u00ed p\u0159i spu\u0161t\u011bn\u00ed zdroje. Skripty jsou v Pythonu, a znamen\u00e1 to, \u017ee testy na n\u011b lze ps\u00e1t.<\/li>\n<\/ol>\n<\/li>\n<li>Potenci\u00e1ln\u011b je mo\u017en\u00e1 kontrola konfigurace v testech, ale takhle to ned\u011bl\u00e1me. Je\u0161t\u011b je mo\u017enost nastaven\u00ed kontroly pravidel konfigurov\u00e1n\u00ed zdroj\u016f p\u0159es <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wata727\/tflint\">tflint<\/a><\/noindex>. Nicm\u00e9n\u011b, pro terraform tam jsou p\u0159\u00edli\u0161 z\u00e1kladn\u00ed kontroly, ale mnoho kontroln\u00edch sc\u00e9n\u00e1\u0159\u016f bylo naps\u00e1no pro AWS. A my jsme na Azure, tak\u017ee to op\u011bt nevyhovuje.<\/li>\n<li>Komponentn\u00ed integra\u010dn\u00ed testy: tady z\u00e1le\u017e\u00ed na tom, jak je klasifikuje\u0161 a kam je rozkl\u00e1d\u00e1\u0161. Ale v z\u00e1sad\u011b funguj\u00ed.\n<p>Takto vypadaj\u00ed integra\u010dn\u00ed testy. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastruktura kot koda: kako re\u0161iti te\u017eave s pomo\u010djo XP\" src=\"\/wp-content\/uploads\/2019\/10\/b4771e9e5d329ffb2ba565ead7fdddfd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo je p\u0159\u00edklad p\u0159i sestaven\u00ed obraz\u016f v Drone CI. Aby se k nim dostali, mus\u00ed se \u010dekat 30 minut, ne\u017e se sestav\u00ed image Packer, pak je\u0161t\u011b 15 minut, ne\u017e projdou. Ale jsou! <\/p>\n<p><b class=\"spoiler_title\">Algoritmus kontroly obraz\u016f<\/b> <\/p>\n<ol>\n<li>Nejprve mus\u00ed Packer \u00fapln\u011b p\u0159ipravit obraz.<\/li>\n<li>\u041f\u043e\u0431\u043b\u0438\u0437\u0443 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u0435\u0440\u0440\u0430\u0444\u043e\u0440\u043c \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u044b \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u043e\u0431\u0440\u0430\u0437. <\/li>\n<li>\u041f\u0440\u0438 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0440\u044f\u0434\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u043e\u0431\u0440\u0430\u0437\u043e\u043c. <\/li>\n<li>\u041a\u043e\u0433\u0434\u0430 \u0438\u0437 \u043e\u0431\u0440\u0430\u0437\u0430 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c. \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c, \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435. \u041c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u043b\u0438\u0441\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435, \u0438 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0434\u0435\u043c\u043e\u043d\u044b. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0447\u0435\u0440\u0435\u0437 ssh \u0438\u043b\u0438 winrm \u043c\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0441\u044f \u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432.<\/li>\n<\/ol>\n<p>\n <\/li>\n<li>\u041f\u043e\u0445\u043e\u0436\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438 \u0432 \u043c\u043e\u0434\u0443\u043b\u044f\u0445 \u0434\u043b\u044f \u0442\u0435\u0440\u0440\u0430\u0444\u043e\u0440\u043c\u0430. \u0412\u043e\u0442 \u043a\u0440\u0430\u0442\u043a\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044e\u0449\u0430\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432.\n<p><img decoding=\"async\" alt=\"Infrastruktura kot koda: kako re\u0161iti te\u017eave s pomo\u010djo XP\" src=\"\/wp-content\/uploads\/2019\/10\/e2624fb97831701e374a7e8e7fe39a16.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u041e\u0431\u0440\u0430\u0442\u043d\u0430\u044f \u0441\u0432\u044f\u0437\u044c \u043d\u0430 \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 40 \u043c\u0438\u043d\u0443\u0442. \u0412\u0441\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u041c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0430, \u043d\u043e \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u044d\u0442\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0440\u0435\u0430\u043b\u044c\u043d\u043e. \u0415\u0441\u043b\u0438 \u043e\u0447\u0435\u043d\u044c-\u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c\u0441\u044f, \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0434\u043e 10 \u043c\u0438\u043d\u0443\u0442. \u041d\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0442\u0435\u0441\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0437\u0430 5 \u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u043e 100 \u0448\u0442\u0443\u043a. <\/li>\n<\/ul>\n<p>\n\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0438\u043b\u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0442\u0435\u0440\u0440\u0430\u0444\u043e\u0440\u043c\u0430 \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u0438\u0434\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 REST, \u0438\u043b\u0438 \u043d\u0430 Python-\u0441\u043a\u0440\u0438\u043f\u0442\u044b.<\/p>\n<p>\u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u043e\u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u0441\u0435\u0431\u044f \u0432 \u0441\u0435\u0440\u0432\u0438\u0441\u0435 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.scaleft.com\/\">ScaleFT<\/a><\/noindex>, \u0430 \u043f\u0440\u0438 \u0443\u043d\u0438\u0447\u0442\u043e\u0436\u0435\u043d\u0438\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0443\u0434\u0430\u043b\u044f\u043b\u0430 \u0441\u0435\u0431\u044f.<\/p>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 ScaleFT \u0443 \u043d\u0430\u0441 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441, \u043c\u044b \u0432\u044b\u043d\u043b\u0435\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c \u0447\u0435\u0440\u0435\u0437 API. \u0422\u0430\u043c \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043e\u0431\u0435\u0440\u0442\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c: \u00ab\u0417\u0430\u0439\u0434\u0438 \u0438 \u0443\u0434\u0430\u043b\u0438 \u0442\u043e-\u0442\u043e, \u0442\u043e-\u0442\u043e\u00bb. \u041e\u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u044b. <\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u0441\u0442\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f: \u043c\u043e\u043a\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u0430\u044f-\u0442\u043e API, \u0442\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0448\u044c, \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastruktura kot koda: kako re\u0161iti te\u017eave s pomo\u010djo XP\" src=\"\/wp-content\/uploads\/2019\/10\/dc17aaa64038acb080669d31fe8ecfe0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>\u0418\u0442\u043e\u0433\u0438 \u043f\u043e \u0442\u0435\u0441\u0442\u0430\u043c: \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0434\u0430\u0432\u0430\u0442\u044c \u041e\u0421 \u0437\u0430 \u043c\u0438\u043d\u0443\u0442\u0443, \u043d\u0435 \u0434\u0430\u0435\u0442 \u0435\u0433\u043e. \u0410 \u0431\u043e\u043b\u0435\u0435 \u0432\u044b\u0441\u043e\u043a\u0438\u0435 \u0432\u0438\u0434\u044b \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u044e\u0442 \u044d\u0444\u0444\u0435\u043a\u0442, \u043d\u043e \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0442 \u043b\u0438\u0448\u044c \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c. <\/p><\/blockquote>\n<h4>\u041f\u0430\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/h4>\n<p>\nTesti so, seveda, koristni. Lahko jih napi\u0161emo veliko, lahko so razli\u010dnih vrst. Delovali bodo v svojih nivojih in nam dajali povratne informacije. Vendar pa problem slabih enotnih testov, ki dajo najhitrej\u0161i operacijski sistem, ostaja. Kljub temu \u0161e vedno hrepenimo po hitrem operacijskem sistemu, s katerim je enostavno in prijetno delati. O kakovosti re\u0161itve, ki jo dobimo, niti ne govorimo. Na sre\u010do obstajajo tehnike, ki omogo\u010dajo \u0161e hitrej\u0161e povratne informacije kot enotni testi. To je para programiranje.<\/p>\n<p>Pri pisanju kode si \u017eelimo \u010dimprej dobiti povratne informacije o njeni kakovosti. Da, vse lahko napi\u0161emo v funkcijski veji (da ne bi ni\u010desar pokvarili nikomur), naredimo pull request na GitHubu, dolo\u010dimo nekoga, \u010dije mnenje \u0161teje, in \u010dakamo na odgovor. <\/p>\n<p>Ampak \u010dakati je lahko dolgo. Ljudje so vsi zaposleni, odgovor, tudi \u010de pride, morda ne bo najkakovostnej\u0161i. Predpostavimo, da je odgovor pri\u0161el takoj, recenzent je takoj razumel celotno zamisel, a odgovor \u0161e vedno pride z zamudo, post factum. \u017delimo si hitreje. Tu je para programiranje osredoto\u010deno na to - da takoj, ob pisanju.<\/p>\n<p>Nato predstavljam sloge para programiranja in njihovo uporabnost pri delu z IaC: <\/p>\n<p><b>1. Klasi\u010den, izku\u0161en + izku\u0161en, sprememba glede na \u010dasovnik.<\/b> Dve vlogi \u2013 voznik in navigator. Dva \u010dloveka. Delata nad enim in istim kodeksom in zamenjata vloge preko vnaprej dolo\u010denega \u010dasovnega obdobja. <\/p>\n<p>Oglejmo si zdru\u017eljivost na\u0161ih te\u017eav s stilom: <\/p>\n<ul>\n<li>Te\u017eava: nepopolnost orodij in sredstev za razvoj kode. <br \/>\nNegativen vpliv: dalj\u0161i razvoj, upo\u010dasnimo se, ritmi dela se izkrivlja.<br \/>\n Kako se borimo: uporabljamo druga\u010dno orodje, skupni IDE in \u0161e u\u010dimo bli\u017enjice.<\/li>\n<li> Te\u017eava: po\u010dasno uvajanje. <br \/>\nNegativen vpliv: podalj\u0161uje \u010das za ustvarjanje delujo\u010dega koda. Med \u010dakanjem se dolgo\u010dasimo, roke se stegujejo, da bi se ukvarjali s \u010dim drugim, medtem ko \u010dakamo. <br \/>\nKako se borimo: nismo premagali.<\/li>\n<li> Te\u017eava: pomanjkanje pristopov in praks. <br \/>\nNegativen vpliv: ni znanja, kako narediti dobro in kako slabo. Podalj\u0161uje pridobivanje povratnih informacij. <br \/>\nKako se borimo: medsebojno izmenjujemo mnenja in prakse v parnem delu skoraj re\u0161uje problem.<\/li>\n<\/ul>\n<p>\nGlavna te\u017eava pri uporabi tega sloga v IaC je neenakomeren tempo dela. Pri tradicionalnem razvoju programske opreme ima\u0161 zelo ravno gibanje. Lahko porabi\u0161 pet minut in napi\u0161e\u0161 N. Porabi\u0161 10 minut in napi\u0161e\u0161 2N, 15 minut \u2013 3N. Tu pa lahko porabi\u0161 pet minut in napi\u0161e\u0161 N, nato pa \u0161e 30 minut in napi\u0161e\u0161 deseti del N. Tu ni\u010d ne ve\u0161, nastane zastoja, zmeda. Razumevanje vzame \u010das in odvrne od samega programiranja. <\/p>\n<blockquote><p>Izvle\u010dek: v \u010disti obliki nam ne ustreza.<\/p><\/blockquote>\n<p><b>2. Ping-pong. Ta pristop predvideva, da en sodelujo\u010di pi\u0161e test, drugi pa izvede implementacijo.<\/b> Glede na to, da je z enotnimi testi vse zapleteno, in je treba dolgo pisati integracijski test, vsa preprostost ping-ponga izgine. <\/p>\n<p>Lahko povem, da smo poskusili razdelitev nalog pri oblikovanju scenarija testa in implementaciji kode zanj. En sodelujo\u010di je oblikoval scenarij, v tem delu dela je bil odgovoren, on je imel zadnjo besedo. Drugi je bil odgovoren za implementacijo. Iz\u0161lo je dobro. Kakovost scenarija se pri tak\u0161nem pristopu pove\u010duje. <\/p>\n<blockquote><p>Izvle\u010dek: \u017eal tempo dela ne omogo\u010da uporabe ping-ponga kot prakse parnega programiranja v 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\">Zahteven praksa<\/a><\/noindex>. Ideja je, da en sodelujo\u010di postane usmerjevalnik, drugi pa prevzame vlogo izvajalca. Pri tem ima pravico odlo\u010danja izklju\u010dno usmerjevalnik. Izvajalec samo tipka in lahko z besedo vpliva na dogajanje. Vloge se dolgo ne spreminjajo. <\/p>\n<p>Dobro se prilega za u\u010denje, vendar zahteva mo\u010dne mehke ve\u0161\u010dine. Tu smo se zataknili. Tehnika je bila te\u017eavna. In problem ni le v infrastrukturi. <\/p>\n<blockquote><p>Izvle\u010dek: potencialno se lahko uporablja, ne obupamo nad poskusi.<\/p><\/blockquote>\n<p>\n<b>4. Mobbing, swarming in vse znane, vendar tu nepomenovane sloge<\/b> ne obravnavamo, saj jih nismo preizkusili in o njih ne moremo govoriti v kontekstu na\u0161ega dela.<\/p>\n<blockquote><p>Skupni zaklju\u010dki o uporabi parnega programiranja:<\/p>\n<ul>\n<li>Imamo neenakomeren tempo dela, ki moti.<\/li>\n<li>Ustavili smo se pri nezadostnih mehkih ve\u0161\u010dinah. In predmetna podro\u010dja ne spodbujajo premagovanja teh na\u0161ih pomanjkljivosti.<\/li>\n<li>Dolgi testi, te\u017eave z orodji naredijo parno razvijanje zmedeno.<\/li>\n<\/ul>\n<\/blockquote>\n<p><b>5. Kljub temu so bili tudi uspehi. Izumili smo lastno metodo 'Sre\u010danje \u2013 razhajanje'.<\/b> Na kratko bom opisal, kako deluje. <\/p>\n<p>Imamo stalne partnerje za nekaj dni (manj kot teden). Skupaj opravljamo eno nalogo. Nekaj \u010dasa sedimo skupaj: eden pi\u0161e, drugi sedi in spremlja, kot podpora ekipi. Nato se na trenutek razhajamo, vsak dela svoje neodvisne stvari, potem se ponovno sre\u010damo, zelo hitro uskladimo, delamo nekaj skupaj in se spet razhajamo. <\/p>\n<h4>Na\u010drtovanje in komunikacija<\/h4>\n<p>\nZadnji blok praks, preko katerih re\u0161ujemo te\u017eave OS, je organizacija dela z nalogami. Sem spada tudi izmenjava izku\u0161enj, ki je zunaj parnega dela. Poglejmo tri prakse:<\/p>\n<p><b>1. Naloge preko drevesa ciljev.<\/b> Skupno vodenje projekta smo organizirali preko drevesa, ki neskon\u010dno odhaja v prihodnost. Tehni\u010dno se vodi v Miro. Obstaja ena naloga \u2013 to je vmesni cilj. Od nje izhajajo bodisi manj\u0161i cilji bodisi skupine nalog. Od teh se \u017ee oblikujejo same naloge. Vse naloge se ustvarjajo in vodijo na tej plo\u0161\u010di. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastruktura kot koda: kako re\u0161iti te\u017eave s pomo\u010djo XP\" src=\"\/wp-content\/uploads\/2019\/10\/fe601e959f0055de4f7f4c39ae713c31.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTa shema prav tako daje povratne informacije, ki se dogajajo enkrat na dan, ko se usklajujemo na sestankih. Ob \u0648\u062c\u0648\u062f skupnega na\u010drta, ki je strukturiran in povsem odprt, omogo\u010da vsakemu, da je seznanjen, kaj se dogaja in kako dale\u010d smo napredovali. <\/p>\n<p>Prednosti vizualizacije nalog:<\/p>\n<ul>\n<li>Povezanost. Vsaka naloga vodi do neke globalne cilja. Naloge se grupirajo po manj\u0161ih ciljih. Obmo\u010dje infrastrukture je samo po sebi precej tehni\u010dno. Ni vedno takoj jasno, kak\u0161en specifi\u010den vpliv na posel ima, na primer, pisanje navodil za migracijo na drug nginx. Prisutnost cilja ob strani to naredi bolj razumljivo.<br \/>\n <img decoding=\"async\" alt=\"Infrastruktura kot koda: kako re\u0161iti te\u017eave s pomo\u010djo XP\" src=\"\/wp-content\/uploads\/2019\/10\/fc4da9d277f7dc186a5710cf2be4419c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Povezanost je pomembna lastnost nalog. Neposredno odgovarja na vpra\u0161anje: 'Ali delam pravo stvar?' <\/li>\n<li>Paralelnost. Nas devet ljudi, i nije fizi\u010dki mogu\u0107e da se svi bacaju na jedan zadatak. Zadatak iz jedne oblasti tako\u0111e ne mora uvek biti dovoljan. Primorani smo da paralelizujemo rad izme\u0111u manjih radnih grupa. U tom trenutku, grupe neko vreme rade na svom zadatku, mogu ih poja\u010dati jo\u0161 nekim. Iz te radne grupe ponekad odlaze ljudi. Neko ide na odmor, neko pravi izlaganje za konferenciju DevOps conf, neko pi\u0161e \u010dlanak za Habr. Zna\u010dajno je znati koje ciljeve i zadatke mo\u017ee raditi paralelno. <\/li>\n<\/ul>\n<p>\n<b>2. Smene vo\u0111a jutarnjih sastanaka.<\/b> Na stand-upovima je nastao problem \u2013 ljudi paralelno rade mnogo zadataka. Ponekad su zadaci slabo povezani i nema razumevanja ko \u0161ta radi. A mi\u0161ljenje jo\u0161 jednog \u010dlana tima je veoma va\u017eno. To je dodatna informacija koja mo\u017ee promeniti tok re\u0161enja zadatka. Naravno, obi\u010dno ima\u0161 nekoga pored sebe, ali konsultacije i sugestije nikada nisu suvi\u0161ne. <\/p>\n<p>Da bismo pobolj\u0161ali ovu situaciju, primenili smo tehniku \"Smena vo\u0111e stand-upa\". Sada se rotiraju prema utvr\u0111enom spisku, i to daje efekat. Kada do\u0111e tvoj red, mora\u0161 se uroniti i razumeti \u0161ta se de\u0161ava kako bi dobro vodio scrum sastanak. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastruktura kot koda: kako re\u0161iti te\u017eave s pomo\u010djo XP\" src=\"\/wp-content\/uploads\/2019\/10\/622973a654ecd3e27a7a366596814ffc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>3. Interno demo.<\/b> Pomo\u0107 u re\u0161avanju zadatka putem parnog programiranja, vizualizacija na stablu zadataka i pomo\u0107 na scrum sastancima ujutro \u2013 dobro je, ali nije savr\u0161eno. U paru si ograni\u010den samo na svoja znanja. Stablo zadataka poma\u017ee globalno razumeti ko i \u0161ta radi. A vo\u0111a i kolege na jutarnjem sastanku ne uranjaju duboko u tvoje probleme. Sigurno mogu ne\u0161to i propustiti. <\/p>\n<p>Re\u0161enje je prona\u0111eno u demonstraciji ura\u0111enih radova jedni drugima i kasnijem razgovoru o njima. Okupljamo se jednom nedeljno na sat vremena i pokazujemo detalje re\u0161enja po zadacima koje smo radili tokom poslednje nedelje. <\/p>\n<p>Tokom demonstracije treba otkriti detalje zadatka i obavezno pokazati njegov rad. <\/p>\n<p><b class=\"spoiler_title\">Izlaganje se mo\u017ee voditi prema check-listi.<\/b>1. Uvedite u kontekst. Odakle poti\u010de zadatak, za\u0161to je to uop\u0161te bilo potrebno?<\/p>\n<p>2. Kako se zadatak re\u0161avao do sada? Na primer, zahtevalo se masovno klikanje mi\u0161em, ili je uop\u0161te bilo nemogu\u0107e ne\u0161to uraditi.<\/p>\n<p>3. Kako to pobolj\u0161avamo. Na primer: \"Pogledajte, sada imamo mali skript, evo readme-a.\"<\/p>\n<p>4. Poka\u017eite, kako to deluje. Za\u017eeleno je direktno izvesti neki korisni\u010dki scenario. Ho\u0107u X, radim Y, vidim Z. Na primer, deployujem NGINX, pregledam URL, dobijam 200 OK. Ako akcija traje du\u017ee, pripremite unapred kako biste kasnije pokazali. Idealno je ne prekidati pre demo minimalno sat vremena unapred, ukoliko je osetljivo.<\/p>\n<p>5. Objasnite koliko je uspe\u0161no re\u0161eno pitanje, koji problemi su ostali, \u0161ta nije zavr\u0161eno, kakve su mogu\u0107e budu\u0107e nadogradnje. Na primer, trenutno je CLI, ali \u0107e kasnije biti puna automatizacija u CI.<\/p>\n<p>Po\u017eeljno je da svaki govornik stane u 5-10 minuta. Ako je va\u0161e izlaganje naro\u010dito va\u017eno i oduze\u0107e vi\u0161e vremena, unapred to dogovorite u SRE-takeover kanalu.<\/p>\n<p>Nakon fizi\u010dkog dela obavezno sledi diskusija u thread-u. Tu se pojavljuje potrebna povratna informacija o na\u0161im zadacima. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastruktura kot koda: kako re\u0161iti te\u017eave s pomo\u010djo XP\" src=\"\/wp-content\/uploads\/2019\/10\/77da888d24b52c7eea7e65d2400e152c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNa kraju se sprovodi anketa da bi se utvrdila korisnost doga\u0111aja. Ovo ve\u0107 predstavlja povratnu informaciju o su\u0161tini izlaganja i va\u017enosti zadatka.<\/p>\n<p><img decoding=\"async\" alt=\"Infrastruktura kot koda: kako re\u0161iti te\u017eave s pomo\u010djo XP\" src=\"\/wp-content\/uploads\/2019\/10\/7642cd87050171cc4a6bf278329dd283.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Dugoro\u010dne posledice i \u0161ta dalje<\/h2>\n<p>\nMo\u017ee delovati da je ton \u010dlanka pomalo pesimisti\u010dan. To nije ta\u010dno. Dva osnovna nivoa dobijanja povratne informacije, a to su testovi i parno programiranje, funkcioni\u0161u. Ne ba\u0161 savr\u0161eno kao u tradicionalnom razvoju, ali pozitivni efekti su prisutni. <\/p>\n<p>Testovi, u trenutnom obliku, pru\u017eaju samo delimi\u010dno pokri\u0107e koda. Mnoge konfiguracione funkcije ostaju neproverene. Njihov uticaj na neposredno pisanje koda je mali. Ipak, efekat integracionih testova postoji, i oni omogu\u0107avaju bez straha provo\u0111enje refaktorizacija. To je veliko dostignu\u0107e. Tako\u0111e, sa premestanjem fokusa na razvoj u visoko-nivou jezicima (kod nas python, go) problem se povla\u010di. A za 'lepak' ima puno provera i nije potrebno, dovoljno je op\u0161te integracione.<\/p>\n<p>Rad u paru vi\u0161e zavisi od konkretnih ljudi. Tu je faktor zadatka i na\u0161e softverske ve\u0161tine. Sa nekim ide jako dobro, sa nekim slabije. Korist od toga je o\u010digledna. Jasno je da \u010dak i uz nedovoljno po\u0161tovanje pravila parnog rada, sama \u010dinjenica zajedni\u010dkog izvr\u0161avanja zadataka pozitivno uti\u010de na kvalitet rezultata. Meni li\u010dno u paru ide lak\u0161e i prijatnije.<\/p>\n<p>Vi\u0161i nivo na\u010dina uticaja na OS \u2013 planiranje i rad sa zadacima svakako daju efekat: kvalitetna razmena znanja i pobolj\u0161anje kvaliteta razvoja. <\/p>\n<h4>Kratki zaklju\u010dci u jednoj re\u010denici <\/h4>\n<p><\/p>\n<ul>\n<li>XP prakse rade u IaC, ali sa manjom efikasno\u0161\u0107u.<\/li>\n<li>Osna\u017eujte ono \u0161to funkcioni\u0161e.<\/li>\n<li>Kreirajte svoje kompenzacione mehanizme i prakse.<\/li>\n<\/ul>\n<p>Izvor: <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.4 - 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\/sl\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\/sl\/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: kako prevazi\u0107i probleme pomo\u0107u XP | ProHoster","description":"Zdravo, Habr! Nekada sam se \u017ealio na \u017eivot u paradigmi Infrastructure as Code i nisam nudio re\u0161enja za nastalu situaciju.","canonical_url":"https:\/\/prohoster.info\/sl\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/38747","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=38747"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/38747\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/29066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=38747"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=38747"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=38747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}