{"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":"Kettade vahetamise automatiseerimine Ansible'i abil","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Kettade vahetamise 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. Olen O\u00dc peamine s\u00fcsteemihaldur ja vastutan portaali stabiilse t\u00f6\u00f6 eest. Soovin r\u00e4\u00e4kida, kuidas me oleme \u00fcles ehitanud automaatse ketaste vahetamise protsessi ning sellest, kuidas me selle protsessist administraatori v\u00e4lja t\u00f5ime ja asendasime ta botiga.<\/p>\n<p>See artikkel on omamoodi transliteratsioon <noindex><a rel=\"nofollow\" href=\"https:\/\/www.youtube.com\/watch?v=5WhbG3FQveE&amp;list=FLKN7KW1sxju7fWJvKuyKxEQ\">esinemisest<\/a><\/noindex> HighLoad+ 2018-l<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Ketaste vahetamise protsessi rajamine<\/h2>\n<p><\/p>\n<h3>Esmalt m\u00f5ned numbrid<\/h3>\n<p>\nO\u00dc on hiigelsuur teenus, mida kasutavad miljonid inimesed. Seda teenindavad umbes 7000 serverit, mis asuvad 4 erinevas andmekeskuses. Serverites on \u00fcle 70 000 ketta. Kui need \u00fcksteise peale laduda, saame torni, mis on k\u00f5rgem kui 1 km. <\/p>\n<p>K\u00f5vakettad on serveri komponent, mis t\u00f5useb k\u00f5ige sagedamini v\u00e4lja. Selliste mahtude korral peame n\u00e4dalas vahetama umbes 30 ketast ja see protseduur on muutunud ebameeldivaks rutiiniks.<\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/5e915e9077994efcc4e74a26fc6286fa.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Juhtumid<\/h3>\n<p>\nMeie ettev\u00f5ttes on rakendatud t\u00e4ielik s\u00fcndmuste haldamine. Iga s\u00fcndmus salvestatakse Jira, seej\u00e4rel lahendatakse ja anal\u00fc\u00fcsitakse. Kui s\u00fcndmus on m\u00f5jutanud kasutajaid, koguneme kindlasti ja arutame, kuidas sellistes olukordades kiiremini reageerida, kuidas v\u00e4hendada m\u00f5ju ja loomulikult, kuidas ennetada kordumist.<\/p>\n<p>Kettad ei ole erand. Nende seisundit j\u00e4lgib Zabbix. J\u00e4lgime Syslogi s\u00f5numeid kirjutamis-\/lugemisvihjete osas, anal\u00fc\u00fcsime HW\/SW raidide seisundit, j\u00e4lgime SMART-i ning SSD-de puhul arvutame kulumist. <\/p>\n<h3>Kuidas on kettad varem muutunud<\/h3>\n<p>\nKui Zabbixis s\u00fcttib m\u00f5ni k\u00e4ivitaja, luuakse Jira-s s\u00fcndmus ja see m\u00e4\u00e4ratakse automaatselt vastavatele inseneridele andmekeskustes. Teeme seda k\u00f5igi HW-s\u00fcndmustega, st sellistega, mis n\u00f5uavad mingit f\u00fc\u00fcsilist t\u00f6\u00f6d seadmetega andmekeskuses. <br \/>\nAndme keskuse insener on inimene, kes lahendab riistvara probleeme, vastutab serverite paigaldamise, hooldamise ja demonteerimise eest. P\u00e4rast probleemi registreerimist alustab insener t\u00f6\u00f6d. Ta vahetab ise kettaid ketaste riiulites. Kui tal ei ole juurdep\u00e4\u00e4su vajalikele seadmetele, p\u00f6\u00f6rdub insener valve s\u00fcsteemiadministraatorite poole abi saamiseks. Esiteks tuleb ketas rotatsioonist v\u00e4lja v\u00f5tta. Selleks tuleb serveris vajalikud muudatused teha, rakendused peatada ja kettast lahti monteerida.<\/p>\n<p>Valve s\u00fcsteemiadministraator vastutab oma t\u00f6\u00f6vahetuse jooksul kogu portaali toimimise eest. Ta uurib juhtumeid, tegeleb remontidega ning aitab arendajatel v\u00e4iksemaid \u00fclesandeid t\u00e4ita. Ta ei tegele aga k\u00f5vaketastega.<\/p>\n<p>Varem suhtlesid andmekeskuse insenerid s\u00fcsteemiadministraatoriga vestluses. Insenerid saatsid lingid Jira pileti juurde, administraator k\u00e4is need l\u00e4bi ja pidas logi mingis m\u00e4rkmikus. Kuid selliste \u00fclesannete jaoks on vestlused ebamugavad: teave on seal struktureerimata ja kaob kiiresti. Ja administraator v\u00f5is lihtsalt arvuti juurest eemale minna ning m\u00f5nda aega k\u00fcsimustele ei vastata, samas kui insener seisis serveri juures diskide virnaga ja ootas.<\/p>\n<p>Kuid k\u00f5ige halvem oli see, et administraatorid ei n\u00e4inud kogu pilti: milliseid kettaintsidente esineb, kus v\u00f5ib potentsiaalselt probleem tekkida. See on seotud sellega, et k\u00f5ik HW-intsidendid suuname inseneridele. Jah, oleks saanud kuvada k\u00f5ik intsidendid administraatori juhtpaneelil. Kuid neid on nii palju, et administraator kaasatakse vaid m\u00f5nele neist.<\/p>\n<p>Lisaks ei saanud insener \u00f5igesti prioriteete seada, kuna ta ei tea midagi konkreetsete serverite m\u00e4\u00e4ramisest ega andmete jaotamisest m\u00e4luseadmetele.<\/p>\n<h3>Uus asendamisprotseduur<\/h3>\n<p>\nEsimene asi, mida me tegime, oli k\u00f5ik kettaga seotud intsidentide v\u00e4ljav\u00f5ttmine eraldi t\u00fc\u00fcpi \u201eHW-ketas\u201c ning sellele lisati v\u00e4ljad \u201eblokeeringu nimi\u201c, \u201esuurus\u201c ja \u201eketta t\u00fc\u00fcp\u201c, et see teave salvestataks piletisse ja et seda ei peaks pidevalt vestluses vahetama. <\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/c4526bf668e31d90e0fbd061de44f1a7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOleme samuti kokku leppinud, et \u00fche intsidenti raames vahetame ainult \u00fche ketta. See lihtsustas oluliselt edasist automatiseerimise, statistika kogumise ja t\u00f6\u00f6protsessi. <\/p>\n<p>Lisaks lisasime v\u00e4lja \u201evastutav administraator\u201c. Sellele kantakse automaatselt asendajana inimese nimi. See on v\u00e4ga mugav, sest n\u00fc\u00fcd n\u00e4eb insener alati, kes on vastutav. Ei ole vaja minna kalendrisse ja otsida. Just see v\u00e4li v\u00f5imaldas administraatori armatuurlauda v\u00e4lja tuua pileteid, kus v\u00f5ib tekkida vajadus tema abi j\u00e4rele.<\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/5097e5dcca1fddd68d1e5f296c09f60a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nKuna k\u00f5ik osalised saaksid maksimaalset kasu uuendustest, oleme loonud filtrid ja armatuurlaud ning tutvustanud neid meeskonnale. Kui inimesed m\u00f5istavad muudatusi, ei hoia nad neist eemale nagu millestki tarbetust. Insenerile on oluline teada, milline on serveri rack'i number, ketta suurus ja t\u00fc\u00fcp. Administraatorile on oluline esmajoones m\u00f5ista, milline on see serverite gruppe ja milline v\u00f5ib olla efekt ketta vahetamisel.<\/p>\n<p>V\u00e4ljade olemasolu ja nende kuvamine on mugav, kuid see ei vabasta meid vajadusest kasutada vestlusi. Selleks pidime muutma t\u00f6\u00f6voogu. <\/p>\n<p>Varem oli see selline:<\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise 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, kui neile ei ole enam vaja administraatori abi.<\/p>\n<p>Esimene asi, mida me tegime, oli uus staatuse sisseviimine <b>Uuri<\/b>. Sellel staatustas on pilet, kui insener pole veel otsustanud, kas tal on administraatori abi vajalik v\u00f5i mitte. Selle staatuse kaudu saab insener edastada piletit administraatorile. Lisaks kasutame seda staatust piletite m\u00e4rkimiseks, kui ketas vajab vahetamist, kuid kohapeal ei ole kassetti. See juhtub CDN ja eemal asuvate kohtade korral.<\/p>\n<p>Samuti oleme lisanud staatuse <b>Valmis<\/b>. Pilet muudetakse p\u00e4rast ketta vahetamist. See t\u00e4hendab, et k\u00f5ik on juba tehtud, kuid serveris s\u00fcnkroniseeritakse HW\/SW RAID. Sellel v\u00f5ib kuluda \u00fcsna palju aega.<\/p>\n<p>Kui t\u00f6\u00f6 tegemiseks kaasatakse administraator, muutub skeem veidi keerulisemaks.<\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/5b6aacbb0d4049e62e7cb9ee28eb6498.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOlekust <b>Open<\/b> v\u00f5ib pileti muuta nii s\u00fcsteemiadministraator kui ka insener. Olekus <b>T\u00f6\u00f6s<\/b> administraator eemaldab ketta rotatsioonist, et insener saaks selle lihtsalt v\u00e4lja v\u00f5tta: l\u00fclitab sisse LED-valgustuse, monteerib ketta lahti, peatab rakendused, s\u00f5ltuvalt konkreetsetest serverigruppidest.<\/p>\n<p>Seej\u00e4rel muudetakse pilet olekusse <b>Valmis vahetamiseks<\/b>: see on m\u00e4rk insenerile, et ketas v\u00f5ib v\u00e4lja v\u00f5tta. K\u00f5ik v\u00e4ljad Jira-s on juba t\u00e4idetud, insener teab, milline t\u00fc\u00fcp ja suurus on kettal. Need andmed sisestatakse kas automaatselt eelmises olekus v\u00f5i administraatori poolt.<\/p>\n<p>P\u00e4rast ketta vahetamist muudetakse pilet olekusse <b>Vahetatud<\/b>. Kontrollitakse, et \u00f5ige ketas on paigaldatud, tehakse jaotus, k\u00e4ivitatakse rakendus ja m\u00f5ned andmete taastamise \u00fclesanded. Samuti v\u00f5ib pilet muutuda olekusse <b>Valmis<\/b>, sel juhul j\u00e4\u00e4b vastutavaks administraator, kuna tema viis ketta rotatsiooni. T\u00e4ielik skeem n\u00e4eb v\u00e4lja j\u00e4rgmine.<\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise 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. Meeskond on hakanud t\u00f6\u00f6tama struktureeritud teabega, mist\u00f5ttu on selge, milliseid samme tuleb teha ja millal. Prioriteedid on n\u00fc\u00fcd palju asjakohasemad, kuna need m\u00e4\u00e4rab administraator.<\/p>\n<p>Kohandatud suhtluskanalite vajadus on kadunud. Loomulikult v\u00f5ib administraator kirjutada insenerile, et \"siin tuleb kiiremini vahetada\" v\u00f5i \"\u00f5htu on k\u00e4es, kas j\u00f5uad vahetada?\" Kuid me ei suhtle enam igap\u00e4evaselt nende k\u00fcsimuste osas.<\/p>\n<p>Kettad vahetatakse n\u00fc\u00fcd partiidena. Kui administraator tuleb t\u00f6\u00f6le veidi varem, on tal vaba aega ja midagi pole veel juhtunud, v\u00f5ib ta valmistada ette rida servereid vahetamiseks: m\u00e4\u00e4rata v\u00e4ljad, v\u00f5tta kettad rotatsioonist v\u00e4lja ja edastada \u00fclesanne insenerile. Insener tuleb hiljem andmekeskusesse, n\u00e4eb \u00fclesannet, v\u00f5tab ladudest vajalikud salvestusseadmed ja vahetab need v\u00e4lkkiirusel. Tulemuseks on vahetuse kiirus suurenenud.<\/p>\n<h3>Teadmised, mis on saadud Workflow'i loomisel<\/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'i s\u00fcnkroniseerimise eest hoolitsevad insenerid, kuigi m\u00f5nedel isegi ei olnud sellele ligip\u00e4\u00e4su. M\u00f5ned juhtivinsenerid tegid seda, kuid mitte alati, sest protsess ei olnud kuskil kirjas.<\/li>\n<li><b>Protseduur peaks olema lihtne ja arusaadav.<\/b><br \/>\nInimesel on raske meeles pidada mitmeid samme. K\u00f5ige olulisemad k\u00f5rvalolevad staatused jiras tuleb tuua p\u00f5hiekraanile. Me v\u00f5ime neid \u00fcmber nimetada, n\u00e4iteks In progress me nimetame Ready to change. Teised staatused v\u00f5iks peita rippmen\u00fc\u00fcsse, et nad ei vaevaks silma. Kuid parem on mitte piirata inimesi, vaid anda v\u00f5imalus teha \u00fcleminek.<br \/>\nSelgitage v\u00e4lja uute algatuste v\u00e4\u00e4rtus. Kui inimesed m\u00f5istavad, aktsepteerivad nad uue protseduuri paremini. Meie jaoks oli v\u00e4ga oluline, et inimesed ei kl\u00f5psaks kogu protsessi l\u00e4bides, vaid j\u00e4rgiksid seda. Hiljem ehitasime selle p\u00f5hjal automatiseerimise.<\/li>\n<li><b>Oota, anal\u00fc\u00fcsi, uurige.<\/b><br \/>\nMe v\u00f5ttis umbes kuu, et v\u00e4lja t\u00f6\u00f6tada protseduur, tehnilised lahendused, kohtumised ja arutelud. Rakendamiseks kulus aga rohkem kui kolm kuud. Olen n\u00e4inud, kuidas inimesed j\u00e4rk-j\u00e4rgult hakkavad uut lahendust kasutama. Esimestel etappidel oli palju negatiivsust. Kuid see ei tulenenud protseduurist endast ega selle tehnilisest teostusest. N\u00e4iteks \u00fcks administraator kasutas mitte Jira't, vaid Jira-pluginat Confluence'is, ja m\u00f5ned asjad ei olnud talle kergesti k\u00e4ttesaadavad. N\u00e4itasime talle Jira't ning administraatori tootlikkus kasvas nii \u00fcldiste \u00fclesannete kui ka ketaste vahetuste osas.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Automatiseerimine ketaste vahetamiseks<\/h2>\n<p>\nOleme ketaste vahetamise automatiseerimisega mitmeid kordi l\u00e4henenud. Meil olid juba olemasolevad lahendused, skriptid, kuid need t\u00f6\u00f6tasid kas interaktiivses v\u00f5i k\u00e4si-re\u017eiimis ning vajasid k\u00e4ivitamist. Ja alles p\u00e4rast uue protseduuri rakendamist m\u00f5istsime, et see on see, mida me tegelikult vajasime.<\/p>\n<p>Kuna n\u00fc\u00fcd on asendamisprotsess jagatud etappideks, mille iga\u00fche puhul on m\u00e4\u00e4ratud vastutav isik ja tegevuste loend, saame automatiseerimist j\u00e4rk-j\u00e4rgult lisada, mitte kohe kogu ulatuses. N\u00e4iteks k\u00f5ige lihtsam etapp \u2014 Ready (RAID\/andmete s\u00fcnkroonimise kontroll) \u2014 saab kergesti delegeerida robotile. Kui robot veidi \u00f5pib, saame talle anda vastutustundlikuma \u00fclesande \u2014 ketta rotatsiooni sisseviimise jne.<\/p>\n<h3>Seadistuste loomine<\/h3>\n<p>\nEnne kui r\u00e4\u00e4gime robotist, teeme v\u00e4ikese ekskursiooni meie seadistuste loomise maailmas. Esiteks tuleneb see meie infrastruktuuri hiiglaslikust mahust. Teiseks p\u00fc\u00fcame iga teenuse jaoks leida optimaalse riistvara konfiguratsiooni. Meil on umbes 20 erinevat mudelit riistvara RAID, enamasti LSI ja Adaptec, kuid esinevad ka HP ja DELL erinevad versioonid. Igal RAID-kontrolleril on oma haldust\u00f6\u00f6riist. K\u00e4skude komplekt ja nende v\u00e4ljund v\u00f5ib iga RAID-kontrolleri puhul versioonist s\u00f5ltuvalt erineda. Seal, kus HW-RAID-i ei kasutata, v\u00f5ib olla mdraid.<\/p>\n<p>Peaaegu k\u00f5ik uued installatsioonid teeme ilma kettade varundamiseta. P\u00fc\u00fcame enam mitte kasutada riistvaralist ja tarkvaralist RAIDi, kuna varundame meie s\u00fcsteeme andmekeskuse tasemel, mitte serverite tasemel. Kuid loomulikult on palju vanemaid servereid, mida tuleb toetada.<\/p>\n<p>Kusagil on kettad RAID-kontrollerites \u00fchendatud raw-seadmetena, kusagil kasutatakse JBODi. On konfiguratsioone, kus serveris on ainult \u00fcks s\u00fcsteemiketas, ja kui see tuleb asendada, tuleb server uuesti \u00fcles seada, installides operatsioonis\u00fcsteemi ja rakendused, sealhulgas samade versioonide kaudu, seej\u00e4rel lisama konfiguratsioonifailid ja k\u00e4ivitama rakendused. Samuti on palju serverigruppide, kus varundamine toimub mitte kettas\u00fcsteemi tasemel, vaid otse rakendustes endis.<\/p>\n<p>Kokku on meil \u00fcle 400 ainulaadse serverigruppi, kus t\u00f6\u00f6tab umbes 100 erinevat rakendust. Sellise tohutu hulga variantide katmiseks vajasime mitmekesist automatiseerimist\u00f6\u00f6riista. Soovitavalt lihtsa DSL-iga, et seda saaks toetada mitte ainult see, kes selle kirjutas.<\/p>\n<p>Valisime Ansible'i, kuna see on agentvaba: ei olnud vaja infrastruktuuri ette valmistada ja see v\u00f5imaldas kiiret algust. Lisaks on see kirjutatud Pythonis, mis on meeskonnas standardiks.<\/p>\n<h3>\u00dcldine skeem<\/h3>\n<p>\nVaatame \u00fcldist automatiseerimise skeemi \u00fche intsidendi n\u00e4itel. Zabbix tuvastab, et disk sdb on rikki l\u00e4inud, s\u00fcttib k\u00e4ivitus ja luuakse pilet Jira-s. Administraator vaatab selle \u00fcle, m\u00f5istab, et see ei ole duplikaat ega vale positiivne ning otsustab, et disk tuleb vahetada, ja viib pileti olekusse In progress.<\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise 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 perioodiliselt Jira-st uusi pileteid. See tuvastab, et on ilmunud uus pilet olekuga In progress, aktiveerub vastav thread, mis k\u00e4ivitab playbook'i Ansible'is (see toimub iga Jira oleku jaoks). Antud juhul k\u00e4ivitub Prepare2change.<\/p>\n<p>Ansible saadetakse hostile, eemaldab disk rotatsioonist ja teatab oleku rakendusele l\u00e4bi Callbacks. <\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/8bfc13129f8deca640eb63ea81f616c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nTulemuste p\u00f5hjal viib bot automaatselt pileti olekusse Ready to change. Insener saab teate ja l\u00e4heb diski vahetama, p\u00e4rast mida viib pileti olekusse Changed. <\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/eeda06b6966f435e2172d3f9c61b341e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n\u00dclaltoodud skeemi kohaselt j\u00f5uab pilet tagasi botile, kes k\u00e4ivitab teise playbook'i, l\u00e4heb hosti ja lisab ketta rotatsiooni. Bot sulgeb pileti. Hurra!<\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise 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 s\u00fcsteemi m\u00f5nest komponendist.<\/p>\n<h3>Diskobot<\/h3>\n<p>\nSee rakendus on kirjutatud Pythonis. See valib tikette Jira's vastavalt JQL-ile. Pileti staatuse p\u00f5hjal j\u00f5uab see vastava t\u00f6\u00f6tleja juurde, kes omakorda k\u00e4ivitab vastavalt olekule 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 staatuse = Avatud ja \"Ketta suurus\" on T\u00dcHI'\n    interval: 180\n\n  inprogress:\n    jql: '\u2026  ja \"Ketta suurus\" ei ole T\u00dcHI ning \"Seadmere nimi\" ei ole T\u00dcHI'\n \n  ready:\n    jql: '\u2026 ja (sildid ei ole (\"dbot_ignore\") v\u00f5i sildid on T\u00dcHI)'\n    interval: 7200\n<\/code><\/pre>\n<p>\nN\u00e4iteks valitakse In progress olekus olevate tikettide hulgast v\u00e4lja ainult need, millel on t\u00e4idetud v\u00e4ljad Ketta suurus ja Seadmere nimi. Seadmere nimi on plokkseadmest saadud nimi, mis on vajalik playbook'i t\u00e4itmiseks. Ketta suurus on vajalik, et insener teaks, kui suurel kettal on vajadus.<\/p>\n<p>Ja Ready olekus olevate tikettide hulgast filtreeritakse v\u00e4lja tikettide, millel on sildid dbot_ignore. \u00dcldiselt kasutame Jira silte nii sarnaste filtreerimiste kui ka piletite dubleerimise m\u00e4rgistamiseks ning statistika kogumiseks.<\/p>\n<p>Jira m\u00e4\u00e4rab playbook\u2019i t\u00f5rke korral sildiks dbot_failed, et hiljem olukorda lahendada. <\/p>\n<h3>Koost\u00f6\u00f6 Ansible'iga<\/h3>\n<p>\nRakendus suhtleb Ansible'iga 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'is edastame faili nime ja muutujate kogumi. See v\u00f5imaldab hoida Ansible projekti tavaliste yml-failidena, mitte kirjeldada seda Python koodis. <\/p>\n<p>Lisaks edastatakse Ansible\u2019ile *extra_vars* kaudu plokkseadmise nimi, piletiseis ja callback_url, kus on peidetud issue key \u2014 seda kasutatakse HTTP callback\u2019is.<\/p>\n<p>Iga k\u00e4ivituse jaoks genereeritakse ajutine inventuur, mis koosneb \u00fchest hostist ja grupist, kuhu see host kuulub, et rakendada group_vars.<\/p>\n<p>Siin on n\u00e4ide \u00fclesandest, kus on rakendatud HTTP callback.<\/p>\n<p>Saame playbook\u2019ide k\u00e4itamise tulemusi 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 k\u00e4itamise tulemuste kohta. Seal on kirjeldatud \u00fclesandeid, mis on k\u00e4ivitatud, edukalt v\u00f5i eba\u00f5nnestunult t\u00e4idetud. See callback kutsutakse v\u00e4lja playbook\u2019i esitamise l\u00f5ppedes.<\/li>\n<li>HTTP callback, et saada teavet playbook\u2019i esitamise ajal. Ansible \u00fclesandes teeme POST\/GET p\u00e4ringu meie rakenduse suunas.<\/li>\n<\/ul>\n<p>\nHTTP callback(-ite) kaudu edastatakse muutujad, mis on m\u00e4\u00e4ratud playbook'i t\u00e4itmise ajal ja mida soovime salvestada ning kasutada j\u00e4rgnevates k\u00e4ivitustes. Need andmed salvestame sqlite'sse.<\/p>\n<p>Samuti j\u00e4tame HTTP callback'i kaudu kommentaare ja muudame pileti staatust.<\/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 paljusid sarnaseid \u00fclesandeid, oleme selle v\u00e4lja viinud eraldi yhte failina ja lisame vajadusel, et mitte pidevalt playbook'idest korrata. Siin figureerib callback_url, kuhu on embeditud issue key ja host name. Kui Ansible t\u00e4idab selle POST-p\u00e4ringu, m\u00f5istab bot, et see tuli teatud s\u00fcndmuse raames.<\/p>\n<p>Siin on n\u00e4ide playbook'ist, kus v\u00e4ljastasime 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 staatuse \u201eReady to change\u201c ja lisab kommentaari. Samuti salvestatakse muutuja mdam_data md-seadmete nimekiri, kust ketas eemaldati, ning parted_info sisaldab partitsiooni dumpi parted'ilt. <\/p>\n<p>Kui insener paigaldab uue ketta, saame neid muutujaid kasutada partitsioonide dumpi taastamiseks, samuti lisada ketta neisse md-seadmetesse, kust see eemaldati.<\/p>\n<h3>Ansible kontrollre\u017eiim<\/h3>\n<p>\nAutomaadi 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>, milles Ansible ei teosta serveritel mingeid toiminguid, vaid ainult simuleerib neid. <\/p>\n<p>Selline k\u00e4ivitamine k\u00e4ib l\u00e4bi eraldi callback-mooduli ning playbook'i k\u00e4itamise tulemus salvestatakse Jira's kommentaarina.<\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/b02d7f1dc428f2797ae8556cd496b115.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsiteks, see v\u00f5imaldas kontrollida boti ja playbook'ide t\u00f6\u00f6d. Teiseks, see t\u00f5stis administraatorite usaldust boti vastu. <\/p>\n<p>Kui olime valideerimise l\u00e4binud ja m\u00f5istsime, et Ansible\u2019i saab k\u00e4ivitada mitte ainult dry run re\u017eiimis, siis lisasime Jira'sse nupu Run Diskobot, et k\u00e4ivitada sama playbook'i samade muutujaid samas hostis, kuid tavare\u017eiimis. <\/p>\n<p>Lisaks kasutatakse nuppu playbook'i uuesti k\u00e4ivitamiseks, kui see eba\u00f5nnestub.<\/p>\n<h3>Playbook'ide struktuur<\/h3>\n<p>\nOlen juba maininud, et s\u00f5ltuvalt Jira-piletist k\u00e4ivitab bot erinevaid playbook'e.<\/p>\n<p>Esiteks, nii on palju lihtsam sisendit korraldada. <br \/>\nTeiseks, m\u00f5nel juhul on see lihtsalt vajalik. <\/p>\n<p>N\u00e4iteks, kui vahetame s\u00fcsteemis ketast, tuleb k\u00f5igepealt minna deploy-s\u00fcsteemi, luua \u00fclesanne ja p\u00e4rast \u00f5iget deployd muutub server juurdep\u00e4\u00e4setavaks ssh kaudu, ning sinna saab installida rakenduse. Kui me teeksime k\u00f5ike seda \u00fches playbook\u2019is, ei suudaks Ansible seda t\u00e4ita, kuna host ei oleks juurdep\u00e4\u00e4setav.<\/p>\n<p>Kasutame Ansible rolle igas serverigrupis. Siin on n\u00e4ha, kuidas on playbook\u2019id \u00fcles ehitatud \u00fches neist. <\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise 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, kuna on kohe selge, kus asuvad erinevad \u00fclesanded. Failis main.yml, mis on Ansible rolli sissep\u00e4\u00e4s, v\u00f5ib meil olla lihtsalt include vastavalt pileti staatusele 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\u2019i jaoks on k\u00f5ige olulisem plokiseadmise nimi. See teave ei pruugi alati olla saadaval. <\/p>\n<p>Selle saamiseks anal\u00fc\u00fcsime Jira kokkuv\u00f5tet ja Zabbixi k\u00e4ivitaja viimast v\u00e4\u00e4rtust. Seal v\u00f5ib olla plokiseadmestiku nimi \u2014 vedamine. V\u00f5ib aga ka olla mount point, \u2014 siis tuleb minna serverisse, seda anal\u00fc\u00fcsida ja vajalikket kettamahtusid arvutada. Samuti v\u00f5ib k\u00e4ivitaja edastada SCSI-aadressi v\u00f5i m\u00f5nda muud teavet. Kuid juhtub ka nii, et mingeid vihjeid pole, ja tuleb anal\u00fc\u00fcsida.<\/p>\n<p>Selgitanud plokiseadmestiku nime, kogume selle kohta teavet ketta t\u00fc\u00fcbi ja suuruse kohta, et t\u00e4ita v\u00e4ljad Jira-s. Kogume ka teavet tootja, mudeli, tarkvara, ID, SMART kohta ja k\u00f5ik need andmed lisame Jira piletile kommentaarina. N\u00fc\u00fcd ei pea administraator ja insener neid andmeid enam otsima. \ud83d\ude42<\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise 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 eemaldamine rotatsioonist, valmistumine asendamiseks. K\u00f5ige keerulisem ja vastutusrikkam etapp. Just siin saab rakenduse peatada, kui seda ei tohiks peatada. V\u00f5i eemaldada ketas, mille replikad puuduvad, ja seel\u00e4bi m\u00f5jutada kasutajaid, kaotades m\u00f5ningaid andmeid. Siin on meil k\u00f5ige rohkem kontrollimisi ja teavitusi vestluses.<\/p>\n<p>K\u00f5ige lihtsamal juhul r\u00e4\u00e4gime ketta eemaldamisest HW\/MD RAID-ist. <\/p>\n<p>Kuidas keerulisemates olukordades (meie salvestuss\u00fcsteemides), kui varundamine toimub rakenduse tasemel, tuleb rakendust kasutada API kaudu, et disk v\u00e4lja l\u00fclitada, deaktiveerida see ja alustada taastamist.<\/p>\n<p>Me liigume n\u00fc\u00fcd 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 ta kavandab t\u00f6\u00f6tada selle minioniga \u2014 serveriga, kus konteinerid on t\u00f6\u00f6le pandud \u2014 ja palub, et \"migreerige k\u00f5ik konteinerid sellest minionist\". Ja lisaks l\u00fclitab ta sisse ketta esilet\u00f5stmise, et insener saaks kohe aru, milline tuleb v\u00e4lja v\u00f5tta.<\/p>\n<h4>changed.yml<\/h4>\n<p>\nP\u00e4rast ketta vahetamist kontrollime k\u00f5igepealt selle k\u00e4ttesaadavust. <\/p>\n<p>Insenerid ei paigalda alati uusi kettaid, seet\u00f5ttu lisasime SMART-i n\u00f5uete kontrollimise.<\/p>\n<p><b class=\"spoiler_title\">Milliseid atribuute me vaatame<\/b>Reallocated Sectors Count (5) &lt; 100<br \/>\nCurrent Pending Sector Count (107) == 0<\/p>\n<p>Kui ketas ei vasta kontrollile, teavitatakse inseneri uuest vahetusest. Kui k\u00f5ik on korras, l\u00fclitatakse esilet\u00f5stmine v\u00e4lja, m\u00e4rgistatakse ja ketas viiakse rotatsiooni.<\/p>\n<h4>ready.yml<\/h4>\n<p>\nLihtsaim juhtum: HW\/SW raid s\u00fcnkroonimise kontroll v\u00f5i andmete s\u00fcnkroniseerimise l\u00f5petamine rakenduses.<\/p>\n<h3>Rakenduste API<\/h3>\n<p>\nOlen korduvalt maininud, et bot kutsub sageli rakenduste API-d. Loomulikult ei olnud k\u00f5ikidel rakendustel vajalikud meetodid, mist\u00f5ttu tuli neid t\u00e4iustada. Siin on k\u00f5ige olulisemad meetodid, mida me kasutame:<\/p>\n<ul>\n<li>Staatus. Klastri v\u00f5i ketta staatus, et m\u00f5ista, kas sellega on v\u00f5imalik t\u00f6\u00f6tada;\n<\/li>\n<li>K\u00e4ivita\/peata. Ketaste aktiveerimine-deaktiveerimine;\n<\/li>\n<li>Migreeri\/taasta. Andmete migreerimine ja taastamine ketta vahetamise ajal ja p\u00e4rast seda.\n<\/li>\n<\/ul>\n<p><\/p>\n<h3>Kogemuste jagamine Ansible'ist<\/h3>\n<p>\nMulle v\u00e4ga meeldib Ansible. Kuid sageli, kui vaatan erinevaid avatud l\u00e4htekoodiga projekte ja n\u00e4en, kuidas inimesed kirjutavad playbook'e, tunnen ma end natuke \u00e4revalt. Komplitseeritud loogilised seosed when\/loop, paindlikkuse ja idempotentsuse puudumine tiheda shell\/komandi kasutamise t\u00f5ttu.<\/p>\n<p>Oleme otsustanud k\u00f5ik v\u00f5imalikult lihtsaks teha, kasutades Ansible'i modulaarset l\u00e4henemist. K\u00f5ige k\u00f5rgemal tasemel on playbook'id, mida v\u00f5ib kirjutada iga administraator v\u00f5i s\u00f5ltumatu arendaja, kes natuke tunneb Ansible'it.<\/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>Kui m\u00f5ni loogika on playbook'idel keeruliselt elluviidav, viime selle Ansible moodulisse v\u00f5i filtrisse. Skripte v\u00f5ib kirjutada nii Pythonis kui ka m\u00f5nes muus keeles. <\/p>\n<p>Need on lihtsad ja kiired kirjutada. N\u00e4iteks diskihighlighting moodul, mille n\u00e4idet kasutame \u00fcleval, koosneb 265 realt.<\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/08e0384bfad24f3ee61e0643ca087852.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAlumisel tasemel on raamatukogu. Selle projekti jaoks kirjutasime eraldi rakenduse, omamoodi abstraktsiooni riistvara ja tarkvara RAID'ide \u00fcle, mis teevad vastavad p\u00e4ringud. <\/p>\n<p><img decoding=\"async\" alt=\"Kettade vahetamise automatiseerimine Ansible&#039;i abil\" src=\"\/wp-content\/uploads\/2019\/06\/0edda3182026ce6279bd84c99613e3d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAnsible'i k\u00f5ige tugevamad k\u00fcljed on lihtsus ja arusaadavad playbook'id. Usun, et sellest tuleb kasu l\u00f5igata ja mitte genereerida kohutavaid yaml-faile ning tohutut hulka tingimusi, shell-koodi ja silmusid.<\/p>\n<p>Kui soovite meie Ansible API kogemust korrata, pange t\u00e4hele kaht asja:<\/p>\n<ul>\n<li>Playbook_executor ja \u00fcldiselt playbook'i ei saa anda timeout'i. SSH-seansil on timeout, kuid playbook'il ei ole timeout'i. Kui proovime lahti monteerida kettast, mis s\u00fcsteemis enam ei eksisteeri, siis playbook k\u00e4ivitub l\u00f5pmatult, seega tuli selle k\u00e4ivitamine panna eraldi wrapper'i ja tappa see timeout'i j\u00e4rgi.\n<\/li>\n<li>Ansible t\u00f6\u00f6tab fork-protsesside alusel, seega ei ole selle API reentrant. K\u00e4ivitame k\u00f5ik meie playbook'id \u00fches harutorus.\n<\/li>\n<\/ul>\n<p>\nL\u00f5puks \u00f5nnestus meil automatiseerida umbes 80 % ketaste asendamisest. \u00dcldiselt on asendamise kiirus kahekordistunud. T\u00e4na vaatab administraator lihtsalt intsidendi \u00fcle ja otsustab, kas ketas tuleb v\u00e4lja vahetada v\u00f5i mitte, seej\u00e4rel teeb \u00fche kl\u00f5psu.<\/p>\n<p>Aga n\u00fc\u00fcd hakkame kokku puutuma 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 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\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\" \/>\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) 4.9.10\" \/>\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. \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\" \/>\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\udd47Ketaste vahetamise automatiseerimine Ansible abil | ProHoster","description":"Tere k\u00f5igile. Olen O\u00dc juhtiv s\u00fcsteemihaldur ja vastutan portaali stabiilse t\u00f6\u00f6 eest. Tahaksin r\u00e4\u00e4kida sellest, kuidas me oleme \u00fcles ehitanud automaatse ketaste vahetamise protsessi ja seej\u00e4rel, kuidas oleme selle protsessi juurest administraatori eemaldanud ja asendanud selle botiga. See artikkel on omamoodi transkriptsioon esitlusele HighLoad+ 2018 ketaste vahetamise protsessi \u00fclesehitamisest.","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. \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","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"},"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}]}}