{"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\/hr\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp","title":{"rendered":"Infrastructure as Code: kako prevladati probleme uz pomo\u0107 XP","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Pozdrav, Habr! Prije sam se \u017ealio na \u017eivot unutar paradigme Infrastructure as Code i nisam nudio rje\u0161enja za postoje\u0107u situaciju. Danas se vra\u0107am kako bih pri\u010dao o pristupima i praksama koje \u0107e pomo\u0107i da se izvu\u010dete iz ponora o\u010daja i preokrenete situaciju u pravom smjeru. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: kako prevladati probleme uz pomo\u0107 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 \/>\nU prethodnom \u010dlanku <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/465137\/\">\u00abInfrastructure as Code: prvo upoznavanje\u00bb<\/a><\/noindex> podijelio sam svoje utiske o ovom podru\u010dju, poku\u0161avao razmi\u0161ljati o trenutnoj situaciji u ovoj oblasti i \u010dak pretpostavio da standardne, svima poznate prakse programera mogu pomo\u0107i. Moglo se \u010diniti da je bilo mnogo \u017ealbi na \u017eivot, ali nije bilo prijedloga za izlazak iz postoje\u0107e situacije. <\/p>\n<h2>Tko smo, gdje smo i koji su na\u0161i problemi<\/h2>\n<p>\nTrenutno se nalazimo u SRE Onboarding timu, koji se sastoji od \u0161est programera i tri in\u017eenjera infrastrukture. Svi poku\u0161avamo pisati Infrastructure as Code (IaC). Radimo to jer u su\u0161tini znamo pisati kod i u anamnezi smo programeri \u201eiznad prosjeka\u201d. <\/p>\n<ul>\n<li>Imamo set prednosti: odre\u0111eno iskustvo, poznavanje praksi, sposobnost pisanja koda i \u017eelju za u\u010denjem novog. <\/li>\n<li>A imamo i slabiju stranu, koju mo\u017eete smatrati manom: nedostatak znanja o osnovama infrastrukture. <\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Tehnolo\u0161ki skupovi koje koristimo u na\u0161em IaC.<\/b><\/p>\n<ul>\n<li>Terraform za kreiranje resursa.<\/li>\n<li>Packer za izradu slika. To su Windows i CentOS 7 slike.<\/li>\n<li>Jsonnet za mo\u0107no graditi u drone.io, a tako\u0111er za generiranje packer json i na\u0161ih Terraform modula.<\/li>\n<li>Azure.<\/li>\n<li>Ansible prilikom pripreme slika.<\/li>\n<li>Python za pomo\u0107ne servise, kao i za provisioning skripte.<\/li>\n<li>I sve to u VSCode s dodacima koje dijelimo me\u0111u \u010dlanovima tima.<\/li>\n<\/ul>\n<p>Zaklju\u010dak mog <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/465137\/\">pro\u0161log \u010dlanka<\/a><\/noindex> bio je sljede\u0107i: poku\u0161avao sam usaditi (prije svega u sebe) optimizam, htio sam re\u0107i da \u0107emo isprobati pristupe i prakse koje poznajemo kako bismo se borili s te\u0161ko\u0107ama i izazovima koji postoje u ovoj oblasti. <\/p>\n<p>Trenuta\u010dno se suo\u010davamo s takvim problemima u IaC:<\/p>\n<ul>\n<li>Nedostatak savr\u0161enstva alata, razvojnih sredstava.<\/li>\n<li>Sporo implementiranje. Infrastruktura je dio stvarnog svijeta, a on mo\u017ee biti spor.<\/li>\n<li>Nedostatak pristupa i praksi.<\/li>\n<li>Mi smo novi i ne znamo mnogo.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Ekstremno programiranje (XP) dolazi u pomo\u0107.<\/h2>\n<p>\nSvima developerima dobro je poznato ekstremno programiranje (XP) i prakse koje su iza njega. Mnogi od nas su radili prema ovom pristupu, a on se pokazao uspje\u0161nim. Pa za\u0161to ne bismo iskoristili principe i prakse koje su tamo postavljene da bismo se nosili s izazovima infrastrukture? Odlu\u010dili smo primijeniti ovaj pristup i vidjeti \u0161to \u0107e iz njega proiza\u0107i.<\/p>\n<p><b class=\"spoiler_title\">Provjera primjenjivosti pristupa XP-u u va\u0161em podru\u010dju<\/b>Donosim opis okru\u017eenja za koje je XP dobro prilago\u0111en i kako se to odnosi na nas: <\/p>\n<p>1. Dinami\u010dki se mijenjaju\u0107i softverski zahtjevi. Bilo nam je jasno koja je kona\u010dna svrha. No, u detaljima se mo\u017ee varirati. Mi sami odlu\u010dujemo kamo trebamo skrenuti, stoga se zahtjevi povremeno mijenjaju (naj\u010de\u0161\u0107e od strane nas samih). Ako uzmemo tim SRE-a koji samo radi automatizaciju i sam ograni\u010dava zahtjeve i opseg rada, onda se ova stavka dobro uklapa. <\/p>\n<p>2. Rizici nastali fiksnim vremenom projekata koriste\u0107i nove tehnologije. Mogu se pojaviti rizici kada koristimo ne\u0161to \u0161to nam nije poznato. I to je 100% na\u0161 slu\u010daj. Ceo na\u0161 projekt temelji se na tehnologijama s kojima nismo u potpunosti bili upoznati. Uistinu, to je stalni problem, jer u podru\u010dju infrastrukture neprekidno se pojavljuje mno\u0161tvo novih tehnologija. <\/p>\n<p>3,4. Mala, ko-locirana pro\u0161irena razvojna ekipa. Tehnologija koju koristite omogu\u0107uje automatske jedinicne i funkcionalne testove. Ove dvije stavke potpuno nam ne odgovaraju. Prvo, nismo ko-locirani tim, a drugo, nas je devet, \u0161to se mo\u017ee smatrati velikim timom. Iako prema nekim definicijama \u201evelikog\u201c tima, mnogo je 14+ osoba. <\/p>\n<p>Razmotrit \u0107emo neke prakse iz XP-a i kako one utje\u010du na brzinu i kvalitetu povratnih informacija.<\/p>\n<h4>Princip ciklusa povratne informacije u XP-u<\/h4>\n<p>\nU mom razumijevanju povratna informacija je odgovor na pitanje, radim li ispravno, idemo li u pravom smjeru? U XP-u postoji bo\u017eanska shema u tom pogledu: vremenski ciklus povratne informacije. Zanimljivost le\u017ei u tome \u0161to \u0161to smo ni\u017ee, to br\u017ee mo\u017eemo dobiti OS kako bismo odgovorili na potrebna pitanja. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: kako prevladati probleme uz pomo\u0107 XP\" src=\"\/wp-content\/uploads\/2019\/10\/e381fb2d7937cbd1978fd6740e63e790.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo je prili\u010dno zanimljiva tema za raspravu, da u na\u0161oj IT industriji mo\u017eemo brzo dobiti OS. Zamislite koliko je te\u0161ko raditi na nekom projektu \u0161est mjeseci i tek tada saznati da je na samom po\u010detku do\u0161lo do gre\u0161ke. To se doga\u0111a i u projektiranju i u bilo kojem konstrukciji slo\u017eenih sustava. <\/p>\n<p>U na\u0161em slu\u010daju IaC nam poma\u017ee povratna informacija. Odmah \u0107u unijeti malu ispravku u gornju shemu: plan izlaska nema mjese\u010dni ciklus, ve\u0107 se odvija nekoliko puta dnevno. Tim ciklusom OS su vezane neke prakse koje \u0107emo detaljnije razmotriti.<\/p>\n<blockquote><p>Va\u017eno: povratna informacija mo\u017ee postati rje\u0161enje za sve gore navedene probleme. U kombinaciji s XP praksama, mo\u017ee nas izvu\u0107i iz ponora o\u010daja.<\/p><\/blockquote>\n<p><\/p>\n<h2>Kako se izvuci iz ponora o\u010daja: tri prakse<\/h2>\n<p><\/p>\n<h4>Testovi <\/h4>\n<p>\nTestovi se spominju dvaput u ciklusu povratne informacije XP. To nije slu\u010dajno. Oni su iznimno va\u017eni za cijelu tehniku ekstremnog programiranja. <\/p>\n<p>Pretpostavlja se da ima\u0161 Unit i Acceptance testove. Jedni ti daju povratne informacije za nekoliko minuta, a drugi za nekoliko dana, pa ih du\u017ee pi\u0161emo, dok se rje\u0111e provode. <\/p>\n<p>Postoji klasi\u010dna piramida testiranja koja pokazuje da bi trebalo biti vi\u0161e odre\u0111enih testova. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: kako prevladati probleme uz pomo\u0107 XP\" src=\"\/wp-content\/uploads\/2019\/10\/29f3217f11b67378c9c0c3f14fab9d61.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKako je ova shema primjenjiva na na\u0161 projekt IaC? U stvari... nikako. <\/p>\n<ul>\n<li>Iako bi trebalo biti jako puno unit testova, ne mo\u017ee ih biti previ\u0161e. Ili testiraju ne\u0161to vrlo indirektno. U su\u0161tini, mo\u017eemo re\u0107i da ih uop\u0107e ne pi\u0161emo. No, postoje neka primjenjiva podru\u010dja gdje smo ih ipak uspjeli napraviti:\n<ol>\n<li>Testiranje koda na jsonnet. To je, na primjer, na\u0161 build pipeline u droneu, koji je prili\u010dno slo\u017een. Kod na jsonnetu dobro je prekriven testovima. <br \/>\n Koristimo ovaj <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yugui\/jsonnetunit\">Unit testing framework for Jsonnet<\/a><\/noindex>. <\/li>\n<li> Testovi za skripte koje se izvr\u0161avaju prilikom pokretanja resursa. Skripte su na Pythonu, a samim time mo\u017eemo pisati i testove na njima.<\/li>\n<\/ol>\n<\/li>\n<li>Potencijalno je mogu\u0107a provjera konfiguracije u testovima, ali mi to ne radimo. Tako\u0111er postoji mogu\u0107nost postavljanja provjere pravila konfiguriranja resursa kroz <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wata727\/tflint\">tflint<\/a><\/noindex>. Me\u0111utim, za Terraform su tamo pregledi previ\u0161e osnovni, ali mnogo provjera napisanih za AWS. A mi smo na Azureu, tako da to opet ne odgovara.<\/li>\n<li>Komponentni integracijski testovi: ovdje ovisi kako ih klasificira\u0161 i gdje ih smje\u0161ta\u0161. No oni u su\u0161tini funkcioni\u0161u.\n<p>Ovako izgledaju integracijski testovi. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: kako prevladati probleme uz pomo\u0107 XP\" src=\"\/wp-content\/uploads\/2019\/10\/b4771e9e5d329ffb2ba565ead7fdddfd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo je primjer prilikom izrade slika u Drone CI. Da bi do njih do\u0161li, potrebno je \u010dekati 30 minuta dok se Packer slika ne izgradi, a zatim jo\u0161 15 minuta dok pro\u0111u. Ali postoje! <\/p>\n<p><b class=\"spoiler_title\">Algoritam provjere slika<\/b> <\/p>\n<ol>\n<li>Prvo Packer mora potpuno pripremiti sliku.<\/li>\n<li>Pored testa postoji Terraform s lokalnim stanjem kojim raspodjeljujemo ovu sliku. <\/li>\n<li>Prilikom raspodjele koristi se mali modul koji se nalazi blizu kako bi rad sa slikom bio jednostavniji. <\/li>\n<li>Kada je iz slike raspore\u0111ena VM, mo\u017ee se po\u010deti s provjerama. Uglavnom, provjere se vr\u0161e na stroju. Provjerava se kako su skripte radile prilikom pokretanja, kako rade demoni. Za to preko ssh ili winrm ulazimo na upravo podignutu ma\u0161inu i provjeravamo stanje konfiguracije ili da li su servisi podigli.<\/li>\n<\/ol>\n<p>\n <\/li>\n<li>Sli\u010dna situacija je s integracijskim testovima i u modulima za Terraform. Evo kratke tablice koja obja\u0161njava osobitosti takvih testova.\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: kako prevladati probleme uz pomo\u0107 XP\" src=\"\/wp-content\/uploads\/2019\/10\/e2624fb97831701e374a7e8e7fe39a16.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPovratne informacije na pipelineu traje oko 40 minuta. Sve traje jako dugo. Mo\u017ee se koristiti za regresiju, ali za novi razvoj to je jednostavno nemogu\u0107e. Ako se zaista temeljito pripremite, pripremite running, skripte, tada se to mo\u017ee smanjiti na 10 minuta. No, to jo\u0161 uvijek nisu Unit testovi koji traju 5 sekundi za 100 komada. <\/li>\n<\/ul>\n<p>\nNedostatak Unit testova prilikom izrade slika ili modula Terraforma tjera nas da prebacimo rad na odvojene servise koje se jednostavno mo\u017ee dohvatiti putem REST-a, ili na Python skripte.<\/p>\n<p>Na primjer, morali smo napraviti da se prilikom pokretanja virtualne ma\u0161ine registrira u servisu <noindex><a rel=\"nofollow\" href=\"https:\/\/www.scaleft.com\/\">ScaleFT<\/a><\/noindex>, a prilikom uni\u0161tavanja virtualnog stroja da se ukloni.<\/p>\n<p>Budu\u0107i da je ScaleFT na\u0161 servis, prisiljeni smo raditi s njim preko API-ja. Tamo je napisana omota\u010d koja se mo\u017ee dohvatiti i re\u0107i: 'U\u0111i i ukloni ovo, ono'. Ona \u010duva sve potrebne postavke i pristupe. <\/p>\n<p>Na to ve\u0107 mo\u017eemo pisati normalne testove, budu\u0107i da se nimalo ne razlikuje od obi\u010dnog softvera: mocka\u0161 neki API, ti ga dohva\u0107a\u0161, i gledamo \u0161to se doga\u0111a. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: kako prevladati probleme uz pomo\u0107 XP\" src=\"\/wp-content\/uploads\/2019\/10\/dc17aaa64038acb080669d31fe8ecfe0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>Ishodi testova: Unit testiranje, koje bi trebalo dati OS-u u minuti, ne daje to. A vi\u0161i tipovi testiranja u piramidi daju u\u010dinak, ali pokrivaju samo dio problema. <\/p><\/blockquote>\n<h4>Parno programiranje<\/h4>\n<p>\nTestovi su, naravno, dobri. Mogu se pisati u velikim koli\u010dinama i mogu imati razli\u010dite oblike. Radit \u0107e na svojim razinama i pru\u017eati nam povratne informacije. No, problem s lo\u0161im Unit testovima, koji donose najbr\u017ei OS, ostaje. I dalje \u017eelimo brzi OS, s njim je lako i ugodno raditi. Ne govorim o kvaliteti rje\u0161enja koje dobivamo. Na sre\u0107u, postoje tehnike koje omogu\u0107uju br\u017ei feedback od modula. To je parno programiranje.<\/p>\n<p>Kada pi\u0161emo kod, \u017eelimo \u0161to br\u017ee dobiti povratne informacije o njegovoj kvaliteti. Da, mo\u017eemo sve napisati u feature grani (da ne bismo nikome uni\u0161tili ne\u0161to), napraviti pull request na GitHubu, odrediti nekoga \u010dije mi\u0161ljenje ima te\u017einu i \u010dekati odgovor. <\/p>\n<p>Ali \u010dekanje mo\u017ee potrajati. Svi su ljudi zauzeti, a odgovor, \u010dak i ako stigne, mo\u017eda ne\u0107e biti od najvi\u0161e kvalitete. Pretpostavimo da je odgovor stigao odmah, recenzent je odmah shvatio cijeli koncept, ali odgovor i dalje dolazi s odgodom, postfaktom. A \u017eelimo ranije. Zato je parno programiranje usmjereno na to \u2013 da odmah, u trenutku pisanja.<\/p>\n<p>Dalje predstavljam stilove parnog programiranja i njihovu primjenu u radu na IaC: <\/p>\n<p><b>1. Klasi\u010dno, Iskusan + Iskusan, promjena po tajmeru.<\/b> Dvije uloge \u2013 voza\u010d i navigator. Dvojica ljudi. Rade na istom kodu i mijenjaju uloge nakon unaprijed odre\u0111enog vremenskog razdoblja. <\/p>\n<p>Pogledajmo uskla\u0111enost na\u0161ih problema sa stilom: <\/p>\n<ul>\n<li>Problem: nesavr\u0161enstvo alata, sredstava za razvoj koda. <br \/>\nNegativan utjecaj: du\u017ee vrijeme razvoja, usporavamo se, gubimo tempo\/ritam rada.<br \/>\n Kako se borimo: primjenjujemo razli\u010dite alate, zajedni\u010dki IDE i u\u010dimo pre\u010dace.<\/li>\n<li> Problem: sporo implementiranje. <br \/>\nNegativan utjecaj: produ\u017eava vrijeme potrebno za stvaranje radnog dijela koda. Dosadno nam je dok \u010dekamo, ruke su nam \u017eeljne baviti se ne\u010dim drugim dok \u010dekamo. <br \/>\nKako se borimo: nismo pobijedili.<\/li>\n<li> Problem: nedostatak pristupa i praksi. <br \/>\nNegativan utjecaj: nema znanja o tome kako raditi dobro, a kako lo\u0161e. Produ\u017eava dobivanje povratnih informacija. <br \/>\nKako se borimo: me\u0111usobna razmjena mi\u0161ljenja i praksi u parnom radu gotovo rje\u0161ava problem.<\/li>\n<\/ul>\n<p>\nGlavna problematika primjene ovog stila u IaC je neravnomjeran tempo rada. U tradicionalnom razvoju softvera, napredak je prili\u010dno ujedna\u010den. Mo\u017ee\u0161 potro\u0161iti pet minuta i napisati N. Potro\u0161i deset minuta i napi\u0161i 2N, petnaest minuta \u2013 3N. Ovdje, me\u0111utim, mo\u017ee\u0161 potro\u0161iti pet minuta i napisati N, a zatim potro\u0161iti jo\u0161 30 minuta i napisati jednu desetinu od N. Ovdje ni\u0161ta ne zna\u0161, do\u0111e\u0161 do zastoja, zaglavljen si. Rje\u0161avanje problema oduzima vrijeme i odvla\u010di te od samog programiranja. <\/p>\n<blockquote><p>Zaklju\u010dak: u \u010distom obliku nam ne odgovara.<\/p><\/blockquote>\n<p><b>2. Ping-pong. Ovaj pristup podrazumijeva da jedan sudionik pi\u0161e test, a drugi radi njegovu implementaciju.<\/b> S obzirom na to da je s Unit testovima sve komplicirano, i treba\u0161 napisati dugotrajan integracijski test, cijela lako\u0107a ping-ponga nestaje. <\/p>\n<p>Mogu re\u0107i da smo poku\u0161ali podijeliti odgovornosti po pitanju dizajniranja scenarija testa i implementacije koda. Jedan sudionik smi\u0161ljao je scenarij, u ovom dijelu posla bio je odgovoran i imao je zadnju rije\u010d. A drugi je bio odgovoran za implementaciju. To se ispostavilo kao dobro. Kvaliteta scenarija prema ovom pristupu se pove\u0107ava. <\/p>\n<blockquote><p>Zaklju\u010dak: na\u017ealost, tempo rada ne dopu\u0161ta kori\u0161tenje ping-ponga kao prakse parnog programiranja u 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\">Kompleksna praksa<\/a><\/noindex>. Ideja je da jedan sudionik postane direktivan navigator, a drugi preuzima ulogu izvr\u0161nog voza\u010da. Pri tom su odluke isklju\u010divo na navigatoru. Voza\u010d samo kuca i mo\u017ee rije\u010dima utjecati na tijek doga\u0111aja. Uloge se ne mijenjaju dugo vremena. <\/p>\n<p>Dobar je za obuku, ali zahtijeva sna\u017ene softverske vje\u0161tine. Tu smo se i zaglavili. Tehnika je bila te\u0161ka. I tu se ne radi \u010dak ni o infrastrukturi. <\/p>\n<blockquote><p>Zaklju\u010dak: potencijalno se mo\u017ee primijeniti, ne odustajemo od poku\u0161aja.<\/p><\/blockquote>\n<p>\n<b>4. Mobbing, swarming i svi poznati, ali ovdje ne navedeni stilovi<\/b> ne razmatramo, jer nismo isprobali i ne mo\u017eemo o tome govoriti u kontekstu na\u0161eg rada.<\/p>\n<blockquote><p>Op\u0107i rezultati o kori\u0161tenju parnog programiranja:<\/p>\n<ul>\n<li>Imamo neujedna\u010den tempo rada, koji ometa.<\/li>\n<li>Uo\u010dili smo nedostatak dobrih softverskih vje\u0161tina. A predmetna oblast ne poma\u017ee u prevladavanju tih na\u0161ih nedostataka.<\/li>\n<li>Dugi testovi, problemi s alatima \u010dine parni razvoj zamrznutim.<\/li>\n<\/ul>\n<\/blockquote>\n<p><b>5. Ipak, bilo je i uspjeha. Izmislili smo vlastitu metodu 'Sjedinjavanje \u2013 razdvajanje'.<\/b> Kratko \u0107u opisati kako ona funkcionira. <\/p>\n<p>Imamo stalne partnere na nekoliko dana (manje od tjedan dana). Radimo na jednom zadatku zajedno. Neko vrijeme sjedimo zajedno: jedan pi\u0161e, drugi sjedi i promatra, kao tim podr\u0161ke. Nakon toga se razdvajamo na neko vrijeme, svatko radi ne\u0161to neovisno, a onda se opet okupljamo, vrlo brzo se sinkroniziramo, radimo ne\u0161to zajedno i opet se razdvajamo. <\/p>\n<h4>Planiranje i komunikacija<\/h4>\n<p>\nPosljednji blok praksi, kroz koje se rje\u0161avaju problemi operativnog sustava, odnosi se na organizaciju rada s samim zadacima. Ovo tako\u0111er uklju\u010duje razmjenu iskustava koja se odvijaju izvan uparene suradnje. Razmotrit \u0107emo tri prakse:<\/p>\n<p><b>1. Zadatci prema stablu ciljeva.<\/b> Op\u0107e upravljanje projektom organizirali smo kroz stablo koje beskona\u010dno ide u budu\u0107nost. Tehni\u010dki se vo\u0111enje obavlja u Miro-u. Postoji jedan zadatak \u2013 on je me\u0111ucilj. Od njega se razvijaju ili manje ciljeve ili grupe zadataka. Od njih onda nastaju sami zadaci. Svi zadaci se stvaraju i vode na ovoj plo\u010di. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: kako prevladati probleme uz pomo\u0107 XP\" src=\"\/wp-content\/uploads\/2019\/10\/fe601e959f0055de4f7f4c39ae713c31.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOvaj sustav tako\u0111er pru\u017ea povratne informacije, koje se javljaju jednom dnevno, kada se sinkroniziramo na sastancima. Postojanje zajedni\u010dkog plana, koji je strukturiran i potpuno otvoren, omogu\u0107uje svakome da bude u tijeku s onim \u0161to se doga\u0111a i koliko smo napredovali. <\/p>\n<p>Prednosti vizualnog prikaza zadataka:<\/p>\n<ul>\n<li>Uzro\u010dnost. Svaki zadatak vodi ka nekom globalnom cilju. Zadatci su grupirani prema manjim ciljevima. Dominantna infrastruktura sama po sebi prili\u010dno je tehni\u010dka. Nije uvijek odmah jasno kakav konkretan utjecaj na poslovanje ima, na primjer, pisanje priru\u010dnika za migraciju na drugi nginx. Postojanje ciljne kartice pored ovoga \u010dini to jasnijim.<br \/>\n <img decoding=\"async\" alt=\"Infrastructure as Code: kako prevladati probleme uz pomo\u0107 XP\" src=\"\/wp-content\/uploads\/2019\/10\/fc4da9d277f7dc186a5710cf2be4419c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Uzro\u010dnost \u2013 va\u017eno svojstvo zadataka. Ona izravno odgovara na pitanje: 'Radim li to\u010dno to?' <\/li>\n<li>Paralelnost. Nas je devetoro, i fizi\u010dki nije mogu\u0107e napadati jednu zadatak sa svih strana. Zadatka iz iste oblasti tako\u0111er ne mora biti dovoljno. Prisiljeni smo paralelizirati rad izme\u0111u malih radnih grupa. U tom procesu grupe odre\u0111eno vrijeme rade na svom zadatku, a mogu ih oja\u010dati dodatnim \u010dlanovima. Od ove radne grupe ponekad se odvajaju ljudi. Neki idu na odmor, neki pripremaju izlaganje za konferenciju DevOps conf, neki pi\u0161u \u010dlanak za Habr. Va\u017eno je znati koje se ciljeve i zadatke mo\u017ee raditi paralelno. <\/li>\n<\/ul>\n<p>\n<b>2. Smjene voditelja jutarnjih sastanaka.<\/b> Na standupovima se javila ovakva problema - puno zadataka ljudu rade paralelno. Ponekad su zadaci slabo povezani i nema razumijevanja tko \u0161to radi. A mi\u0161ljenje jo\u0161 jednog \u010dlana tima je vrlo va\u017eno. To je dodatna informacija koja mo\u017ee promijeniti tok rje\u0161avanja zadatka. Naravno, obi\u010dno si u paru s nekim, ali savjeti i konzultacije nikad ne \u0161kode. <\/p>\n<p>Kako bismo pobolj\u0161ali ovu situaciju, primijenili smo tehniku \"Rotacija voditelja standupa\". Sada se rotiraju po unaprijed dogovorenom popisu, i to ima svoj u\u010dinak. Kada do\u0111e\u0161 do svoje smjene, prisiljen si se uroniti i razumjeti \u0161to se doga\u0111a, kako bi dobro vodio scrum sastanak. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: kako prevladati probleme uz pomo\u0107 XP\" src=\"\/wp-content\/uploads\/2019\/10\/622973a654ecd3e27a7a366596814ffc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>3. Interna demonstracija.<\/b> Pomo\u0107 u rje\u0161avanju zadataka kroz parno programiranje, vizualizacija na stablu zadataka i pomo\u0107 na scrum sastancima ujutro - to je dobro, ali ne savr\u0161eno. U paru si ograni\u010den samo svojim znanjem. Stablo zadataka poma\u017ee globalno razumjeti tko i \u0161to radi. A voditelj i kolege na jutarnjem sastanku ne ulaze duboko u tvoje probleme. Zasigurno mogu ne\u0161to i propustiti. <\/p>\n<p>Rje\u0161enje je prona\u0111eno u me\u0111usobnom demonstriranju ura\u0111enog i naknadnoj raspravi o tome. Okupljamo se jednom tjedno na sat vremena i pokazujemo detalje rje\u0161enja za zadatke koje smo obavili tijekom proteklog tjedna. <\/p>\n<p>Tijekom demonstracije potrebno je otkriti detalje zadatka i obavezno pokazati njegov rad. <\/p>\n<p><b class=\"spoiler_title\">Izlaganje se mo\u017ee voditi prema kontrolnom popisu.<\/b>1. Uvedite u kontekst. Odakle zadatak dolazi, za\u0161to je to uop\u0107e bilo potrebno?<\/p>\n<p>2. Kako je zadatak rje\u0161avan do sada? Na primjer, bilo je potrebno masovno klikanje mi\u0161em, ili je bilo potpuno nemogu\u0107e ne\u0161to u\u010diniti.<\/p>\n<p>3. Kako to pobolj\u0161avamo. Na primjer: \"Pogledajte, sada imamo skripticu, evo readme-a.\"<\/p>\n<p>4. Prika\u017eite kako to funkcionira. Preporu\u010dljivo je provesti neki scenarij korisnika. \u017delim X, radim Y, vidim Z (ili Y). Na primjer, deployam NGINX, provjeravam url, dobijem 200 OK. Ako je radnja dugotrajna, pripremite u naprijed, kako biste to mogli pokazati. Preporu\u010dljivo je da sat vremena prije demoa ne proradite ako je krhko.<\/p>\n<p>5. Objasnite koliko je dobro rije\u0161eno pitanje, koje su preostale pote\u0161ko\u0107e, \u0161to nije zavr\u0161eno, koja pobolj\u0161anja su mogu\u0107a u budu\u0107nosti. Na primjer, sada je cli, a kasnije \u0107e biti potpuna automatizacija u CI.<\/p>\n<p>Preporu\u010dljivo je da svaki govornik stane u 5-10 minuta. Ako je va\u0161 govor unaprijed va\u017ean i traje du\u017ee, unaprijed se dogovorite o tome u kanalu sre-takeover.<\/p>\n<p>Nakon u\u017eivo dijela obavezno ide rasprava u threadu. Tu se pojavljuje potrebna povratna informacija o svojim zadacima. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: kako prevladati probleme uz pomo\u0107 XP\" src=\"\/wp-content\/uploads\/2019\/10\/77da888d24b52c7eea7e65d2400e152c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNa kraju se provodi anketa za utvr\u0111ivanje korisnosti onoga \u0161to se doga\u0111a. To je ve\u0107 povratna informacija o samom govoru i va\u017enosti zadatka.<\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: kako prevladati probleme uz pomo\u0107 XP\" src=\"\/wp-content\/uploads\/2019\/10\/7642cd87050171cc4a6bf278329dd283.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Dugi zaklju\u010dci i \u0161to dalje<\/h2>\n<p>\nMo\u017ee se \u010diniti da je ton \u010dlanka pomalo pesimisti\u010dan. Nije tako. Dva niska nivoa dobivanja povratne informacije, a to su testovi i parno programiranje, funkcioniraju. Ne tako savr\u0161eno kao u tradicionalnom razvoju, ali postoji pozitivan u\u010dinak od toga. <\/p>\n<p>Testovi, u svom trenutnom obliku, osiguravaju samo djelomi\u010dno pokri\u0107e koda. Mnoge funkcije konfiguracije ostaju netestirane. Njihov utjecaj na neposredan rad prilikom pisanja koda je nizak. Me\u0111utim, u\u010dinak integracijskih testova postoji, i upravo oni omogu\u0107uju nesmetano provo\u0111enje refaktoringa. To je veliki uspjeh. Tako\u0111er, s prebacivanjem fokusa na razvoj na vi\u0161im razinama jezika (kod nas python, go) problem se gubi. A za 'ljepilo' je potrebna puno provjera, to je dovoljno op\u0107e integracije.<\/p>\n<p>Rad u paru vi\u0161e zavisi od konkretnih ljudi. Postoji faktor zadatka i na\u0161e softverske vje\u0161tine. S nekima ide jako dobro, s nekima lo\u0161ije. Korist od toga sigurno postoji. Jasno je da \u010dak i pri nedovoljnog po\u0161tivanja pravila rada u paru, sam \u010din zajedni\u010dkog obavljanja zadataka pozitivno utje\u010de na kvalitetu rezultata. Osobno mi je rad u paru lak\u0161i i ugodniji.<\/p>\n<p>Vi\u0161i na\u010dini utjecaja na OS \u2013 planiranje i rad sa zadacima definitivno donose efekte: kvalitetnu razmjenu znanja i pobolj\u0161anje kvalitete razvoja. <\/p>\n<h4>Kratki sa\u017eeci u jednoj re\u010denici <\/h4>\n<p><\/p>\n<ul>\n<li>XP prakse funkcioniraju u IaC, ali s ni\u017eom u\u010dinkovito\u0161\u0107u.<\/li>\n<li>Ja\u010dajte ono \u0161to funkcionira.<\/li>\n<li>Osmi\u0161ljavajte svoje kompenzacijske 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.5 - 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\/hr\/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.5\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\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\/hr\/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\udd47Infrastruktura kao kod: kako rije\u0161iti probleme uz pomo\u0107 XP | ProHoster","description":"Bok, Habr! Prije sam se \u017ealio na \u017eivot u paradigmi infrastrukture kao koda i nisam predlagao rje\u0161enja za nastalu situaciju.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","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\/hr\/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\/hr\/wp-json\/wp\/v2\/posts\/38747","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=38747"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/38747\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media\/29066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=38747"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=38747"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=38747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}