{"id":80289,"date":"2020-05-05T01:42:36","date_gmt":"2020-05-04T23:42:36","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/ansible-migracziya-konfiguraczii-120-vm-c-coreos-na-centos-za-18-mesyaczev"},"modified":"2020-05-05T01:42:36","modified_gmt":"2020-05-04T23:42:36","slug":"ansible-migracziya-konfiguraczii-120-vm-c-coreos-na-centos-za-18-mesyaczev","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/ansible-migracziya-konfiguraczii-120-vm-c-coreos-na-centos-za-18-mesyaczev","title":{"rendered":"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/c12bef0589cc29a2a63840ecf5572357.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>To jest transkrypcja wyst\u0105pienia na <noindex><a rel=\"nofollow\" href=\"https:\/\/devopsconf.io\/moscow\/2019\/meetups#2331050\">DevopsConf 2019-10-01<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"http:\/\/spblug.org\/\">SPbLUG 2019-09-25<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>To jest historia projektu, w kt\u00f3rym u\u017cyto autorskiego systemu zarz\u0105dzania konfiguracj\u0105 i dlaczego migracja do Ansible zaj\u0119\u0142a 18 miesi\u0119cy.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"den---hhh-before-the-beginning\">Dzie\u0144 nr -XXX: Przed rozpocz\u0119ciem<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/22ebc514d85df93237e7f7d262a393a4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pocz\u0105tkowo infrastruktura sk\u0142ada\u0142a si\u0119 z wielu oddzielnych host\u00f3w zarz\u0105dzanych przez Hyper-V. Tworzenie maszyny wirtualnej wymaga\u0142o wielu dzia\u0142a\u0144: umieszczenia dysk\u00f3w w odpowiednich miejscach, skonfigurowania DNS, zarezerwowania DHCP, umieszczenia konfiguracji VM w repozytorium git. Ten proces by\u0142 cz\u0119\u015bciowo zautomatyzowany, ale na przyk\u0142ad maszyny wirtualne by\u0142y przydzielane mi\u0119dzy hostami manualnie. Na przyk\u0142ad programi\u015bci mogli edytowa\u0107 konfiguracj\u0119 VM w git i zastosowa\u0107 j\u0105, restartuj\u0105c VM.<\/p>\n<p><\/p>\n<h3 id=\"custom-configuration-management-solution\">Custom Configuration Management Solution<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/166b61b7f70c49ba06e622cd3592826f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pocz\u0105tkowo zak\u0142ada\u0142em, \u017ce pomys\u0142 by\u0142 planowany jako IaC: wiele maszyn wirtualnych bezstanowych, kt\u00f3re przy ponownym uruchomieniu resetowa\u0142y sw\u00f3j stan. Jakie by\u0142o zarz\u0105dzanie konfiguracjami VM? Schematycznie wygl\u0105da\u0142o to prosto:<\/p>\n<p><\/p>\n<ol>\n<li>Dla VM przypisywano statyczny adres MAC.<\/li>\n<li>Do VM pod\u0142\u0105czano ISO z CoreOS i dysk rozruchowy.<\/li>\n<li>CoreOS uruchamia skrypt dostosowuj\u0105cy, pobieraj\u0105c go z serwera WEB na podstawie swojego adresu IP.<\/li>\n<li>Skrypt pobiera przez SCP konfiguracj\u0119 VM na podstawie adresu IP.<\/li>\n<li>Uruchamiana jest sekwencja plik\u00f3w jednostek systemd oraz skrypt\u00f3w bash.<\/li>\n<\/ol>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/6baa343ddc2b8df8812f2ed282e5bc3a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>To rozwi\u0105zanie mia\u0142o wiele oczywistych problem\u00f3w:<\/p>\n<p><\/p>\n<ol>\n<li>ISO w CoreOS zosta\u0142o oznaczone jako przestarza\u0142e.<\/li>\n<li>Wiele skomplikowanych zautomatyzowanych dzia\u0142a\u0144 i magii podczas migracji\/tworzenia VM.<\/li>\n<li>Problemy z aktualizacj\u0105 i gdy potrzebne by\u0142o oprogramowanie w konkretnej wersji. Jeszcze wi\u0119cej problem\u00f3w z modu\u0142ami j\u0105dra.<\/li>\n<li>VM nie by\u0142y tak zupe\u0142nie bezdane, to znaczy powsta\u0142y VM z zamontowanym dodatkowym dyskiem z danymi u\u017cytkownik\u00f3w.<\/li>\n<li>Kto\u015b zawsze robi\u0142 b\u0142\u0105d z zale\u017cno\u015bciami jednostek systemd, przez co CoreOS si\u0119 zawiesza\u0142 podczas ponownego uruchamiania. Z u\u017cywanych narz\u0119dzi w CoreOS, zdiagnozowanie tego by\u0142o problematyczne.<\/li>\n<li>Zarz\u0105dzanie sekretami.<\/li>\n<li>W zasadzie nie by\u0142o CM. By\u0142 bash i konfiguracje YML w CoreOS.<\/li>\n<\/ol>\n<p><\/p>\n<p>Aby zastosowa\u0107 konfiguracj\u0119 VM, trzeba j\u0105 by\u0142o zrestartowa\u0107, ale mog\u0142a si\u0119 nie uruchomi\u0107. Wydaje si\u0119 to oczywistym problemem, ale brakowa\u0142o trwa\u0142ych dysk\u00f3w \u2014 nie by\u0142o gdzie zapisywa\u0107 log\u00f3w. No dobrze, spr\u00f3bujmy doda\u0107 opcje do \u0142adowania j\u0105dra, \u017ceby logi by\u0142y przesy\u0142ane. Ale nie, to wszystko jest tak skomplikowane.<\/p>\n<p><\/p>\n<h2 id=\"den-0-priznanie-problemy\">Dzie\u0144 nr 0: Uzna\u0107 problem<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/d80b98b91624085d5d11fc54647a55bc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>To by\u0142a zwyk\u0142a infrastruktura deweloperska: jenkins, \u015brodowiska testowe, monitorowanie, registry. CoreOS zosta\u0142a zaprojektowana do hostowania klastr\u00f3w k8s, wi\u0119c problem polega\u0142 na tym, jak u\u017cywano CoreOS. Pierwszym krokiem by\u0142 wyb\u00f3r stacka. Zatrzymali\u015bmy si\u0119 na:<\/p>\n<p><\/p>\n<ol>\n<li><strong>CentOS<\/strong> jako podstawowy dystrybucja, poniewa\u017c to najbli\u017csza dystrybucja do \u015brodowisk produkcyjnych.<\/li>\n<li><strong>Ansible<\/strong> do zarz\u0105dzania konfiguracjami, poniewa\u017c by\u0142a na ten temat obszerna ekspertyza.<\/li>\n<li><strong>Jenkins<\/strong> jako framework automatyzacji istniej\u0105cych proces\u00f3w, poniewa\u017c by\u0142 ju\u017c aktywnie wykorzystywany w procesach deweloperskich.<\/li>\n<li><strong>Hyper-V<\/strong> jako platforma wirtualizacji. Istnieje wiele powod\u00f3w, kt\u00f3re wykraczaj\u0105 poza zakres tej historii, ale w skr\u00f3cie - nie mo\u017cemy korzysta\u0107 z chmur, musimy korzysta\u0107 ze swojego sprz\u0119tu.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"den-30-fiksiruem-suschestvuyuschie-dogovorennosti---agreements-as-code\">Dzie\u0144 nr 30: Utrwalamy istniej\u0105ce umowy \u2014 Agreements as Code<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/47a8cc980940b5080e195267d686df25.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Gdy stack sta\u0142 si\u0119 jasny, rozpocz\u0119\u0142y si\u0119 przygotowania do przeprowadzki. Utrwalenie istniej\u0105cych um\u00f3w w postaci kodu (<strong>Agreements as Code<\/strong>!). Przej\u015bcie <em>praca r\u0119czna<\/em> -&gt; <em>mechanizacja<\/em> -&gt; <em>automatyzacja<\/em>.<\/p>\n<p><\/p>\n<h4 id=\"1-configure-vms\">1. Konfiguracja VM<\/h4>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/90b3c4ec5d4234fc218295bd9a34d676.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ansible doskonale radzi sobie z tym zadaniem. Z minimalnym wysi\u0142kiem mo\u017cna przej\u0105\u0107 kontrol\u0119 nad konfiguracjami VM:<\/p>\n<p><\/p>\n<ol>\n<li>Tworzymy repozytorium git.<\/li>\n<li>Umieszczamy list\u0119 VM w inventory, konfiguracje w playbookach i rolach.<\/li>\n<li>Konfigurujemy specjalnego slave'a jenkinsa, z kt\u00f3rego mo\u017cna b\u0119dzie uruchamia\u0107 ansible.<\/li>\n<li>Tworzymy job, konfigurujemy Jenkins.<\/li>\n<\/ol>\n<p><\/p>\n<p>Pierwszy proces gotowy. Umowy utrwalone.<\/p>\n<p><\/p>\n<h4 id=\"2-create-new-vm\">2. Utworzenie nowej VM<\/h4>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/3f6a02b170e28fd34e8f5fa65d1606c2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tutaj wszystko by\u0142o do\u015b\u0107 niewygodne. Z linuksa niewygodnie jest tworzy\u0107 VM na Hyper-V. Jedn\u0105 z pr\u00f3b zmechanizowania tego procesu by\u0142o:<\/p>\n<p><\/p>\n<ol>\n<li>Ansible \u0142\u0105czy si\u0119 przez WinRM z hostem windows.<\/li>\n<li>Ansible uruchamia skrypt powershell.<\/li>\n<li>Skrypt Powershell tworzy now\u0105 VM.<\/li>\n<li>Narz\u0119dzia Hyper-V\/ScVMM przy tworzeniu VM w go\u015bciach ustawiaj\u0105 hostname.<\/li>\n<li>VM podczas aktualizacji DHCP lease wysy\u0142a sw\u00f3j hostname.<\/li>\n<li>Standardowa integracja ddns &amp; dhcp po stronie Domain Controller konfiguruje rekord DNS.<\/li>\n<li>Mo\u017cna dodawa\u0107 VM do inventory i konfigurowa\u0107 j\u0105 w Ansible.<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"3-create-vm-template\">3. Utworzenie szablonu VM<\/h4>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/f10929c1bd5b350c16bb691dce61653a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Tutaj nie wymy\u015blono nic nowego - u\u017cyto packera.<\/p>\n<p><\/p>\n<ol>\n<li>W repozytorium git umieszczamy konfiguracj\u0119 packera, kickstart.<\/li>\n<li>Konfigurujemy specjalnego slave'a jenkinsa z hyper-v i packerem.<\/li>\n<li>Tworzymy job, konfigurujemy Jenkins.<\/li>\n<\/ol>\n<p><\/p>\n<p>Jak dzia\u0142a ta wsp\u00f3\u0142praca:<\/p>\n<p><\/p>\n<ol>\n<li>Packer tworzy pust\u0105 VM, pod\u0142\u0105cza ISO.<\/li>\n<li>VM uruchamia si\u0119, Packer wprowadza do bootloadera polecenie u\u017cycia naszego pliku kickstart z dyskietki lub http.<\/li>\n<li>Uruchamia si\u0119 anaconda z naszym konfiguracj\u0105, przeprowadzana jest wst\u0119pna konfiguracja OS.<\/li>\n<li>Packer czeka na dost\u0119pno\u015b\u0107 VM.<\/li>\n<li>Packer wewn\u0105trz VM uruchamia ansible w trybie lokalnym.<\/li>\n<li>Ansible dzia\u0142a przy u\u017cyciu dok\u0142adnie tych samych r\u00f3l, co w kroku nr 1.<\/li>\n<li>Packer eksportuje szablon VM.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"den-75-refaktorim-dogovorennosti-ne-lomaya--test-ansible--testkitchen\">Dzie\u0144 nr 75: Refaktoryzujemy ustalenia, nie \u0142ami\u0105c = Test ansible + Testkitchen.<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/1b90074f3b17a77a732a259efdda518c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Utrwalenie ustale\u0144 w kodzie mo\u017ce by\u0107 niewystarczaj\u0105ce. Je\u015bli w procesie w pod\u0142o\u017cu zechcesz co\u015b zmieni\u0107 \u2014 mo\u017cesz co\u015b zepsu\u0107. Dlatego w przypadku infrastruktury pojawia si\u0119 testowanie tej infrastruktury. Aby zsynchronizowa\u0107 wiedz\u0119 w ramach zespo\u0142u, zacz\u0119li\u015bmy testowa\u0107 role Ansible. Nie b\u0119d\u0119 si\u0119 zag\u0142\u0119bia\u0107, poniewa\u017c jest artyku\u0142 opisuj\u0105cy zdarzenia w tamtym czasie. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/437004\/\">Przetestuj mnie, je\u015bli potrafisz, lub czy programi\u015bci YML marz\u0105 o testowaniu ansible?<\/a><\/noindex>(spoilery, to nie by\u0142a ostateczna wersja, a p\u00f3\u017aniej wszystko sta\u0142o si\u0119 bardziej skomplikowane. <noindex><a rel=\"nofollow\" href=\"http:\/\/www.goncharov.xyz\/it\/ansible-testing-ru.html\">Jak zacz\u0105\u0107 testowa\u0107 Ansible, refaktoryzowa\u0107 projekt w ci\u0105gu roku i nie straci\u0107 rozumu.<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h3 id=\"den-130-a-mozhet-centosansible-ne-nuzhen-mozhet-openshift\">Dzie\u0144 nr 130: A mo\u017ce CentOS + ansible nie jest potrzebne? Mo\u017ce openshift?<\/h3>\n<p><\/p>\n<p>Trzeba rozumie\u0107, \u017ce proces wprowadzania infrastruktury nie by\u0142 jedynym, by\u0142y r\u00f3wnie\u017c poboczne podprojekty. Na przyk\u0142ad, pojawi\u0142 si\u0119 wniosek o uruchomienie naszej aplikacji w openshift, co prze\u0142o\u017cy\u0142o si\u0119 na badania trwaj\u0105ce co najmniej tydzie\u0144. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/441928\/\">Uruchamiamy aplikacj\u0119 w Openshift i por\u00f3wnujemy dost\u0119pne narz\u0119dzia.<\/a><\/noindex> co spowolni\u0142o proces migracji. Okaza\u0142o si\u0119, \u017ce openshift nie zaspokaja wszystkich potrzeb, potrzebny jest prawdziwy sprz\u0119t lub przynajmniej mo\u017cliwo\u015b\u0107 zabawy z j\u0105drem.<\/p>\n<p><\/p>\n<h3 id=\"den-170-openshift-ne-podhodit-risknem-s-windows-azure-pack\">Dzie\u0144 nr 170: Openshift nie pasuje, zaryzykujemy z Windows Azure Pack?<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/73cbf7fd7e0330676c4d937df68289f5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hyper-V nie jest zbyt przyjazny, SCVMM nie poprawia sytuacji. Ale jest co\u015b takiego jak Windows Azure Pack, kt\u00f3re jest nak\u0142adk\u0105 na SCVMM i imituje Azure. Jednak w rzeczywisto\u015bci produkt wydaje si\u0119 porzucony: dokumentacja z uszkodzonymi linkami i do\u015b\u0107 uboga. Ale w ramach bada\u0144 nad uproszczeniem \u017cycia naszego chmury, przygl\u0105dali\u015bmy si\u0119 r\u00f3wnie\u017c temu.<\/p>\n<p><\/p>\n<h3 id=\"den-250-windows-azure-pack-ne-ochen-ostaemsya-na-scvmm\">Dzie\u0144 nr 250: Windows Azure Pack nie jest za dobry. Zostajemy przy SCVMM.<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/8753b3da72adfb035d1a2f23ad28809b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Windows Azure Pack wygl\u0105da\u0142 obiecuj\u0105co, ale zdecydowano si\u0119 nie wprowadza\u0107 WAP z jego z\u0142o\u017cono\u015bciami do systemu dla zb\u0119dnych funkcji i pozosta\u0107 przy SCVMM.<\/p>\n<p><\/p>\n<h3 id=\"den-360-edim-slona-po-chastyam\">Dzie\u0144 nr 360: Jemy s\u0142onia kawa\u0142kami.<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/84e003906234c46b57b7769abd7b7993.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Dopiero po roku platforma by\u0142a gotowa do migracji i rozpocz\u0105\u0142 si\u0119 proces przenoszenia. W tym celu zosta\u0142a postawiona zadanie S.M.A.R.T. Spisali\u015bmy wszystkie VMs i zacz\u0119li\u015bmy stopniowo zajmowa\u0107 si\u0119 konfiguracj\u0105, opisywa\u0107 j\u0105 w Ansible, pokrywa\u0107 testami.<\/p>\n<p><\/p>\n<h3 id=\"den-450-kakaya-sistema-poluchilas\">Dzie\u0144 nr 450: Jaki system otrzymali\u015bmy?<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/1d0c64e6a229a0b4e0e49f7b832147ba.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Sam proces nie jest interesuj\u0105cy. Jest rutynowy; mo\u017cna zauwa\u017cy\u0107, \u017ce wi\u0119kszo\u015b\u0107 konfiguracji by\u0142a stosunkowo prosta lub izomorficzna, a wed\u0142ug zasady Pareto 80% konfiguracji w VM zaj\u0119\u0142o 20% czasu. Tym samym 80% czasu posz\u0142o na przygotowanie przeprowadzki, a tylko 20% na sam\u0105 przeprowadzk\u0119. <\/p>\n<p><\/p>\n<h2 id=\"den-540-final\">Dzie\u0144 nr 540: Fina\u0142<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy\" src=\"\/wp-content\/uploads\/2020\/05\/7e3d1936dca58506d3b8efcf4ee3c115.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Co si\u0119 wydarzy\u0142o w ci\u0105gu ostatnich 18 miesi\u0119cy?<\/p>\n<p><\/p>\n<ol>\n<li>Uzgodnienia sta\u0142y si\u0119 kodem.<\/li>\n<li><em>Praca r\u0119czna<\/em> -&gt; <em>Mechanizacja<\/em> -&gt; <em>Automatyzacja<\/em>.<\/li>\n<\/ol>\n<p><\/p>\n<h2 id=\"links\">Linki<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/500350\/\">Wersja angielska<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.goncharov.xyz\/it\/coreos2centos-ru.html\">Post crossowy z osobistego bloga<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.mail.ru\/public\/UDCZ\/WM4Y9Qv3j\">slajdy<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/500058\/\">Jak zacz\u0105\u0107 testowa\u0107 Ansible, refaktoryzowa\u0107 projekt w ci\u0105gu roku i nie straci\u0107 rozumu.<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/467171\/\">Wnioski z testowania ponad 200 000 linii kodu infrastruktury<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/441928\/\">Deployujemy na openshift<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/342216\/\">Jak przetestowa\u0107 w\u0142asn\u0105 dystrybucj\u0119 systemu operacyjnego<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/437004\/\">Przetestuj mnie, je\u015bli potrafisz. Czy programi\u015bci YML marz\u0105 o testowaniu ansible?<\/a><\/noindex><\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/500040\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f \u043d\u0430 DevopsConf 2019-10-01 \u0438 SPbLUG 2019-09-25. \u042d\u0442\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438 \u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u0435\u0440\u0435\u0435\u0437\u0434 \u043d\u0430 Ansible \u0437\u0430\u0442\u044f\u043d\u0443\u043b\u0441\u044f \u043d\u0430 18 \u043c\u0435\u0441\u044f\u0446\u0435\u0432. \u0414\u0435\u043d\u044c \u2116 -\u0425\u0425\u0425: Before the beginning \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u043b\u0430 \u0441\u043e\u0431\u043e\u0439 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0445\u043e\u0441\u0442\u043e\u0432 \u043f\u043e\u0434 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c Hyper-V. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439: \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0434\u0438\u0441\u043a\u0438 \u0432 \u043d\u0443\u0436\u043d\u043e\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":80290,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-80289","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=\"\u042d\u0442\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\/pl\/blog\/administrirovanie\/ansible-migracziya-konfiguraczii-120-vm-c-coreos-na-centos-za-18-mesyaczev\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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\udd47Ansible: \u041c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 120 VM c CoreOS \u043d\u0430 CentOS \u0437\u0430 18 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/ansible-migracziya-konfiguraczii-120-vm-c-coreos-na-centos-za-18-mesyaczev\" \/>\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=\"2020-05-04T23:42:36+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-05-04T23:42:36+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\udd47Ansible: Migracja konfiguracji 120 VM z CoreOS na CentOS w ci\u0105gu 18 miesi\u0119cy | ProHoster","description":"To.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/ansible-migracziya-konfiguraczii-120-vm-c-coreos-na-centos-za-18-mesyaczev","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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\udd47Ansible: \u041c\u0438\u0433\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 120 VM c CoreOS \u043d\u0430 CentOS \u0437\u0430 18 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 | ProHoster","og:description":"\u042d\u0442\u043e.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/ansible-migracziya-konfiguraczii-120-vm-c-coreos-na-centos-za-18-mesyaczev","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":"2020-05-04T23:42:36+00:00","article:modified_time":"2020-05-04T23:42:36+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"80289","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:21:22","updated":"2022-09-30 18:16:02","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/80289","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=80289"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/80289\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/80290"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=80289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=80289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=80289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}