{"id":34841,"date":"2019-10-31T22:00:43","date_gmt":"2019-10-31T19:00:43","guid":{"rendered":"https:\/\/prohoster.info\/blog\/avtomatizatsiya-zameny-diskov-s-pomoshhyu-ansible\/"},"modified":"2019-10-31T22:00:43","modified_gmt":"2019-10-31T19:00:43","slug":"avtomatizatsiya-zameny-diskov-s-pomoshhyu-ansible","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/avtomatizatsiya-zameny-diskov-s-pomoshhyu-ansible","title":{"rendered":"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/c60a2326ab13e7766eafda3ae5ac39c5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nP\u00ebrsh\u00ebndetje t\u00eb gjith\u00ebve. Un\u00eb punoj si administrator sistemesh n\u00eb OK dhe jam p\u00ebrgjegj\u00ebs p\u00ebr funksionimin e q\u00ebndruesh\u00ebm t\u00eb portalit. Dua t\u00eb flas p\u00ebr m\u00ebnyr\u00ebn si e nd\u00ebrtuam procesin e automatizuar t\u00eb z\u00ebvend\u00ebsimit t\u00eb disqeve, dhe pastaj si e p\u00ebrjashtuam administratorin nga ky proces dhe e z\u00ebvend\u00ebsuam at\u00eb me nj\u00eb bot.<\/p>\n<p>Ky artikull \u00ebsht\u00eb nj\u00eb lloj transliterimi <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=5WhbG3FQveE&amp;list=FLKN7KW1sxju7fWJvKuyKxEQ\">the presentation<\/a><\/noindex> n\u00eb HighLoad+ 2018<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Nd\u00ebrtimi i procesit t\u00eb z\u00ebvend\u00ebsimit t\u00eb disqeve<\/h2>\n<p><\/p>\n<h3>S\u00eb pari disa numra<\/h3>\n<p>\nOK \u00ebsht\u00eb nj\u00eb sh\u00ebrbim gjigant q\u00eb p\u00ebrdoret nga miliona njer\u00ebz. Ajo sh\u00ebrbehet nga rreth 7,000 servera, t\u00eb cil\u00ebt ndodhen n\u00eb 4 data center t\u00eb ndrysh\u00ebm. N\u00eb servera ka m\u00eb shum\u00eb se 70,000 disqe. N\u00ebse i vendosim nj\u00ebri mbi tjetrin, do t\u00eb kemi nj\u00eb kull\u00eb me lart\u00ebsi m\u00eb shum\u00eb se 1 km. <\/p>\n<p>Disqet e forta jan\u00eb komponenti i serverit q\u00eb d\u00ebshtojn\u00eb m\u00eb shpesh. Me k\u00ebto volume, na duhet t\u00eb z\u00ebvend\u00ebsojm\u00eb rreth 30 disqe n\u00eb jav\u00eb, dhe kjo procedur\u00eb \u00ebsht\u00eb b\u00ebr\u00eb nj\u00eb rutin\u00eb q\u00eb nuk \u00ebsht\u00eb shum\u00eb e k\u00ebndshme.<\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/5e915e9077994efcc4e74a26fc6286fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Incidente<\/h3>\n<p>\nN\u00eb kompanin\u00eb ton\u00eb kemi nj\u00eb menaxhim t\u00eb plot\u00eb t\u00eb incidenteve. \u00c7do incident e regjistrojm\u00eb n\u00eb Jira, dhe pastaj e zgjidhim dhe e shqyrtojm\u00eb. N\u00ebse incidenti kishte nj\u00eb efekt p\u00ebr p\u00ebrdoruesit, ne domosdoshm\u00ebrish mblidhemi dhe mendojm\u00eb se si t\u00eb reagojm\u00eb m\u00eb shpejt n\u00eb raste t\u00eb tilla, si t\u00eb ulin efektin dhe sigurisht si t\u00eb parandalojm\u00eb p\u00ebrs\u00ebritjen.<\/p>\n<p>K\u00ebto disqe nuk jan\u00eb p\u00ebrjashtim. Shtypjet e tyre monitorohen nga Zabbix. Ne monitorojm\u00eb mesazhet n\u00eb Syslog p\u00ebr gabime n\u00eb shkrim\/lexim, analizojm\u00eb gjendjen e HW\/SW-raid, dhe mbajm\u00eb n\u00ebn kontroll SMART-in, p\u00ebr SSD llogarisim konsumimin. <\/p>\n<h3>Si ishin disqet m\u00eb par\u00eb<\/h3>\n<p>\nKur n\u00eb Zabbix aktivizohet ndonj\u00eb tregues, ndodhet nj\u00eb incident n\u00eb Jira dhe automatikisht i caktohet inxhinier\u00ebve t\u00eb p\u00ebrshtatsh\u00ebm n\u00eb data center. Ne e b\u00ebjm\u00eb k\u00ebt\u00eb p\u00ebr t\u00eb gjitha incidentet HW, q\u00eb do t\u00eb thot\u00eb ato q\u00eb k\u00ebrkojn\u00eb ndonj\u00eb pun\u00eb fizike me pajisjet n\u00eb data center. <br \/>\nInxhinieri i data centerit \u00ebsht\u00eb ajo q\u00eb zgjidh problemet e lidhura me harduerin, \u00ebsht\u00eb p\u00ebrgjegj\u00ebs p\u00ebr instalimin, mir\u00ebmbajtjen dhe heqjen e serverave. Pasi t\u00eb marr\u00eb bilet\u00ebn, inxhinieri fillon pun\u00ebn. N\u00eb raftet e disqeve ai i z\u00ebvend\u00ebson disqet vet\u00eb. Por n\u00ebse nuk ka akses te pajisja e nevojshme, inxhinieri k\u00ebrkon ndihm\u00eb nga administrator\u00ebt e sistemit t\u00eb sh\u00ebrbimit. S\u00eb pari, duhet t\u00eb p\u00ebrjashtohet disku nga rotacioni. P\u00ebr k\u00ebt\u00eb, nevojiten ndryshimet e nevojshme n\u00eb server, t\u00eb ndalen aplikacionet, dhe t\u00eb shk\u00ebputet disku.<\/p>\n<p>Administrator i sistemit mund t\u00eb mbaj\u00eb k\u00ebt\u00eb portal gjat\u00eb orarit t\u00eb pun\u00ebs. Ai heton incidentet, merret me riparimin dhe ndihmon zhvilluesit t\u00eb p\u00ebrfundojn\u00eb detyra t\u00eb vogla. Ai nuk merret vet\u00ebm me disqet e forta.<\/p>\n<p>M\u00eb par\u00eb, inxhinier\u00ebt e qendr\u00ebs s\u00eb t\u00eb dh\u00ebnave komunikonin me administratorin e sistemit n\u00eb biseda. Inxhinier\u00ebt d\u00ebrgonin lidhje t\u00eb biletimeve n\u00eb Jira, dhe administratori i shihte ato, duke mbajtur nj\u00eb log t\u00eb pun\u00ebve n\u00eb nj\u00eb sh\u00ebnim. Por p\u00ebr detyra t\u00eb tilla bisedat ishin t\u00eb pak\u00ebndshme: informacioni aty nuk ishte i strukturuar dhe humbte shpejt. P\u00ebr m\u00eb tep\u00ebr, administrator mund t\u00eb kishte shk\u00ebputur pun\u00ebn p\u00ebr nj\u00eb koh\u00eb dhe t\u00eb mos p\u00ebrgjigjej, nd\u00ebrsa inxhinieri priste p\u00ebrpara serverit me nj\u00eb grumbull disqesh.<\/p>\n<p>Por ajo q\u00eb ishte m\u00eb e keqja ishte se administrator\u00ebt nuk e shihnin panoram\u00ebn e plot\u00eb: \u00e7far\u00eb incidenteve ekzistojn\u00eb me disqet dhe ku mund t\u00eb shfaqeshin probleme. Kjo ndodhte sepse ne i jepnim t\u00eb gjitha incidente HW inxhinier\u00ebve. Po, ishte e mundur t\u00eb shfaqeshin t\u00eb gjitha incidentet n\u00eb panelin e administratorit. Por ato ishin shum\u00eb, dhe administrator\u00ebt angazhoheshin vet\u00ebm p\u00ebr disa prej tyre.<\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, inxhinieri nuk mund t\u00eb rendiste sakt\u00eb prioritete, sepse ai nuk dinte asgj\u00eb p\u00ebr q\u00ebllimin e server\u00ebve t\u00eb ve\u00e7ant\u00eb, p\u00ebr renditjen e informacionit n\u00eb drives.<\/p>\n<h3>Procedura e re e z\u00ebvend\u00ebsimit<\/h3>\n<p>\nE para q\u00eb b\u00ebm\u00eb ishte t\u00eb nxirrnim t\u00eb gjitha incidentet e disqeve n\u00eb nj\u00eb lloj t\u00eb ve\u00e7ant\u00eb \"HW-disk\" dhe t\u00eb shtonim fushat \"emri i pajisjes bllokuese\", \"m\u00ebnyra\" dhe \"tipi i disqit\", n\u00eb m\u00ebnyr\u00eb q\u00eb kjo informacion t\u00eb ruhej n\u00eb bilet\u00eb dhe t\u00eb mos ishte e nevojshme ta ndanim vazhdimisht n\u00eb biseda. <\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/c4526bf668e31d90e0fbd061de44f1a7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nGjithashtu, u dakorduam q\u00eb brenda nj\u00eb incidenti do t\u00eb z\u00ebvend\u00ebsonim vet\u00ebm nj\u00eb disk. Kjo e thjeshtoi ndjesh\u00ebm m\u00eb pas procesin e automatizimit, mbledhjen e statistikave dhe pun\u00ebn. <\/p>\n<p>P\u00ebrve\u00e7 k\u00ebsaj, kemi shtuar fush\u00ebn \"administrator p\u00ebrgjegj\u00ebs\". Aty vendoset automatikisht administratori i detyr\u00ebs. Kjo \u00ebsht\u00eb shum\u00eb e dobishme, sepse tani inxhinieri gjithmon\u00eb e sheh kush \u00ebsht\u00eb p\u00ebrgjegj\u00ebs. Nuk \u00ebsht\u00eb e nevojshme t\u00eb shikosh n\u00eb kalendar dhe t\u00eb k\u00ebrkosh. Ky fush\u00eb sakt\u00ebsisht lejoj q\u00eb t\u00eb renditen n\u00eb panelin e administratorit biletat, p\u00ebr t\u00eb cilat ndoshta do t\u00eb nevojitet ndihma e tij.<\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/5097e5dcca1fddd68d1e5f296c09f60a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nP\u00ebr t\u00eb siguruar q\u00eb t\u00eb gjith\u00eb pjes\u00ebmarr\u00ebsit t\u00eb p\u00ebrfitojn\u00eb sa m\u00eb shum\u00eb nga ndryshimet, ne krijuam filtrat dhe panelin e kontrollit, duke i informuar ata p\u00ebr to. Kur njer\u00ebzit kuptojn\u00eb ndryshimet, ata nuk distancohen nga to si nga di\u00e7ka t\u00eb panevojshme. \u00cbsht\u00eb e r\u00ebnd\u00ebsishme p\u00ebr inxhinier\u00ebt t\u00eb din\u00eb numrin e raftit ku ndodhet serveri, madh\u00ebsin\u00eb dhe llojin e disku. P\u00ebr administratorin, fillimisht, \u00ebsht\u00eb e r\u00ebnd\u00ebsishme t\u00eb kuptoj\u00eb se \u00e7far\u00eb grupi server\u00ebsh po trajtohet dhe \u00e7far\u00eb efekti mund t\u00eb ket\u00eb z\u00ebvend\u00ebsimi i diskut.<\/p>\n<p>Prania e fushave dhe shfaqja e tyre \u00ebsht\u00eb e k\u00ebndshme, por nuk na ka shp\u00ebtuar nga nevoja p\u00ebr t\u00eb p\u00ebrdorur biseda. P\u00ebr k\u00ebt\u00eb, duhej t\u00eb ndryshonim procesin e pun\u00ebs. <\/p>\n<p>M\u00eb par\u00eb, ai ishte k\u00ebshtu:<\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/2b79cdb7ec88b5ae3d2917ad8b164c6d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSot inxhinier\u00ebt punojn\u00eb k\u00ebshtu kur nuk k\u00ebrkojn\u00eb ndihm\u00ebn e administratorit.<\/p>\n<p>E para q\u00eb b\u00ebm\u00eb ishte t\u00eb regjistronim statusin e ri <b>Investigate<\/b>. Ky status \u00ebsht\u00eb p\u00ebrb\u00ebr\u00ebzohet kur inxhinieri ende nuk e ka vendosur n\u00ebse do t\u00eb ket\u00eb nevoj\u00eb p\u00ebr administratorin apo jo. P\u00ebrmes k\u00ebtij statusi, inxhinieri mund t'i kaloj\u00eb tiket\u00ebn administratorit. P\u00ebr m\u00eb tep\u00ebr, me k\u00ebt\u00eb status ne e etiketojm\u00eb tiket\u00ebn kur k\u00ebrkohet z\u00ebvend\u00ebsimi i diskut, por disku i k\u00ebrkuar nuk \u00ebsht\u00eb n\u00eb vend. Kjo ndodh n\u00eb rastet e CDN dhe vendeve t\u00eb larg\u00ebta.<\/p>\n<p>Gjithashtu, ne shtuam statusin <b>Gati<\/b>. Tiketa kalon n\u00eb k\u00ebt\u00eb status pas z\u00ebvend\u00ebsimit t\u00eb diskut. Kjo do t\u00eb thot\u00eb se gjith\u00e7ka \u00ebsht\u00eb b\u00ebr\u00eb, por n\u00eb server po sinkronizohet HW\/SW RAID. Kjo mund t\u00eb zgjas\u00eb mjaft koh\u00eb.<\/p>\n<p>N\u00ebse administrator\u00ebt angazhohen n\u00eb pun\u00eb, skema paksa komplikohet.<\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/5b6aacbb0d4049e62e7cb9ee28eb6498.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNga statusi <b>Hapur<\/b> tiketa mund t\u00eb kaloj\u00eb si nga administratori sistemit ashtu edhe nga inxhinieri. N\u00eb statusin <b>In progress<\/b> administratori e nxjerr diskun nga rotacioni, n\u00eb m\u00ebnyr\u00eb q\u00eb inxhinieri ta nxjerr\u00eb thjesht: aktivizon ndri\u00e7imin, e \u00e7monton diskun, ndalon aplikacionet, n\u00eb var\u00ebsi t\u00eb grupit t\u00eb caktuar t\u00eb server\u00ebve.<\/p>\n<p>Pastaj, tiket\u00ebn e kalojm\u00eb n\u00eb <b>Ready to change<\/b>: ky \u00ebsht\u00eb nj\u00eb sinjal p\u00ebr inxhinierin se disku mund t\u00eb nxirret. T\u00eb gjitha fushat n\u00eb Jira jan\u00eb plot\u00ebsuar tashm\u00eb, inxhinieri e di se \u00e7far\u00eb lloji dhe madh\u00ebsie disku \u00ebsht\u00eb. K\u00ebto t\u00eb dh\u00ebna vendosen ose automatikisht n\u00eb statusin e m\u00ebparsh\u00ebm ose nga administratori.<\/p>\n<p>Pas z\u00ebvend\u00ebsimit t\u00eb diskut, tiketa kalon n\u00eb statusin <b>Changed<\/b>. Kontrollohet q\u00eb disku i duhur \u00ebsht\u00eb vendosur, b\u00ebhet formatimi, aktivizohet aplikacioni dhe disa detyra p\u00ebr rikuperimin e t\u00eb dh\u00ebnave. Gjithashtu, tiketa mund t\u00eb kaloj\u00eb n\u00eb statusin <b>Gati<\/b>, n\u00eb k\u00ebt\u00eb rast p\u00ebrgjegj\u00ebs do t\u00eb mbetet administratori, sepse ai e kishte futur diskun n\u00eb rotacion. Schemi i plot\u00eb duket k\u00ebshtu.<\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/32f8d488e2ff6a28a3341114b66de0a3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nShtimi i fushave t\u00eb reja na ka leht\u00ebsuar ndjesh\u00ebm jet\u00ebn. Djemt\u00eb filluan t\u00eb punojn\u00eb me informacion t\u00eb strukturuar, dhe tani \u00ebsht\u00eb e qart\u00eb se \u00e7far\u00eb duhet b\u00ebr\u00eb dhe n\u00eb cil\u00ebn faz\u00eb. Prioritetet tani jan\u00eb shum\u00eb m\u00eb relevante, pasi tani ato caktohen nga administrator\u00ebt.<\/p>\n<p>Nuk ka m\u00eb nevoj\u00eb p\u00ebr biseda. Sigurisht, administratori mund t'i shkruaj\u00eb inxhinierit 'k\u00ebt\u00eb duhet ta z\u00ebvend\u00ebsosh m\u00eb shpejt', ose '\u00ebsht\u00eb mbr\u00ebmje, do t\u00eb arrish t\u00eb z\u00ebvend\u00ebsosh?'. Por tashm\u00eb nuk komunikojm\u00eb \u00e7do dit\u00eb n\u00eb biseda rreth k\u00ebtyre \u00e7\u00ebshtjeve.<\/p>\n<p>Disk\u00ebt tani nd\u00ebrrohen me grupime. N\u00ebse administratori vjen pak m\u00eb her\u00ebt n\u00eb pun\u00eb, ka koh\u00eb t\u00eb lir\u00eb dhe asgj\u00eb nuk ka ndodhur, ai mund t\u00eb p\u00ebrgatit\u00eb disa server\u00eb p\u00ebr z\u00ebvend\u00ebsim: t\u00eb caktoj\u00eb fushat, t\u00eb nxjerr\u00eb disk\u00ebt nga rotacioni dhe t'ia kaloj\u00eb detyr\u00ebn inxhinierit. Inxhinieri vjen pak m\u00eb von\u00eb n\u00eb qendr\u00ebn e t\u00eb dh\u00ebnave, sheh detyr\u00ebn, merr nga depo disk\u00ebt e nevojsh\u00ebm dhe menj\u00ebher\u00eb i nd\u00ebrron. Si rezultat, shpejt\u00ebsia e nd\u00ebrrimit \u00ebsht\u00eb rritur.<\/p>\n<h3>Eksperienca e nxjerr\u00eb nga nd\u00ebrtimi i Workflow.<\/h3>\n<p><\/p>\n<ul>\n<li><b>Kur nd\u00ebrtoni procedur\u00ebn, duhet t\u00eb mbledhni informacion nga burime t\u00eb ndryshme.<\/b><br \/>\nDisa nga administratoret tan\u00eb nuk e dinin se inxhinieri nd\u00ebrron disk\u00ebt vet\u00eb. Disa mendonin se inxhinier\u00ebt mbik\u00ebqyrin sinkronizimin e MD RAID, p\u00ebrderisa disa prej tyre as nuk kishin akses p\u00ebr k\u00ebt\u00eb. Disa inxhinier\u00eb kryesor\u00eb e b\u00ebnin k\u00ebt\u00eb, por jo gjithmon\u00eb, sepse procesi nuk ishte i p\u00ebrshkruar asnj\u00ebher\u00eb.<\/li>\n<li><b>Procedura duhet t\u00eb jet\u00eb e thjesht\u00eb dhe e kuptueshme.<\/b><br \/>\nNjer\u00ebzit e kan\u00eb t\u00eb v\u00ebshtir\u00eb t\u00eb mbajn\u00eb n\u00eb mend shum\u00eb hapa. Statuset m\u00eb t\u00eb r\u00ebnd\u00ebsishme ngjitur n\u00eb Jira duhet t\u00eb shfaqen n\u00eb ekranin kryesor. Mund t'i rind\u00ebrtoni, p\u00ebr shembull, 'In progress' ne e quajm\u00eb 'Ready to change'. Statuset e tjera mund t\u00eb fshihen n\u00eb nj\u00eb menu r\u00ebn\u00ebs, p\u00ebr t\u00eb mos irrituar syt\u00eb. Por m\u00eb mir\u00eb \u00ebsht\u00eb t\u00eb mos i kufizoni njer\u00ebzit, t'u jepni mund\u00ebsin\u00eb p\u00ebr t\u00eb b\u00ebr\u00eb kalime.<br \/>\nShpjegoni vler\u00ebn e novacioneve. Kur njer\u00ebzit kuptojn\u00eb, ata e pranojn\u00eb m\u00eb mir\u00eb procedur\u00ebn e re. P\u00ebr ne ishte shum\u00eb e r\u00ebnd\u00ebsishme q\u00eb njer\u00ebzit t\u00eb mos klikojn\u00eb vazhdimisht n\u00eb t\u00eb gjith\u00eb procesin, por t\u00eb ecin p\u00ebrmes tij. M\u00eb pas nd\u00ebrtuam automatizimin mbi k\u00ebt\u00eb.<\/li>\n<li><b>Prit, analiza, kuptim.<\/b><br \/>\nNa nevojit\u00ebm rreth nj\u00eb muaji p\u00ebr t\u00eb nd\u00ebrtuar procedur\u00ebn, realizimin teknik, takimet dhe diskutimet. Nd\u00ebrsa p\u00ebr implementimin \u2014 m\u00eb shum\u00eb se tri muaj. Kam par\u00eb se si njer\u00ebzit fillojn\u00eb ngadal\u00eb t\u00eb p\u00ebrdorin novacionin. N\u00eb fazat e para kishte shum\u00eb negativitet. Por ai ishte krejt\u00ebsisht i pavend n\u00eb lidhje me procedur\u00ebn vet\u00eb dhe realizimin e saj teknik. P\u00ebr shembull, nj\u00eb administrator p\u00ebrdorte jo Jira, por nj\u00eb plugin t\u00eb Jira n\u00eb Confluence, dhe disa gj\u00ebra nuk ishin t\u00eb arritshme p\u00ebr t\u00eb. I treguam Jira-n, produktiviteti i administratorit u rrit si n\u00eb detyrat e p\u00ebrgjithshme ashtu edhe n\u00eb z\u00ebvend\u00ebsimin e disqeve.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Automatizimi i z\u00ebvend\u00ebsimit t\u00eb disqeve<\/h2>\n<p>\nNe iu afruam disa her\u00eb automatizimit t\u00eb z\u00ebvend\u00ebsimit t\u00eb disqeve. Kishim tashm\u00eb disa p\u00ebrgatitje, skenar\u00eb, por t\u00eb gjitha ato punonin ose n\u00eb nj\u00eb m\u00ebnyr\u00eb interaktive ose manuale, duke k\u00ebrkuar aktivizimin. Dhe vet\u00ebm pas implementimit t\u00eb procedur\u00ebs s\u00eb re kuptuam se sakt\u00ebsisht ajo na kishte munguar.<\/p>\n<p>Tani q\u00eb procesi i z\u00ebvend\u00ebsimit \u00ebsht\u00eb ndar\u00eb n\u00eb etapa, me secil\u00ebn etap\u00eb q\u00eb ka nj\u00eb p\u00ebrfaq\u00ebsues t\u00eb caktuar dhe nj\u00eb list\u00eb veprimesh, mund t\u00eb p\u00ebrfshijm\u00eb automatizimin gradualisht, e jo menj\u00ebher\u00eb n\u00eb t\u00ebr\u00ebsi. P\u00ebr shembull, etapa m\u00eb e thjesht\u00eb \u2014 Ready (kontrolli i sinkronizimit t\u00eb RAID\/ t\u00eb dh\u00ebnave) mund t\u00eb delegohet leht\u00ebsisht te boti. Kur boti t\u00eb m\u00ebsoj\u00eb pak, mund t'i jepet nj\u00eb detyr\u00eb m\u00eb p\u00ebrgjegj\u00ebse \u2014 futja e disqeve n\u00eb rotacion etj.<\/p>\n<h3>Zoologjia e konfigurimeve<\/h3>\n<p>\nPara se t\u00eb flasim p\u00ebr botin, le t\u00eb b\u00ebjm\u00eb nj\u00eb ekskursion t\u00eb vog\u00ebl n\u00eb zoologjin\u00eb ton\u00eb t\u00eb instalimeve. S\u00eb pari, kjo \u00ebsht\u00eb e lidhur me p\u00ebrmasat gjigande t\u00eb infrastruktur\u00ebs ton\u00eb. S\u00eb dyti, p\u00ebr \u00e7do sh\u00ebrbim ne p\u00ebrpiqemi t\u00eb zgjedhim konfigurimin optimal t\u00eb harduerit. Kemi rreth 20 modele t\u00eb RAID-it harduerik, kryesisht LSI dhe Adaptec, por hasen edhe HP dhe DELL me versione t\u00eb ndryshme. \u00c7do kontrollor RAID ka utilitarin e tij t\u00eb menaxhimit. Grupi i komandave dhe rezultati nga ato mund t\u00eb ndryshojn\u00eb nga versioni n\u00eb version p\u00ebr \u00e7do kontrollor RAID. Atje ku nuk p\u00ebrdoren RAID-harduerike, mund t\u00eb p\u00ebrdoret mdraid.<\/p>\n<p>Gati t\u00eb gjitha instalimet e reja i b\u00ebjm\u00eb pa rezervimin e disqeve. Ne p\u00ebrpiqemi t\u00eb shmangim p\u00ebrdorimin e RAID-it harduerik dhe softuerik, pasi rezervojm\u00eb sistemet tona n\u00eb nivelin e qendrave t\u00eb t\u00eb dh\u00ebnave dhe jo n\u00eb ato t\u00eb server\u00ebve. Por natyrisht, ka shum\u00eb server\u00eb legjacy q\u00eb duhet t\u00eb mbahen.<\/p>\n<p>N\u00eb disa raste, disqet n\u00eb kontrollor\u00ebt RAID kalojn\u00eb si pajisje raw, ndonj\u00ebher\u00eb p\u00ebrdoren JBOD. Ka konfiguracione me nj\u00eb disk sistemik n\u00eb server, dhe n\u00ebse ai duhet t\u00eb z\u00ebvend\u00ebsohet, nevojitet riciklimi i serverit me instalimin e sistemit operativ dhe aplikacioneve, duke p\u00ebrdorur versionet e nj\u00ebjta, pastaj shtohen skedar\u00ebt e konfigurimit dhe aplikacionet lan\u00e7ohet. Ka gjithashtu shum\u00eb grupe server\u00ebsh, ku rezervimi b\u00ebhet jo n\u00eb nivelin e sistemit t\u00eb disk\u00ebve, por direkt n\u00eb aplikacionet vet\u00eb.<\/p>\n<p>N\u00eb total, ne kemi mbi 400 grupe unike server\u00ebsh, n\u00eb t\u00eb cil\u00ebt punojn\u00eb rreth 100 aplikacione t\u00eb ndryshme. P\u00ebr t\u00eb p\u00ebrballuar nj\u00eb num\u00ebr kaq t\u00eb madh variantesh, na duhej nj\u00eb mjet shum\u00ebfunksional automatizimi. Preferuesh\u00ebm me nj\u00eb DSL t\u00eb thjesht\u00eb, n\u00eb m\u00ebnyr\u00eb q\u00eb ta mb\u00ebshtes\u00eb jo vet\u00ebm ai q\u00eb e shkruajti.<\/p>\n<p>Ne zgjodh\u00ebm Ansible, sepse ai \u00ebsht\u00eb pa agjent: nuk ishte e nevojshme t\u00eb p\u00ebrgatitemi infrastruktura, fillim i shpejt\u00eb. P\u00ebr m\u00eb tep\u00ebr, ai \u00ebsht\u00eb shkruar n\u00eb Python, i cili \u00ebsht\u00eb pranuar si standart n\u00eb ekip.<\/p>\n<h3>Skema e p\u00ebrgjithshme<\/h3>\n<p>\nLe t\u00eb shqyrtojm\u00eb skem\u00ebn e p\u00ebrgjithshme t\u00eb automatizimit p\u00ebrmes nj\u00eb incidenti. Zabbix detekton se disku sdb ka d\u00ebshtuar, ndizet nj\u00eb trigger, krijohet nj\u00eb tiket n\u00eb Jira. Administratori e shqyrton at\u00eb, e kupton se nuk \u00ebsht\u00eb nj\u00eb dublikat\u00eb dhe as nj\u00eb false positive, q\u00eb do t\u00eb thot\u00eb se disku duhet t\u00eb z\u00ebvend\u00ebsohet, dhe e kalon tiket\u00ebn n\u00eb In progress.<\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/673df0fe9600bc65633841222f436d37.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nAplikacioni DiskoBot, i shkruar n\u00eb Python, pyet periodikisht Jira p\u00ebr tiket t\u00eb reja. Ai v\u00ebren se ka nj\u00eb tiket t\u00eb re In progress, aktivizohet thread-i p\u00ebrkat\u00ebs, i cili nis playbook-un n\u00eb Ansible (kjo b\u00ebhet p\u00ebr \u00e7do status n\u00eb Jira). N\u00eb k\u00ebt\u00eb rast aktivizohet Prepare2change.<\/p>\n<p>Ansible d\u00ebrgohet n\u00eb host, e nxjerr disku nga rotacioni dhe raporton statusin aplikacionit p\u00ebrmes Callbacks. <\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/8bfc13129f8deca640eb63ea81f616c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nP\u00ebrmes rezultateve, boti automatikisht e kalon tiket\u00ebn n\u00eb Ready to change. Inxhinieri merr nj\u00eb njoftim dhe shkon t\u00eb ndryshoj\u00eb disku, pas s\u00eb cil\u00ebs e kalon tiket\u00ebn n\u00eb Changed. <\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/eeda06b6966f435e2172d3f9c61b341e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSipas skem\u00ebs s\u00eb p\u00ebrshkruar m\u00eb lart, tiket\u00eb kthehet p\u00ebrs\u00ebri te boti, ai aktivizon nj\u00eb playbook tjet\u00ebr, shkon n\u00eb host dhe e fut disku n\u00eb rotacion. Boti e mbyll tiket\u00ebn. Hurra!<\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/51b8c7050b0c10c16ad6a6d4974c3ebf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTani le t\u00eb flasim p\u00ebr disa p\u00ebrb\u00ebr\u00ebs t\u00eb sistemit.<\/p>\n<h3>Diskobot<\/h3>\n<p>\nKy aplikacion \u00ebsht\u00eb shkruar n\u00eb Python. Ai zgjedh tiket\u00ebt nga Jira sipas JQL. N\u00eb var\u00ebsi t\u00eb statusit t\u00eb tiket\u00ebs, ajo kalon te procesori p\u00ebrkat\u00ebs, i cili nga ana e tij nis playbook-un Ansible n\u00eb p\u00ebrputhje me statusin.<\/p>\n<p>JQL dhe intervalet e sondazhit jan\u00eb p\u00ebrcaktuar n\u00eb skedarin e konfigurimit t\u00eb aplikacionit.<\/p>\n<pre><code class=\"plaintext\">jira_states:\n  investigate:\n    jql: '\u2026 status = Open dhe \"Disk Size\" \u00ebsht\u00eb EMPTY'\n    interval: 180\n\n  inprogress:\n    jql: '\u2026  dhe \"Disk Size\" nuk \u00ebsht\u00eb EMPTY dhe \"Device Name\" nuk \u00ebsht\u00eb EMPTY'\n \n  ready:\n    jql: '\u2026 dhe (labels not in (\"dbot_ignore\") ose labels \u00ebsht\u00eb EMPTY)'\n    interval: 7200\n<\/code><\/pre>\n<p>\nP\u00ebr shembull, nd\u00ebr tiket e statusit In progress, zgjidhen vet\u00ebm ato t\u00eb cilat kan\u00eb t\u00eb mbushura fushat Disk size dhe Device name. Device name \u00ebsht\u00eb emri i pajisjes bllokuese q\u00eb nevojitet p\u00ebr t\u00eb realizuar playbook-in. Disk size \u00ebsht\u00eb i nevojsh\u00ebm q\u00eb inxhinieri t\u00eb dij\u00eb se sa i madh \u00ebsht\u00eb disku i nevojsh\u00ebm.<\/p>\n<p>Nd\u00ebrsa p\u00ebr tiket me statusin Ready, filtrohen tiket me etiket\u00ebn dbot_ignore. Vlen t\u00eb theksohet se etiketat Jira i p\u00ebrdorim si p\u00ebr filtrime t\u00eb tilla, ashtu edhe p\u00ebr t\u00eb sh\u00ebnuar dublikacionet e tiket-ve dhe p\u00ebr t\u00eb mbledhur statistika.<\/p>\n<p>N\u00eb rast t\u00eb d\u00ebshtimit t\u00eb playbook-it, Jira i jep etiket\u00ebn dbot_failed, p\u00ebr t\u00eb mund\u00ebsuar zgjidhjen e m\u00ebvonshme. <\/p>\n<h3>Interaksioni me Ansible<\/h3>\n<p>\nAplikacioni nd\u00ebrvepron me Ansible p\u00ebrmes <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/dev_guide\/developing_api.html\">Ansible Python API<\/a><\/noindex>. N\u00eb playbook_executor ne transferojm\u00eb emrin e skedarit dhe nj\u00eb grup variablash. Kjo lejon q\u00eb projekti Ansible t\u00eb ruhet si skedar\u00eb t\u00eb zakonsh\u00ebm yml, dhe jo t\u00eb p\u00ebrshkruhet n\u00eb kodin Python. <\/p>\n<p>Po ashtu n\u00eb Ansible p\u00ebrmes *extra_vars* transferohen emri i pajisjes bllokuese, statusi i tiket-it, si dhe callback_url, i cili p\u00ebrmban \u00e7el\u00ebsin e \u00e7\u00ebshtjes \u2014 ai p\u00ebrdoret p\u00ebr callback n\u00eb HTTP.<\/p>\n<p>P\u00ebr \u00e7do ekzekutim gjenerohet nj\u00eb inventory p\u00ebrkohsh\u00ebm, q\u00eb p\u00ebrb\u00ebhet nga nj\u00eb host dhe nj\u00eb grup, n\u00eb t\u00eb cilin b\u00ebn pjes\u00eb ky host, q\u00eb t\u00eb zbatohen group_vars.<\/p>\n<p>Ja nj\u00eb shembull i nj\u00eb detyre, n\u00eb t\u00eb cil\u00ebn \u00ebsht\u00eb realizuar HTTP callback.<\/p>\n<p>Ne marrim rezultatin e ekzekutimeve t\u00eb playbook-eve p\u00ebrmes callback(-eve). Ato jan\u00eb t\u00eb dy llojeve:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/plugins\/callback.html\">Ansible callback plugin<\/a><\/noindex>, ai ofron t\u00eb dh\u00ebna mbi rezultatet e ekzekutimit t\u00eb playbook-it. Atje p\u00ebrshkruhen detyrat q\u00eb jan\u00eb nisur, t\u00eb realizuara me sukses ose jo. Ky callback thirret pas p\u00ebrfundimit t\u00eb ekzekutimit t\u00eb playbook-it.<\/li>\n<li>HTTP callback p\u00ebr t\u00eb marr\u00eb informacion gjat\u00eb ekzekutimit t\u00eb playbook-it. N\u00eb detyr\u00ebn Ansible realizojm\u00eb nj\u00eb k\u00ebrkes\u00eb POST\/GED n\u00eb drejtim t\u00eb aplikacionit ton\u00eb.<\/li>\n<\/ul>\n<p>\nP\u00ebrmes HTTP callback(-eve) transferohen variablat, t\u00eb cilat jan\u00eb p\u00ebrcaktuar gjat\u00eb ekzekutimit t\u00eb playbook-it dhe q\u00eb d\u00ebshirojm\u00eb t'i ruajm\u00eb dhe p\u00ebrdorim n\u00eb ekzekutimet e ardhshme. K\u00ebto t\u00eb dh\u00ebna i shkruajm\u00eb n\u00eb sqlite.<\/p>\n<p>Po ashtu p\u00ebrmes HTTP callback ne l\u00ebm\u00eb komente dhe ndryshojm\u00eb statusin e tiket-it.<\/p>\n<p><b class=\"spoiler_title\">HTTP callback<\/b><\/p>\n<pre><code class=\"plaintext\"># Make callback to Diskobot App\n# Variables:\n#    callback_post_body: # A dict with follow keys. All keys are optional\n#       msg: If exist it would be posted to Jira as comment\n#       data: If exist it would be saved in Incident.variables\n#       desire_state: Set desire_state for incident\n#       status: If exist Proceed issue to that status\n\n  - name: Callback to Diskobot app (jira comment\/status)\n    uri:\n      url: \"{{ callback_url }}\/{{ devname }}\"\n      user: \"{{ diskobot_user }}\"\n      password: \"{{ diskobot_pass }}\"\n      force_basic_auth: True\n      method: POST\n      body: \"{{ callback_post_body | to_json }}\"\n      body_format: json\n    delegate_to: 127.0.0.1\n<\/code><\/pre>\n<p>Si dhe shum\u00eb detyra t\u00eb ngjashme, ne e kemi ndar\u00eb at\u00eb n\u00eb nj\u00eb skedar t\u00eb zakonsh\u00ebm dhe e p\u00ebrfshijm\u00eb kur \u00ebsht\u00eb e nevojshme, n\u00eb m\u00ebnyr\u00eb q\u00eb t\u00eb mos e p\u00ebrs\u00ebrisim vazhdimisht n\u00eb playbook. K\u00ebtu figuron callback_url, n\u00eb t\u00eb cilin jan\u00eb t\u00eb koduara \u00e7el\u00ebsi i \u00e7\u00ebshtjes dhe emri i hostit. Kur Ansible ekzekuton k\u00ebt\u00eb POST k\u00ebrkes\u00eb, boti kupton se ka ardhur n\u00eb kuad\u00ebr t\u00eb nj\u00eb incidenti t\u00eb caktuar.<\/p>\n<p>Ja nj\u00eb shembull nga playbook, n\u00eb t\u00eb cilin ne nxorr\u00ebm diskun nga pajisja MD:<\/p>\n<pre><code class=\"plaintext\">  # Save mdadm configuration\n  - include: common\/callback.yml\n    vars:\n      callback_post_body:\n        status: 'Ready to change'\n        msg: \"Removed disk from mdraid {{ mdadm_remove_disk.msg | comment_jira }}\"\n        data:\n          mdadm_data: \"{{ mdadm_remove_disk.removed }}\"\n          parted_info: \"{{ parted_info | default() }}\"\n    when:\n      - mdadm_remove_disk | changed\n      - mdadm_remove_disk.removed\n<\/code><\/pre>\n<p>\nKjo detyr\u00eb e transferon bileten e Jira n\u00eb statusin \"Ready to change\" dhe shton nj\u00eb koment. Gjithashtu, n\u00eb variablin mdam_data ruhet lista e pajisjeve md, nga t\u00eb cilat \u00ebsht\u00eb hequr disku, dhe n\u00eb parted_info \u2013 \u00ebsht\u00eb dump-i i particionit nga parted. <\/p>\n<p>Kur inxhinieri t\u00eb vendos\u00eb nj\u00eb disk t\u00eb ri, ne mund ta p\u00ebrdorim k\u00ebt\u00eb variab\u00ebl p\u00ebr t\u00eb rikuperuar dump-in e particioneve, si dhe p\u00ebr ta regjistruar disku n\u00eb ato pajisje md, nga t\u00eb cilat \u00ebsht\u00eb hequr.<\/p>\n<h3>Ansible check mode<\/h3>\n<p>\nTa fillosh automatizimin ishte e frikshme. Prandaj ne vendos\u00ebm t\u00eb ekzekutojm\u00eb t\u00eb gjith\u00eb playbook\u00ebt n\u00eb modalitetin <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_checkmode.html\">dry run<\/a><\/noindex>, n\u00eb t\u00eb cilin Ansible nuk kryen ndonj\u00eb veprim n\u00eb server\u00eb, por vet\u00ebm i imiton ato. <\/p>\n<p>Ky p\u00ebrfundim ekzekutohet p\u00ebrmes nj\u00eb moduli t\u00eb ve\u00e7ant\u00eb callback, dhe rezultati i ekzekutimit t\u00eb playbook-it ruhet n\u00eb Jira si nj\u00eb koment.<\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/b02d7f1dc428f2797ae8556cd496b115.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nS\u00eb pari, kjo lejon t\u00eb validosh pun\u00ebn e botit dhe playbook-\u00ebve. S\u00eb dyti, rriti besimin e administrator\u00ebve ndaj botit. <\/p>\n<p>Pasi kaluam validimin dhe kuptuam se mund t\u00eb ekzekutonim Ansible jo vet\u00ebm n\u00eb modalitetin dry run, ne krijuam n\u00eb Jira butonin Run Diskobot p\u00ebr t\u00eb ekzekutuar t\u00eb nj\u00ebjtin playbook me t\u00eb nj\u00ebjtat variabla n\u00eb t\u00eb nj\u00ebjtin host, por n\u00eb modalitetin normal. <\/p>\n<p>P\u00ebr m\u00eb tep\u00ebr, butoni p\u00ebrdoret p\u00ebr ekzekutimin e p\u00ebrs\u00ebritur t\u00eb playbook-ut n\u00eb rast se d\u00ebshton.<\/p>\n<h3>Struktura e Playbooks<\/h3>\n<p>\nKam p\u00ebrmendur se, n\u00eb var\u00ebsi t\u00eb statusit t\u00eb tiket\u00ebs n\u00eb Jira, boti ekzekuton playbook t\u00eb ndryshme.<\/p>\n<p>S\u00eb pari, k\u00ebshtu \u00ebsht\u00eb shum\u00eb m\u00eb e leht\u00eb t\u00eb organizosh hyrjen. <br \/>\nS\u00eb dyti, n\u00eb disa raste kjo \u00ebsht\u00eb thjesht e nevojshme. <\/p>\n<p>P\u00ebr shembull, gjat\u00eb z\u00ebvend\u00ebsimit t\u00eb diskut sistemor duhet fillimisht t\u00eb shkojm\u00eb n\u00eb sistemin e dispe\u00e7imit, t\u00eb krijojm\u00eb nj\u00eb detyr\u00eb, dhe pas zbatimit t\u00eb sakt\u00eb t\u00eb dispe\u00e7imit, serveri do t\u00eb jet\u00eb i disponuesh\u00ebm p\u00ebr ssh, dhe mund t\u00eb vendosim aplikacionin mbi t\u00eb. N\u00ebse do t\u00eb b\u00ebnim t\u00eb gjitha k\u00ebto n\u00eb nj\u00eb playbook, Ansible nuk do t\u00eb ishte n\u00eb gjendje ta ekzekutonte at\u00eb p\u00ebr shkak t\u00eb pap\u00ebrshtatshm\u00ebris\u00eb s\u00eb hostit.<\/p>\n<p>Ne p\u00ebrdorim roli t\u00eb Ansible p\u00ebr \u00e7do grup server\u00ebsh. K\u00ebtu shihet se si jan\u00eb organizuar playbook\u00ebt n\u00eb nj\u00eb prej tyre. <\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/7a14035392b33f01d3182d5fff779321.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nKjo \u00ebsht\u00eb e p\u00ebrshtatshme, sepse menj\u00ebher\u00eb kuptohet se ku ndodhen caktimet. N\u00eb main.yml, i cili \u00ebsht\u00eb hyrja p\u00ebr rolin Ansible, mund t\u00eb kemi thjesht nj\u00eb p\u00ebrfshirje sipas statusit t\u00eb tiket\u00ebs ose caktime t\u00eb p\u00ebrbashk\u00ebta q\u00eb jan\u00eb t\u00eb nevojshme p\u00ebr t\u00eb gjith\u00eb, p\u00ebr shembull, kalimi i identifikimit ose marrja e tokenit.<\/p>\n<h4>Investigation.yml<\/h4>\n<p>\nFillon p\u00ebr tiket\u00ebt n\u00eb statusin Investigation dhe Open. M\u00eb e r\u00ebnd\u00ebsishmja p\u00ebr k\u00ebt\u00eb playbook \u00ebsht\u00eb emri i pajisjes bllokuese. Kjo informacion nuk \u00ebsht\u00eb gjithmon\u00eb e disponueshme. <\/p>\n<p>P\u00ebr ta marr\u00eb k\u00ebt\u00eb informacion, analizojm\u00eb p\u00ebrmbledhjen e Jira, vler\u00ebsimin p\u00ebrfundimtar nga trigeri i Zabbix. Aty mund t\u00eb jet\u00eb emri i pajisjes bllokuese \u2014 e kemi fatin. Mund t\u00eb jet\u00eb gjithashtu nj\u00eb pik\u00eb montimi, \u2014 at\u00ebher\u00eb duhet t\u00eb shkojm\u00eb n\u00eb server, t\u00eb analizojm\u00eb dhe llogarisim diskun e nevojsh\u00ebm. Po ashtu, trigeri mund t\u00eb transmetoj\u00eb adres\u00ebn scsi ose ndonj\u00eb informacion tjet\u00ebr. Por ndodh edhe k\u00ebshtu, q\u00eb nuk ka asnj\u00eb gjurm\u00eb, dhe duhet t\u00eb analizojm\u00eb.<\/p>\n<p>Pasi t\u00eb kemi zbuluar emrin e pajisjes bllokuese, mbledhim informacion rreth tipit dhe madh\u00ebsis\u00eb s\u00eb diskut p\u00ebr t\u00eb plot\u00ebsuar fushat n\u00eb Jira. Po ashtu, marrim informacion mbi prodhuesin, modelin, firmware, ID-n\u00eb, SMART, dhe gjith\u00e7ka e futim n\u00eb koment n\u00eb tiket\u00ebn e Jira. Administratorit dhe inxhinierit tani nuk u nevojitet t\u00eb k\u00ebrkojn\u00eb k\u00ebto t\u00eb dh\u00ebna. \ud83d\ude42<\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/259bf8712c013ee00d238f111b4280fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>prepare2change.yml<\/h4>\n<p>\nT\u00ebrheqja e diskut nga rotacioni, p\u00ebrgatitja p\u00ebr z\u00ebvend\u00ebsim. Faza m\u00eb e v\u00ebshtir\u00eb, p\u00ebrgjegj\u00ebse. Pik\u00ebrisht k\u00ebtu mund t\u00eb ndalni aplikacionin, kur nuk mund t\u00eb ndalet. Ose t\u00eb nxirrni diskun, i cili kishte mungesa kopjash, duke ndikuar k\u00ebshtu te p\u00ebrdoruesit, duke humbur ndonj\u00eb t\u00eb dh\u00ebn\u00eb. K\u00ebtu kemi m\u00eb shum\u00eb kontrole dhe njoftime n\u00eb bised\u00eb.<\/p>\n<p>N\u00eb rastin m\u00eb t\u00eb thjesht\u00eb, \u00ebsht\u00eb fjala p\u00ebr heqjen e diskut nga HW\/MD RAID. <\/p>\n<p>N\u00eb situata m\u00eb t\u00eb komplikuara (n\u00eb sistemet tona t\u00eb ruajtjes), kur rezervimi b\u00ebhet n\u00eb nivel aplikacioni, \u00ebsht\u00eb e nevojshme t\u00eb shkojm\u00eb n\u00eb aplikacion p\u00ebrmes API, t\u00eb njoftojm\u00eb p\u00ebr heqjen e diskut, ta deaktivizojm\u00eb at\u00eb dhe t\u00eb fillojm\u00eb rikuperimin.<\/p>\n<p>Ne tani po migrojm\u00eb masivisht n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/odnoklassniki\/blog\/346868\">re<\/a><\/noindex>, dhe n\u00ebse serveri \u00ebsht\u00eb n\u00eb re, at\u00ebher\u00eb Diskobot i drejtohet API-s\u00eb s\u00eb re, i thot\u00eb se do t\u00eb punoj\u00eb me k\u00ebt\u00eb minion \u2014 serverin ku jan\u00eb aktivizuar kontejner\u00ebt \u2014 dhe k\u00ebrkon \"migro t\u00eb gjitha kontejner\u00ebt nga ky minion\". Dhe p\u00ebr m\u00eb tep\u00ebr, aktivizon ndri\u00e7imin e diskut, q\u00eb inxhinieri t\u00eb shoh\u00eb menj\u00ebher\u00eb se cili duhet t\u00eb nxirret.<\/p>\n<h4>changed.yml<\/h4>\n<p>\nPas z\u00ebvend\u00ebsimit t\u00eb diskut, n\u00eb radh\u00eb t\u00eb par\u00eb verifikojm\u00eb disponueshm\u00ebrin\u00eb e tij. <\/p>\n<p>Inxhinier\u00ebt nuk i vendosin gjithmon\u00eb disqet e reja, prandaj kemi shtuar nj\u00eb kontroll t\u00eb vlerave SMART q\u00eb na p\u00ebrmbushin.<\/p>\n<p><b class=\"spoiler_title\">Cilat jan\u00eb atributet q\u00eb shqyrtojm\u00eb<\/b>Numri i Sektor\u00ebve t\u00eb Rialokuar (5) &lt; 100<br \/>\nNumri i Sektor\u00ebve n\u00eb Prishti Aktual (107) == 0<\/p>\n<p>N\u00ebse disku nuk kalon kontrollin, inxhinieri njoftohet p\u00ebr nj\u00eb z\u00ebvend\u00ebsim t\u00eb p\u00ebrs\u00ebritur. N\u00ebse gjith\u00e7ka \u00ebsht\u00eb n\u00eb rregull, ndri\u00e7imi \u00ebsht\u00eb i fikur, sh\u00ebnohet dhe disku futet n\u00eb rotacion.<\/p>\n<h4>ready.yml<\/h4>\n<p>\nRasti m\u00eb i thjesht\u00eb: kontrolli i sinkronizimit HW\/SW raid ose p\u00ebrfundimi i sinkronizimit t\u00eb t\u00eb dh\u00ebnave n\u00eb aplikacion.<\/p>\n<h3>API e aplikacioneve<\/h3>\n<p>\nKam p\u00ebrmendur disa her\u00eb se shpesh boti i qaset API e aplikacioneve. Sigurisht, jo t\u00eb gjitha aplikacionet kishin metodat e nevojshme, prandaj duhej t'i rregulloja ato. K\u00ebtu jan\u00eb metodat m\u00eb t\u00eb r\u00ebnd\u00ebsishme q\u00eb p\u00ebrdorim:<\/p>\n<ul>\n<li>Status. Statusi i klasterit ose disku p\u00ebr t\u00eb kuptuar n\u00ebse mund t\u00eb punojm\u00eb me t\u00eb;\n<\/li>\n<li>Start\/stop. Aktivizimi-deaktivimi i diskut;\n<\/li>\n<li>Migrate\/restore. Migrimi dhe rikthimi i t\u00eb dh\u00ebnave gjat\u00eb dhe pas z\u00ebvend\u00ebsimit.\n<\/li>\n<\/ul>\n<p><\/p>\n<h3>Eksperienca e nxjerr\u00eb nga Ansible<\/h3>\n<p>\nM\u00eb p\u00eblqen shum\u00eb Ansible. Por shpesh, kur shoh n\u00eb projekte t\u00eb ndryshme opon-source dhe shoh si shkruajn\u00eb playbook, m\u00eb duket pak e frikshme. K\u00ebrkesat logjike komplekse nga when\/loop, mungesa e fleksibilitetit dhe idempotenc\u00ebs p\u00ebr shkak t\u00eb p\u00ebrdorimit t\u00eb shpesht\u00eb t\u00eb shell\/command.<\/p>\n<p>Ne e kemi vendosur ta thjeshtojm\u00eb gjith\u00e7ka, duke shfryt\u00ebzuar avantazhin e Ansible - modularitetin. N\u00eb nivelin m\u00eb t\u00eb lart\u00eb jan\u00eb playbook, q\u00eb mund t'i shkruaj\u00eb \u00e7do administrator, zhvillues i jasht\u00ebm, i cili di pak p\u00ebr Ansible.<\/p>\n<pre><code class=\"plaintext\">- name: Blink disk\n  become: True\n  register: locate_action\n  disk_locate:\n      locate: '{{ locate }}'\n      devname: '{{ devname }}'\n      ids: '{{ locate_ids | default(pd_id) | default(omit) }}'\n<\/code><\/pre>\n<p>N\u00ebse ndonj\u00eb logjik\u00eb \u00ebsht\u00eb e v\u00ebshtir\u00eb t\u00eb realizohet n\u00eb playbook, e nxjerrim at\u00eb n\u00eb modulin ose filtrin e Ansible. Skriptet mund t\u00eb shkruhen si n\u00eb Python, ashtu edhe n\u00eb \u00e7do gjuh\u00eb tjet\u00ebr. <\/p>\n<p>Ata jan\u00eb t\u00eb leht\u00eb dhe t\u00eb shpejt\u00eb p\u00ebr t'u shkruar. P\u00ebr shembull, moduli i ndri\u00e7imit t\u00eb diskut, shembulli i p\u00ebrdorimit t\u00eb t\u00eb cilit \u00ebsht\u00eb dh\u00ebn\u00eb m\u00eb lart, p\u00ebrb\u00ebhet nga 265 rreshta.<\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/08e0384bfad24f3ee61e0643ca087852.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb nivelin m\u00eb t\u00eb ul\u00ebt \u00ebsht\u00eb biblioteka. P\u00ebr k\u00ebt\u00eb projekt ne shkruam nj\u00eb aplikacion t\u00eb ve\u00e7ant\u00eb, nj\u00eb lloj abstarctions mbi RAID-t\u00eb harduerike dhe sofuerike, t\u00eb cilat kryejn\u00eb k\u00ebrkesat p\u00ebrkat\u00ebse. <\/p>\n<p><img decoding=\"async\" alt=\"Automatizimi i z\u00ebvend\u00ebsimit t\u00eb drogave me ndihm\u00ebn e Ansible\" src=\"\/wp-content\/uploads\/2019\/06\/0edda3182026ce6279bd84c99613e3d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPikat m\u00eb t\u00eb forta t\u00eb Ansible jan\u00eb thjesht\u00ebsia dhe playbook-t\u00eb e kuptueshme. Un\u00eb mendoj se duhet t\u00eb p\u00ebrfitojm\u00eb prej saj dhe t\u00eb mos gjenerojm\u00eb skedar\u00eb t\u00eb tmerrsh\u00ebm YAML dhe nj\u00eb num\u00ebr t\u00eb madh kushtesh, kodesh shell dhe loops.<\/p>\n<p>N\u00ebse d\u00ebshironi t\u00eb p\u00ebrs\u00ebrisni p\u00ebrvoj\u00ebn ton\u00eb me Ansible API, mbani parasysh dy gj\u00ebra:<\/p>\n<ul>\n<li>Me playbook_executor dhe playbook nuk mund t\u00eb kalojm\u00eb nj\u00eb timeout. Ka nj\u00eb timeout p\u00ebr sesionet ssh, por nuk ka nj\u00eb timeout p\u00ebr playbook. N\u00ebse p\u00ebrpiqemi t\u00eb ndalojm\u00eb nj\u00eb disk q\u00eb nuk ekziston m\u00eb n\u00eb sistem, playbook do t\u00eb ekzekutohet pafund\u00ebsisht, prandaj ishte e nevojshme ta vendosim fillimin e tij n\u00eb nj\u00eb wrapper t\u00eb ve\u00e7ant\u00eb dhe ta ndalim sipas timeout-it.\n<\/li>\n<li>Ansible funksionon mbi baza fork-procesesh, k\u00ebshtu q\u00eb API-ja e tij nuk \u00ebsht\u00eb e sigurt p\u00ebr rrjedha. Ne fillojm\u00eb t\u00eb gjitha playbook-et tona nj\u00ebrrug\u00ebs.\n<\/li>\n<\/ul>\n<p>\nSi rezultat, arrit\u00ebm t\u00eb automatizojm\u00eb z\u00ebvend\u00ebsimin e rreth 80% t\u00eb disqeve. N\u00eb p\u00ebrgjith\u00ebsi, shpejt\u00ebsia e z\u00ebvend\u00ebsimit u dyfishua. Sot, administratori thjesht shikon incidentin dhe merr vendimin n\u00ebse duhet t\u00eb ndryshohet disku apo jo, dhe pastaj b\u00ebn nj\u00eb klik.<\/p>\n<p>Por tani po fillojm\u00eb t\u00eb p\u00ebrballemi me nj\u00eb problem tjet\u00ebr: disa administratori t\u00eb rinj nuk din\u00eb se si t\u00eb ndrojn\u00eb disqet. \ud83d\ude42<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/odnoklassniki\/blog\/452110\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e \u0432\u0435\u0434\u0443\u0449\u0438\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u043e\u043c \u0432 \u041e\u041a \u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u044e \u0437\u0430 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e\u0440\u0442\u0430\u043b\u0430. \u0425\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u0432\u044b\u0441\u0442\u0440\u043e\u0438\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0437\u0430\u043c\u0435\u043d\u044b \u0434\u0438\u0441\u043a\u043e\u0432, \u0430 \u0437\u0430\u0442\u0435\u043c, \u043a\u0430\u043a \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u043b\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u043b\u0438 \u0435\u0433\u043e \u0431\u043e\u0442\u043e\u043c. \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0430 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0430 HighLoad+ 2018 \u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e \u0437\u0430\u043c\u0435\u043d\u0435 \u0434\u0438\u0441\u043a\u043e\u0432 \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":26233,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-34841","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=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.\" \/>\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\/sq\/blog\/administrirovanie\/avtomatizatsiya-zameny-diskov-s-pomoshhyu-ansible\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\udd47\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043c\u0435\u043d\u044b \u0434\u0438\u0441\u043a\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Ansible | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/avtomatizatsiya-zameny-diskov-s-pomoshhyu-ansible\" \/>\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:00:43+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:00:43+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\udd47Automatizimi i z\u00ebvend\u00ebsimit t\u00eb disqeve me Ansible | ProHoster","description":"P\u00ebrsh\u00ebndetje t\u00eb gjith\u00ebve.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/avtomatizatsiya-zameny-diskov-s-pomoshhyu-ansible","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\udd47\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0437\u0430\u043c\u0435\u043d\u044b \u0434\u0438\u0441\u043a\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Ansible | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/avtomatizatsiya-zameny-diskov-s-pomoshhyu-ansible","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:00:43+00:00","article:modified_time":"2019-10-31T19:00:43+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"34841","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-21 20:48:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:14:05","updated":"2026-01-21 20:48:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/34841","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=34841"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/34841\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/26233"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=34841"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=34841"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=34841"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}