{"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\/et\/blog\/administrirovanie\/avtomatizatsiya-zameny-diskov-s-pomoshhyu-ansible","title":{"rendered":"Kettavahetuse automatiseerimine Ansible'i abil","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/c60a2326ab13e7766eafda3ae5ac39c5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTere k\u00f5igile. Ma t\u00f6\u00f6tan peamise s\u00fcsteemiadministraatorina O.K.-s ja vastutan portaali stabiilse t\u00f6\u00f6tamise eest. Soovin r\u00e4\u00e4kida, kuidas me oleme \u00fcles ehitanud automaatse ketaste vahetamise protsessi ning seej\u00e4rel, kuidas me eemaldasime selle protsessist administraatori ja asendasime ta robotiga.<\/p>\n<p>See artikkel on teatud m\u00f5ttes transkriptsioon <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=5WhbG3FQveE&amp;list=FLKN7KW1sxju7fWJvKuyKxEQ\">esitas<\/a><\/noindex> HighLoad+ 2018-l<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Ketaste vahetamise protsessi t\u00f5hususe \u00fclesehitamine<\/h2>\n<p><\/p>\n<h3>Esiteks m\u00f5ned numbrid<\/h3>\n<p>\nO.K. on hiiglaslik teenus, mida kasutavad miljonid inimesed. Seda teenindab umbes 7000 serverit, mis asuvad neljas erinevas andmekeskuses. Serverites on \u00fcle 70 000 ketta. Kui need \u00fcksteise peale laduda, saame \u00fcle 1 km k\u00f5rge torni. <\/p>\n<p>Ketad on serveri komponent, mis laguneb k\u00f5ige sagedamini. Selliste suurte mahtude korral peame iga n\u00e4dal vahetama umbes 30 ketast, ja see protseduur on muutunud \u00fcsna ebameeldivaks rutiiniks.<\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/5e915e9077994efcc4e74a26fc6286fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Intsidentide<\/h3>\n<p>\nMeie firmas on kehtestatud t\u00e4ielik probleemihaldus. Iga probleem fikseeritakse Jira-s, seej\u00e4rel lahendame ja arutame seda. Kui probleemil on m\u00f5ju kasutajatele, koguneme kindlasti ja m\u00f5tleme, kuidas kiiresti sellistes olukordades reageerida, kuidas v\u00e4hendada m\u00f5ju ja muidugi, kuidas v\u00e4ltida kordumist.<\/p>\n<p>Kettad pole erand. Nende seisundi j\u00e4lgimist teostab Zabbix. J\u00e4lgime Syslog-s kirjutamise\/loetavuse vigu, anal\u00fc\u00fcsime HW\/SW-raidide seisukorda, j\u00e4lgime SMART-i ja SSD-de kulumist. <\/p>\n<h3>Kuidas kettad varem vahetati<\/h3>\n<p>\nKui Zabbixis s\u00fcttib m\u00f5ni k\u00e4ivitus, genereeritakse Jira-s probleem ja see m\u00e4\u00e4ratakse automaatselt vastavatele inseneridele andmekeskustes. Teeme seda k\u00f5igi riistvara probleemidega, ehk siis sellistega, mis n\u00f5uavad f\u00fc\u00fcsilist t\u00f6\u00f6d seadmete kallal andmekeskuses. <br \/>\nAndmekeskuse insener on inimene, kes lahendab k\u00fcsimusi, mis on seotud riistvaraga, vastutab serverite paigaldamise, hoolduse ja demonteerimise eest. P\u00e4rast p\u00e4ringu saamist asub insener t\u00f6\u00f6le. Ketaste riiulites vahetab ta kettad iseseisvalt. Kuid kui tal puudub juurdep\u00e4\u00e4s vajalikele seadmetele, p\u00f6\u00f6rdub insener abi saamiseks \u00f6\u00f6p\u00e4evara turvaseadmestike administraatorite poole. Esiteks tuleb ketas v\u00e4lja rotaatsioonist eemaldada. Selleks tuleb teha vajalikud muudatused serveris, peatada rakendused, eemaldada ketas.<\/p>\n<p>Vahetuses olev s\u00fcsteemiadministraator vastutab kogu portaali t\u00f6\u00f6 eest. Ta uurib juhtumeid, tegeleb parandamisega, aitab arendajaid v\u00e4ikeste \u00fclesannete t\u00e4itmisel. Ta ei tegele ainult k\u00f5vakettastega.<\/p>\n<p>Varem suhtlesid andmekeskuse insenerid s\u00fcsteemiadministraatoriga vestluses. Insenerid saatsid linke Jira-piletitele, administraator l\u00e4ks neid vaatama ja haldas t\u00f6\u00f6l\u00f5ike mingisuguses m\u00e4rkmete raamatus. Kuid selliste \u00fclesannete jaoks ei ole vestlused mugavad: teave seal ei ole struktureeritud ja kaob kiiresti. Ja administraator v\u00f5is lihtsalt arvutist eemale minna ning m\u00f5nda aega ei vastata p\u00e4ringutele, samas kui insener seisis serveri juures, k\u00e4es hunnik kettaid, ja ootas.<\/p>\n<p>Kuid k\u00f5ige halvem oli see, et administraatorid ei n\u00e4inud tervikpilti: millised k\u00f5vaketta juhtumid eksisteerivad, kus v\u00f5ib potentsiaalselt probleem tekkida. See on seotud sellega, et me anname k\u00f5ik HW-juhtumid inseneridele. Jah, k\u00f5ik juhtumid oli v\u00f5imalik kuvada administraatori armatuurlaudadele. Kuid neid on v\u00e4ga palju ja administraatorit kaasati vaid m\u00f5nedes neist.<\/p>\n<p>Lisaks ei suutnud insener \u00f5igesti prioriteete seada, sest ta ei teadnud konkreetsete serverite otstarbe ega teabe jaotuse kohta salvestites.<\/p>\n<h3>Uus asendamisprotseduur<\/h3>\n<p>\nEsimene asi, mida me tegime, oli viia k\u00f5ik k\u00f5vaketta juhtumid eraldi t\u00fc\u00fcpi \"HW-ketas\" ja lisada sellele v\u00e4ljad \"blokeerimisaparaadi nimi\", \"suurus\" ja \"ketta t\u00fc\u00fcp\", et see teave salvestuks piletisse, ning ei peaks seda pidevalt vestluses jagama. <\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/c4526bf668e31d90e0fbd061de44f1a7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nSamuti leppisime kokku, et \u00fche juhtumi raames vahetame ainult \u00fche ketta. See lihtsustas oluliselt automatiseerimise protsessi, statistika kogumist ja t\u00f6\u00f6d. <\/p>\n<p>Lisaks lisasime v\u00e4lja \"vastutav administraator\". Sinna pannakse automaatselt vahetuses olev s\u00fcsteemiadministraator. See on v\u00e4ga mugav, sest n\u00fc\u00fcd n\u00e4eb insener alati, kes on vastutav. Ei ole vaja kalendrisse minna ja otsida. Just see v\u00e4li v\u00f5imaldas tuua administraatori armatuurlaudadele piletid, kus v\u00f5ib-olla vajatakse tema abi.<\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/5097e5dcca1fddd68d1e5f296c09f60a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKuna k\u00f5ik osalejad saaksid uuendustest maksimaalset kasu, oleme loonud filtrid ja armatuurlaud, ning r\u00e4\u00e4kinud neist meestele. Kui inimesed m\u00f5istavad muudatusi, ei hoia nad neist distantse, nagu need oleksid ebaolulised. Inseneril on oluline teada riiuli numbrit, kus server asub, ketta suurust ja t\u00fc\u00fcpi. Administrator peab peaeesm\u00e4rgina m\u00f5istma, mis t\u00fc\u00fcpi serverigrupp see on ja milline v\u00f5ib olla m\u00f5ju ketta vahetamisel.<\/p>\n<p>V\u00e4ljade olemasolu ja nende kuvamine on mugav, kuid see ei vabastanud meid vajadusest kasutada vestlusi. Selleks tuli t\u00f6\u00f6protsessi muuta. <\/p>\n<p>Varem oli see selline:<\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/2b79cdb7ec88b5ae3d2917ad8b164c6d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nT\u00e4na t\u00f6\u00f6tavad insenerid nii j\u00e4tkuvalt, kui nad ei vaja administraatori abi.<\/p>\n<p>Esimene asi, mida me tegime, oli uue staatuse, <b>Investigate<\/b>, sisseviimine. Selles etapis on pilet selline, kus insener pole veel otsustanud, kas tal on administraator vajalik v\u00f5i mitte. Selle staatuse kaudu saab insener piletit administraatorile edastada. Lisaks on selle staatusega me m\u00e4rkime pileteid, kus on vajalik ketta vahetamine, kuid ketast end pole platsil. See juhtub n\u00e4iteks CDN-ide ja kaugplatside puhul.<\/p>\n<p>Lisaks oleme lisanud staatuse, <b>Valmis<\/b>. Sellesse staatusesse kantakse pilet p\u00e4rast ketta vahetamist. See t\u00e4hendab, et k\u00f5ik on juba tehtud, kuid serveris s\u00fcnkroniseeritakse HW\/SW RAID. See v\u00f5ib v\u00f5tta \u00fcsna kaua aega.<\/p>\n<p>Kui t\u00f6\u00f6le kaasatakse administraator, muutub skeem veidi keerulisemaks.<\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/5b6aacbb0d4049e62e7cb9ee28eb6498.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nStaatusest, <b>Ava<\/b> saab piletit edastada nii s\u00fcsteemiadministraator kui ka insener. Staatuses <b>In progress<\/b> v\u00f5tab administraator ketta rotiatsioonist v\u00e4lja, et insener saaks selle lihtsalt v\u00e4lja v\u00f5tta: l\u00fclitab sisse valgustuse, monteerib ketta lahti, peatab rakendused, olenevalt konkreetse serverigruppi vajadustest.<\/p>\n<p>Seej\u00e4rel kantakse pilet staatusesse <b>Ready to change<\/b>: see on signaal insenerile, et ketas saab v\u00e4lja v\u00f5tta. K\u00f5ik v\u00e4ljad Jira-s on juba t\u00e4idetud, insener teab, milline on ketta t\u00fc\u00fcp ja suurus. Need andmed kantakse kas automaatselt eelmisel staatuse kaudu v\u00f5i administraatori poolt.<\/p>\n<p>P\u00e4rast ketta vahetamist kantakse pilet staatusesse <b>Changed<\/b>. Kontrollitakse, et oleme vahetanud vajaliku ketta, tehakse partitsioneerimine, rakendus k\u00e4ivitatakse ja m\u00f5ned andmete taastamise \u00fclesanded t\u00e4idetakse. Samuti v\u00f5ib pilet olla kantud staatusesse <b>Valmis<\/b>, sel juhul j\u00e4\u00e4b vastutavaks administraator, kuna tema lisas ketta rotiatsiooni. T\u00e4ielik skeem n\u00e4eb v\u00e4lja selline.<\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/32f8d488e2ff6a28a3341114b66de0a3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nUute v\u00e4ljade lisamine on meie elu oluliselt lihtsustanud. Inimesed hakkavad t\u00f6\u00f6tama struktureeritud teabe alusel, on selge, mida ja millal teha. Prioriteedid on n\u00fc\u00fcd palju asjakohasemad, kuna need m\u00e4\u00e4rab administraator.<\/p>\n<p>Suhtlemise vajadus chattides on kadunud. Loomulikult v\u00f5ib administraator kirjutada insenerile \"siin tuleb kiiremini vahetada\" v\u00f5i \"on juba \u00f5htu, kas j\u00f5uad vahetada?\". Kuid me ei suhtle enam igap\u00e4evaselt nendel teemadel chattides.<\/p>\n<p>Kettad vahetatakse now massiliselt. Kui administraator tuleb t\u00f6\u00f6le natuke varem ja tal on vaba aega ning midagi pole veel juhtunud, saab ta ette valmistada mitu serverit vahetamiseks: v\u00e4ljad seadistada, kettad rotatsioonist v\u00e4lja v\u00f5tta ja \u00fclesande insenerile edastada. Insener tuleb hiljem andmekeskusesse, n\u00e4eb \u00fclesannet, v\u00f5tab laost vajalikud andmekandjad ja vahetab kohe v\u00e4lja. Tulemusena on vahetuse kiirus suurenenud.<\/p>\n<h3>Omandatud kogemus t\u00f6\u00f6protsessi koostamisel.<\/h3>\n<p><\/p>\n<ul>\n<li><b>Protseduuri koostamisel tuleb koguda teavet erinevatest allikatest.<\/b><br \/>\nM\u00f5ned meie administraatorid ei teadnud, et insener vahetab kettaid iseseisvalt. M\u00f5ned arvasid, et MD RAID s\u00fcnkroniseerimise eest hoolitsevad insenerid, kuigi m\u00f5nel neist ei olnud selleks isegi ligip\u00e4\u00e4su. M\u00f5ned peamised insenerid tegid seda, kuid mitte alati, kuna protsess ei olnud kuskil kirja pandud.<\/li>\n<li><b>Protseduur peab olema lihtne ja arusaadav.<\/b><br \/>\nInimeste on raske meeles pidada mitmeid samme. K\u00f5ige olulisemad k\u00f5rvuti olevaid staatuseid Jiras tuleks tuua peamisele ekraanile. Saame neid nimetada \u00fcmber, n\u00e4iteks, progressis olekut nimetame Ready to change. \u00dclej\u00e4\u00e4nud staatuseid saab varjata rippmen\u00fc\u00fcsse, et need ei segaks silma. Kuid parem on mitte piirata inimesi, anda neile v\u00f5imalus \u00fcleminekuid teha.<br \/>\nSelgitage uuenduste v\u00e4\u00e4rtust. Kui inimesed m\u00f5istavad, aktsepteerivad nad uut protsessi paremini. Meie jaoks oli v\u00e4ga oluline, et inimesed ei kl\u00f5psaks kogu protsessi l\u00e4bi, vaid k\u00e4iksid selle l\u00e4bi. Hiljem ehitasime sellele automatiseerimise.<\/li>\n<li><b>Oodata, anal\u00fc\u00fcsida, selgitada.<\/b><br \/>\nMe v\u00f5tsime umbes kuus kuud, et v\u00e4lja t\u00f6\u00f6tada protseduur, tehniline teostus, koosolekud ja arutelud. K\u00e4ivitamiseks l\u00e4ks aga rohkem kui kolm kuud. N\u00e4gin, kuidas inimesed j\u00e4rk-j\u00e4rgult hakkasid uuendust kasutama. Esimestel etappidel oli palju negatiivsust. Kuid see ei olnud absoluutselt seotud protseduuri endaga ega selle tehnilise teostusega. N\u00e4iteks kasutas \u00fcks administraator mitte Jira, vaid Jira-pluginat Confluences, mist\u00f5ttu ei olnud m\u00f5ned asjad talle kergesti k\u00e4ttev\u00f5etavad. N\u00e4itasime talle Jira'd, administraatori tootlikkus kasvas nii \u00fcldiste \u00fclesannete kui ka ketaste asendamise osas.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Ketaste asendamise automatiseerimine<\/h2>\n<p>\nKetaste asendamise automatiseerimisega oleme proovinud mitu korda. Meil oli juba varasemalt v\u00e4lja t\u00f6\u00f6tatud skripte, kuid need t\u00f6\u00f6tasid kas interaktiivselt v\u00f5i k\u00e4sitsi, n\u00f5udes k\u00e4ivitamist. Alles uue protseduuri juurutamise j\u00e4rel m\u00f5istsime, et just seda me vajasimegi.<\/p>\n<p>Kuna n\u00fc\u00fcd on ketaste asendamise protsess jagatud etappideks, mille iga\u00fche kohta on m\u00e4\u00e4ratud vastutaja ja toimingute loetelu, saame automatiseerimist etappide kaupa sisse l\u00fclitada, mitte korraga t\u00e4ielikult. N\u00e4iteks on k\u00f5ige lihtsam etapp \u2014 Ready (RAID\/s\u00fcnkroniseerimise kontroll) \u2014 kergesti delegereeritav robotile. Kui robot pisut \u00f5pib, saab talle anda vastutuskohasema \u00fclesande \u2014 ketta sissel\u00fclitamine rotatsiooni jne.<\/p>\n<h3>Seadistuste loomine<\/h3>\n<p>\nEnne kui r\u00e4\u00e4gime robotist, teeme v\u00e4ikese ekskursi meie seadistuste loomisse. Esiteks on see tingitud meie infrastruktuuri hiiglaslikust suurusest. Teiseks p\u00fc\u00fcame iga teenuse jaoks leida optimaalse riistvarakonfiguratsiooni. Meil on umbes 20 erinevat RAID-mudelit, peamiselt LSI ja Adaptec, kuid leidub ka HP ja DELL erinevaid versioone. Igal RAID-kontrolleril on oma haldust\u00f6\u00f6riist. K\u00e4skude komplekt ja nende v\u00e4ljund v\u00f5ivad iga RAID-kontrolleri versiooni p\u00f5hjal erineda. Seal, kus ei kasutata HW-RAID'i, v\u00f5ib olla mdraid.<\/p>\n<p>Peaaegu k\u00f5ik uued installatsioonid teeme ilma kettasalvestuseta. P\u00fc\u00fcame enam mitte kasutada riistvaralist ega tarkvaralist RAID'i, kuna varundame meie s\u00fcsteeme andmekeskuste tasemel, mitte serverite tasemel. Kuid loomulikult on palju p\u00e4randservereid, mida tuleb toetada.<\/p>\n<p>Kusagil RAID-kontrollerites kasutatakse raw seadmeid, m\u00f5nes kohas kasutatakse JBOD-i. Serveris on konfiguratsioonid, kus on \u00fcks s\u00fcsteemidisk, ja kui seda tuleb vahetada, tuleb server uuesti seadistada koos operatsioonis\u00fcsteemi ja rakenduste paigaldamisega, sealhulgas nende samade versioonidega, et seej\u00e4rel lisada konfiguratsioonifailid ja k\u00e4ivitada rakendused. Samuti on palju serverigruppe, kus varukoopiaid tehakse mitte ketastaadi tasemel, vaid otse rakendustes endis.<\/p>\n<p>Kokku on meil \u00fcle 400 ainulaadse serverigruppi, kus t\u00f6\u00f6tab umbes 100 erinevat rakendust. Nii suure variandi katmiseks vajasime multifunktsionaalset automatiseerimist\u00f6\u00f6riista. Eelistatavalt lihtsa DSL-iga, et seda saaks toetada mitte ainult see, kes selle kirjutas.<\/p>\n<p>Valisime Ansible'i, kuna see on agentideta: infrastruktuuri ettevalmistamine ei olnud vajalik, kiire k\u00e4ivitamine. Lisaks on see kirjutatud Pythonis, mis on meeskonnas standardina vastu v\u00f5etud.<\/p>\n<h3>\u00dcldine skeem<\/h3>\n<p>\nVaadakem \u00fcldist automatiseerimisse kustutusprotsessi \u00fche juhtumi n\u00e4itel. Zabbix tuvastab, et disk sdb on rikki l\u00e4inud, aktiveeritakse h\u00e4ire, luuakse pilet Jira-s. Administraator vaatab selle \u00fcle, m\u00f5istab, et see ei ole duplikaat ega valeh\u00e4ire, st disk tuleb vahetada, ja suunab pileti olekusse In progress.<\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/673df0fe9600bc65633841222f436d37.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nRakendus DiskoBot, mis on kirjutatud Pythonis, k\u00fcsib aeg-ajalt Jira't v\u00e4lja uute piletite osas. See m\u00e4rgib, et on ilmunud uus pilet olekus In progress, aktiveeritakse vastav niit, mis k\u00e4ivitab playbook'i Ansible'is (seda tehakse iga oleku jaoks Jira-s). K\u00e4ivitatakse Prepare2change.<\/p>\n<p>Ansible saadetakse hostile, eemaldab ketta rotatsioonist ja teatab olekust rakendusele Callbacks kaudu. <\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/8bfc13129f8deca640eb63ea81f616c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTulemustest peab bot automaatselt pileti Ready to change olekusse. Insener saab teavituse ja l\u00e4heb ketast vahetama, seej\u00e4rel suunab pileti olekusse Changed. <\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/eeda06b6966f435e2172d3f9c61b341e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00dclaltoodud skeemi kohaselt naaseb pilet tagasi boti juurde, see k\u00e4ivitab teise playbook'i, l\u00e4heb hostile ja sisestab ketta rotatsiooni. Bot sulgeb pileti. Hurraa!<\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/51b8c7050b0c10c16ad6a6d4974c3ebf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nN\u00fc\u00fcd r\u00e4\u00e4gime m\u00f5nest s\u00fcsteemi komponendist.<\/p>\n<h3>Diskobot<\/h3>\n<p>\nSee rakendus on kirjutatud Pythonis. See valib piletid Jira's JQL alusel. S\u00f5ltuvalt pileti olekust suunatakse see vastava t\u00f6\u00f6tleja juurde, mis omakorda k\u00e4ivitab vastavale olekule vastava Ansible playbook'i.<\/p>\n<p>JQL ja k\u00fcsitluse intervallid on m\u00e4\u00e4ratud rakenduse konfiguratsioonifailis.<\/p>\n<pre><code class=\"plaintext\">jira_states:\n  investigate:\n    jql: '\u2026 status = Open and \"Disk Size\" is EMPTY'\n    interval: 180\n\n  inprogress:\n    jql: '\u2026  and \"Disk Size\" is not EMPTY and \"Device Name\" is not EMPTY'\n \n  ready:\n    jql: '\u2026 and (labels not in (\"dbot_ignore\") or labels is EMPTY)'\n    interval: 7200\n<\/code><\/pre>\n<p>\nN\u00e4iteks, In progress olekuga piletitest valitakse ainult need, mille Disk size ja Device name v\u00e4ljad on t\u00e4idetud. Device name on plokk-seadme nimi, mis on vajalik playbook\u2019i t\u00e4itmiseks. Disk size on vajalik, et insener teaks, kui suurel kettal on vajadus.<\/p>\n<p>Valmistoimingute Ready olekuga piletitest filtreeritakse v\u00e4lja piletid, millel on dbot_ignore silt. \u00dcldiselt kasutame Jira silte selliseks filtreerimiseks, samuti piletite dubleerimise m\u00e4rgistamiseks ja statistika kogumiseks.<\/p>\n<p>Playbook\u2019i t\u00f5rke korral m\u00e4\u00e4rab Jira piletile dbot_failed sildi, et hiljem oleks v\u00f5imalik probleemi uurida. <\/p>\n<h3>Koostoime Ansible\u2019iga<\/h3>\n<p>\nRakendus suhtleb Ansible\u2019iga l\u00e4bi <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/dev_guide\/developing_api.html\">Ansible Python API<\/a><\/noindex>. Playbook_executor\u2019is edastame faili nime ja muutuja kogumi. See v\u00f5imaldab hoida Ansible projekti tavlike yml-faile kujul, mitte kirjeldada seda Python-koodis. <\/p>\n<p>Samuti edastatakse Ansible\u2019s *extra_vars* kaudu plokk-seadmme nimi, pileti olek ja callback_url, kus on peidetud issue key \u2014 seda kasutatakse HTTP callback\u2019ides.<\/p>\n<p>Iga k\u00e4ivitamise jaoks genereeritakse ajutine inventory, mis koosneb \u00fchest hostist ja grupist, kuhu see host kuulub, et rakenduksid group_vars.<\/p>\n<p>Siin on n\u00e4ide \u00fclesandest, kus on rakendatud HTTP callback.<\/p>\n<p>Playbook\u2019ide t\u00e4itmise tulemused saadakse callback(-ide) kaudu. Need on kahte t\u00fc\u00fcpi:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/plugins\/callback.html\">Ansible callback plugin<\/a><\/noindex>, see esitab andmed playbook\u2019i t\u00e4itmise tulemuste kohta. Seal on kirjeldatud \u00fclesandeid, mis on k\u00e4ivitatud, \u00f5nnestunud v\u00f5i eba\u00f5nnestunud. See callback kutsutakse esile playbook\u2019i m\u00e4ngimise l\u00f5pus.<\/li>\n<li>HTTP callback, et saada teavet playbook\u2019i m\u00e4ngimise ajal. Ansible \u00fclesandes teeme POST\/GET p\u00e4ringu meie rakenduse suunas.<\/li>\n<\/ul>\n<p>\nHTTP callback(-ide) kaudu edastatakse muutujaid, mis m\u00e4\u00e4rati playbook\u2019i t\u00e4itmise ajal ja mida soovime s\u00e4ilitada ja kasutada j\u00e4rgmiste k\u00e4ivitamiste juures. Need andmed salvestame sqlite\u2019isse.<\/p>\n<p>Samuti j\u00e4tame HTTP callback\u2019i kaudu kommentaare ja muutume pileti olekut.<\/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>Nagu paljude sarnaste \u00fclesannete puhul, oleme selle v\u00e4lja t\u00f5stnud eraldi common faili ja lisame selle vajadusel, et mitte pidevalt playbook'ides korrata. Siin kajastub callback_url, milles on sisseehitatud issue key ja host name. Kui Ansible t\u00e4idab selle POST-p\u00e4ringu, m\u00f5istab bot, et see tuleb teatud intsidenti seoses.<\/p>\n<p>Siin on n\u00e4ide playbook'ist, kus me eemaldasime ketta MD-seadmest:<\/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>\nSee \u00fclesanne viib Jira pileti olekusse \"Ready to change\" ja lisab kommentaari. Samuti salvestatakse muutujasse mdam_data nimekiri md-seadmetest, kust ketas eemaldati, ja parted_info - partitsiooni dump partedilt. <\/p>\n<p>Kui insener paigaldab uue ketta, saame kasutada neid muutujaid, et taastada partitsioonide dump ja samuti tuua ketas tagasi nendesse md-seadetesse, kust see eemaldati.<\/p>\n<h3>Ansible kontrollre\u017eiim<\/h3>\n<p>\nAutomatiseerimise k\u00e4ivitamine oli hirmutav. Seet\u00f5ttu otsustasime k\u00e4ivitada k\u00f5ik playbook'id re\u017eiimis <br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/docs.ansible.com\/ansible\/latest\/user_guide\/playbooks_checkmode.html\">dry run<\/a><\/noindex>, kus Ansible ei tee serverites mingeid toiminguid, vaid lihtsalt simuleerib neid. <\/p>\n<p>Selline k\u00e4ivitus teostatakse eraldi callback-mooduli kaudu ja playbook'i t\u00e4itmise tulemus salvestatakse Jira's kommentaarina.<\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/b02d7f1dc428f2797ae8556cd496b115.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsiteks v\u00f5imaldas see valideerida boti ja playbook'ide toimimist. Teiseks suurendas see administraatorite usaldust boti vastu. <\/p>\n<p>Kui olime l\u00e4binud valideerimise ja m\u00f5istsime, et Ansible't saab k\u00e4ivitada mitte ainult dry run re\u017eiimis, siis l\u00f5ime Jira's nuppu Run Diskobot, et k\u00e4ivitada sama playbook'i samade muutujatega samal hostil, kuid tavare\u017eiimis. <\/p>\n<p>Peale selle kasutatakse nuppu playbook'i kordusk\u00e4ivitamiseks, kui see peaks eba\u00f5nnestuma.<\/p>\n<h3>Playbookide struktuur<\/h3>\n<p>\nOlen juba maininud, et s\u00f5ltuvalt Jira pileti olekust k\u00e4ivitab bot erinevaid playbook'e.<\/p>\n<p>Esiteks on nii palju lihtsam sissep\u00e4\u00e4su organiseerida. <br \/>\nTeiseks on teatud juhtudel see lihtsalt vajalik. <\/p>\n<p>N\u00e4iteks s\u00fcsteemse ketta vahetamisel tuleb k\u00f5igepealt minna deploy-s\u00fcsteemi, luua \u00fclesanne ja p\u00e4rast korralikku kasutuselev\u00f5ttu saab server ssh kaudu k\u00e4tte ja sinna saab rakenduse paigaldada. Kui me teeksime kogu selle tegevuse \u00fches playbook'is, ei suudaks Ansible seda t\u00e4ita, kuna host ei oleks saadaval.<\/p>\n<p>Kasutame Ansible'i rolle iga serverigruppi jaoks. Siin on n\u00e4ha, kuidas playbook'id \u00fches neist on organiseeritud. <\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/7a14035392b33f01d3182d5fff779321.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSee on mugav, sest kohe on selge, kus erinevad \u00fclesanded asuvad. Failis main.yml, mis on Ansible'i rolli sissejuhatus, v\u00f5ib meil olla lihtsalt include pileti staatuse j\u00e4rgi v\u00f5i \u00fcldised \u00fclesanded, mis on vajalikud k\u00f5igile, n\u00e4iteks identifitseerimise l\u00e4bimine v\u00f5i tokeni saamine.<\/p>\n<h4>Investigation.yml<\/h4>\n<p>\nK\u00e4ivitatakse piletite jaoks, mille staatus on Investigation ja Open. Selle playbook'i k\u00f5ige olulisem element on plokkseadmestiku nimi. See teave ei ole alati kergesti k\u00e4ttesaadav. <\/p>\n<p>Selle saamiseks anal\u00fc\u00fcsime Jira kokkuv\u00f5tet, viimast v\u00e4\u00e4rtust Zabbix'i t\u00f6\u00f6tluselt. Seal v\u00f5ib sisalduda plokkseadmestiku nimi \u2014 kui meil vedas. Ahnem v\u00f5ib sisalduda mount point, siis tuleb minna serverisse, parseerida ja arvutada vajalik kett. Samuti v\u00f5ib t\u00f6\u00f6tlus edastada scsi-aadressi v\u00f5i m\u00f5ne muu teabe. Kuid juhtub ka, et mingit teavet ei ole, ja tuleb anal\u00fc\u00fcsida.<\/p>\n<p>Kui me oleme v\u00e4lja selgitanud plokkseadmestiku nime, kogume selle kohta teavet ketta t\u00fc\u00fcbi ja suuruse osas, et t\u00e4ita v\u00e4ljad Jira's. Samuti v\u00f5tame teavet tootja, mudeli, firmav\u00e4rskenduse, ID, SMART osas ja k\u00f5ik see lisatakse kommentaarina Jira-piletisse. Administrator ja insener ei pea n\u00fc\u00fcd neid andmeid enam otsima. \ud83d\ude42<\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/259bf8712c013ee00d238f111b4280fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<h4>prepare2change.yml<\/h4>\n<p>\nKetta v\u00e4lja t\u00f5mbamine ringlusest, ettevalmistamine asendamiseks. See on k\u00f5ige keerulisem ja vastutustundlikum etapp. Just siin v\u00f5ib rakendust peatada, kui seda ei saa peatada. V\u00f5i t\u00f5mmata v\u00e4lja ketas, millel ei olnud koopiaid, ja seet\u00f5ttu m\u00f5jutada kasutajaid, kaotada teatud andmeid. Siin on meil k\u00f5ige rohkem kontrolle ja teavitusi vestluses.<\/p>\n<p>Lihtsamas olukorras on tegemist ketta eemaldamisega HW\/MD RAID'ist. <\/p>\n<p>Komplekssemates olukordades (meie salvestuss\u00fcsteemides), kus replikatsioon toimub rakenduse tasemel, tuleb minna rakendusse API kaudu, teatada ketta eemaldamisest, deaktiveerida see ja alustada taastamist.<\/p>\n<p>Meigma praegu massiliselt <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/odnoklassniki\/blog\/346868\">pilve<\/a><\/noindex>, ja kui server on pilves, siis Diskobot p\u00f6\u00f6rdub pilve API poole, teatab, et plaanib t\u00f6\u00f6tada selle mini-serveriga \u2014 serveriga, kus konteinerid on k\u00e4ivitatud \u2014 ja palub 'migreeri k\u00f5ik konteinerid sellest mini-serverist'. Ja samal ajal aktiveerib ketta valgustuse, et insener n\u00e4eks kohe, milline tuleb v\u00e4lja t\u00f5mmata.<\/p>\n<h4>changed.yml<\/h4>\n<p>\nP\u00e4rast ketta vahetamist kontrollime k\u00f5igepealt selle k\u00e4ttesaadavust. <\/p>\n<p>Insenerid ei pane alati uusi kettaid, seet\u00f5ttu lisasime kontrolli meie jaoks sobivate SMART v\u00e4\u00e4rtuste \u00fcle.<\/p>\n<p><b class=\"spoiler_title\">Milliseid atribuute me vaatame<\/b>Uuendatud sektorite arv (5) &lt; 100<br \/>\nPraegune ootel sektorite arv (107) == 0<\/p>\n<p>Kui ketas ei l\u00e4binud kontrolli, teavitatakse inseneri korduvast vahetamisest. Kui k\u00f5ik on korras, kustutatakse m\u00e4rgistus ja ketas viiakse ringlusse.<\/p>\n<h4>ready.yml<\/h4>\n<p>\nK\u00f5ige lihtsam juhtum: HW\/SW RAIDi s\u00fcnkroniseerimise kontrollimine v\u00f5i andmete s\u00fcnkroniseerimise l\u00f5petamine rakenduses.<\/p>\n<h3>Rakenduste API<\/h3>\n<p>\nOlen mitmel korral maininud, et sageli p\u00f6\u00f6rdub bott rakenduste API poole. Loomulikult ei olnud k\u00f5igil rakendustel vajalikud meetodid, seega tuli need t\u00e4iendada. Siin on k\u00f5ige olulisemad meetodid, mida me kasutame:<\/p>\n<ul>\n<li>Status. Klastri v\u00f5i ketta staatus, et m\u00f5ista, kas sellega saab t\u00f6\u00f6tada;\n<\/li>\n<li>Start\/stop. Ketta aktiveerimine-deaktiveerimine;\n<\/li>\n<li>Migrate\/restore. Andmete migreerimine ja taastamine vahetuse ajal ja p\u00e4rast seda.\n<\/li>\n<\/ul>\n<p><\/p>\n<h3>Kogemus Ansible'ist<\/h3>\n<p>\nMulle meeldib Ansible v\u00e4ga. Kuid sageli, kui vaatan erinevaid avatud l\u00e4htekoodiga projekte ja n\u00e4en, kuidas inimesed kirjutavad playbook'e, tunnen end natuke hirmutatuna. Komplekssed loogilised keerised, puuduv paindlikkus ja idempotentsus, mis tulenevad shell\/command'i sagedasest kasutamisest.<\/p>\n<p>Otsustasime k\u00f5ik v\u00f5imalikult lihtsaks muuta, kasutades Ansible'i eelist \u2014 moodulsust. K\u00f5ige k\u00f5rgemal tasemel on playbook'id, mida saab kirjutada iga administraator v\u00f5i v\u00e4line arendaja, kes veidi tunneb Ansible'it.<\/p>\n<pre><code class=\"plaintext\">- name: Wink 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>Kui m\u00f5nda loogikat on keeruline rakendada playbook'ides, viime selle Ansible moodulisse v\u00f5i filtrisse. Skripte saab kirjutada nii Pythonis kui ka m\u00f5nes muus keeles. <\/p>\n<p>Need on kergesti ja kiiresti kirjutatavad. N\u00e4iteks ketta vilkumise moodul, mille n\u00e4ide \u00fclal on, koosneb 265 reast.<\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/08e0384bfad24f3ee61e0643ca087852.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nK\u00f5ige madalamal tasemel on raamatukogu. Selle projekti jaoks l\u00f5ime eraldi rakenduse, omamoodi abstraktsiooni riist- ja tarkvarap\u00f5histe RAIDide \u00fcle, mis t\u00e4idavad vastavaid p\u00e4ringuid. <\/p>\n<p><img decoding=\"async\" alt=\"Kettavahetuse automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/0edda3182026ce6279bd84c99613e3d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAnsible'i tugevused on lihtsus ja arusaadavad playbook'id. Arvan, et peaksime seda kasutama ega genereerima hirmu\u00e4ratavaid yaml-faile ja tohutut arvu tingimusi, shell-koodi ja silmuseid.<\/p>\n<p>Kui soovite meie Ansible API kogemust korrata, pidage silmas kahte asja:<\/p>\n<ul>\n<li>Playbook_executor ja playbook'i ei saa \u00fcldse aega edasi anda. On olemas aeg ssh-seansile, kuid playbook'i jaoks ei ole aega. Kui me proovime lahti harutada ketast, mis s\u00fcsteemis enam ei eksisteeri, siis playbook t\u00f6\u00f6tab l\u00f5putult, seet\u00f5ttu pidime selle k\u00e4ivitamise panema eraldi wrapperisse ja tapma selle aja\u00fclesande t\u00f5ttu.\n<\/li>\n<li>Ansible t\u00f6\u00f6tab fork-protsesside alusel, seega ei ole selle API l\u00f5ngade turvaline. K\u00e4itame k\u00f5iki meie playbook'e \u00fche l\u00f5ngaga.\n<\/li>\n<\/ul>\n<p>\nL\u00f5puks suutsime automatiseerida umbes 80% ketaste vahetust. \u00dcldiselt on vahetuse kiirus kahekordistunud. T\u00e4na vaatab administraator lihtsalt intsidenti ja otsustab, kas on vaja ketast vahetada v\u00f5i mitte, ning seej\u00e4rel teeb \u00fche klikiga.<\/p>\n<p>Aga n\u00fc\u00fcd hakkame silmitsi seisma teise probleemiga: m\u00f5ned uued administraatorid ei tea, kuidas kettaid vahetada. \ud83d\ude42<br \/>\n<br \/>Allikas: <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.1.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\/et\/blog\/administrirovanie\/avtomatizatsiya-zameny-diskov-s-pomoshhyu-ansible\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\/et\/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\udd47Ketta vahetuse automatiseerimine Ansible'i abil | ProHoster","description":"Tere k\u00f5igile.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/avtomatizatsiya-zameny-diskov-s-pomoshhyu-ansible","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/34841","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=34841"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/34841\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/26233"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=34841"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=34841"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=34841"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}