{"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\/pt\/blog\/administrirovanie\/ansible-migracziya-konfiguraczii-120-vm-c-coreos-na-centos-za-18-mesyaczev","title":{"rendered":"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/c12bef0589cc29a2a63840ecf5572357.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Esta \u00e9 a transcri\u00e7\u00e3o da apresenta\u00e7\u00e3o em <noindex><a rel=\"nofollow\" href=\"https:\/\/devopsconf.io\/moscow\/2019\/meetups#2331050\">DevopsConf 2019-10-01<\/a><\/noindex> e <noindex><a rel=\"nofollow\" href=\"http:\/\/spblug.org\/\">SPbLUG 2019-09-25<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Esta \u00e9 a hist\u00f3ria de um projeto que utilizou um sistema de gerenciamento de configura\u00e7\u00f5es feito sob medida e porque a migra\u00e7\u00e3o para o Ansible levou 18 meses.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"den---hhh-before-the-beginning\">Dia n\u00ba -XXX: Antes do come\u00e7o<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/22ebc514d85df93237e7f7d262a393a4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Inicialmente, a infraestrutura consistia em v\u00e1rios hosts independentes gerenciados pelo Hyper-V. Criar uma m\u00e1quina virtual exigia v\u00e1rias a\u00e7\u00f5es: colocar os discos no lugar certo, configurar o DNS, reservar o DHCP, colocar a configura\u00e7\u00e3o da VM no reposit\u00f3rio git. Este processo foi parcialmente mecanizado, mas, por exemplo, as VMs eram distribu\u00eddas entre os hosts manualmente. No entanto, os desenvolvedores podiam corrigir a configura\u00e7\u00e3o da VM no git e aplic\u00e1-la reiniciando a VM.<\/p>\n<p><\/p>\n<h3 id=\"custom-configuration-management-solution\">Solu\u00e7\u00e3o Personalizada de Gerenciamento de Configura\u00e7\u00e3o<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/166b61b7f70c49ba06e622cd3592826f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>A ideia inicial, suspeito, foi pensada como IaC: v\u00e1rias VMs stateless que, ao reiniciar, zeravam seu estado. Como era o gerenciamento de configura\u00e7\u00f5es das VMs? Em termos esquem\u00e1ticos, parecia simples:<\/p>\n<p><\/p>\n<ol>\n<li>Para as VMs, um MAC est\u00e1tico era atribu\u00eddo.<\/li>\n<li>Conectava-se uma ISO com o CoreOS e um disco de boot.<\/li>\n<li>O CoreOS executa um script de customiza\u00e7\u00e3o, baixando-o do servidor WEB com base em seu IP.<\/li>\n<li>O script baixa a configura\u00e7\u00e3o da VM via SCP, baseando-se no endere\u00e7o IP.<\/li>\n<li>Uma s\u00e9rie de arquivos de unidade do systemd e uma s\u00e9rie de scripts bash s\u00e3o executados.<\/li>\n<\/ol>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/6baa343ddc2b8df8812f2ed282e5bc3a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Essa solu\u00e7\u00e3o apresentava v\u00e1rios problemas \u00f3bvios:<\/p>\n<p><\/p>\n<ol>\n<li>A ISO no CoreOS estava obsoleta.<\/li>\n<li>Muitas a\u00e7\u00f5es complexas e m\u00e1gicas durante a migra\u00e7\u00e3o\/cria\u00e7\u00e3o das VMs.<\/li>\n<li>Dificuldade com as atualiza\u00e7\u00f5es e quando um determinado software \u00e9 necess\u00e1rio. Isso se tornava ainda mais complicado com os m\u00f3dulos do kernel.<\/li>\n<li>As VMs n\u00e3o estavam t\u00e3o desprovidas de dados assim, ou seja, surgiram VMs que montavam um disco adicional com dados do usu\u00e1rio.<\/li>\n<li>Constantemente algu\u00e9m cometia erros com depend\u00eancias do systemd e, ao reiniciar, o CoreOS travava. Era problem\u00e1tico identificar isso com os recursos dispon\u00edveis no CoreOS.<\/li>\n<li>Gerenciamento de segredos.<\/li>\n<li>Praticamente n\u00e3o havia CM. Havia bash e arquivos de configura\u00e7\u00e3o YML do CoreOS.<\/li>\n<\/ol>\n<p><\/p>\n<p>Para aplicar a configura\u00e7\u00e3o da VM, era necess\u00e1rio reinici\u00e1-la, mas ela poderia n\u00e3o reiniciar. Uma aparente problema \u00f3bvio, mas sem discos persistentes \u2014 n\u00e3o havia para onde salvar logs. Bem, vamos tentar adicionar op\u00e7\u00f5es de kernel para que os logs sejam enviados. Mas n\u00e3o, tudo isso era muito complicado.<\/p>\n<p><\/p>\n<h2 id=\"den-0-priznanie-problemy\">Dia n\u00ba 0: Reconhecimento do problema<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/d80b98b91624085d5d11fc54647a55bc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Essa era uma infraestrutura de desenvolvimento comum: jenkins, ambientes de teste, monitoramentos, registry. O CoreOS foi projetado para hospedar clusters k8s, ou seja, o problema estava em como o CoreOS era utilizado. O primeiro passo foi a escolha da pilha. N\u00f3s optamos por:<\/p>\n<p><\/p>\n<ol>\n<li><strong>CentOS<\/strong> como a distribui\u00e7\u00e3o base, pois esta \u00e9 a distribui\u00e7\u00e3o mais pr\u00f3xima de ambientes de produ\u00e7\u00e3o.<\/li>\n<li><strong>Ansible<\/strong> para gerenciamento de configura\u00e7\u00f5es, pois havia uma ampla expertise nessa \u00e1rea.<\/li>\n<li><strong>Jenkins<\/strong> como framework de automa\u00e7\u00e3o de processos existentes, pois j\u00e1 estava sendo utilizado ativamente nos processos de desenvolvimento.<\/li>\n<li><strong>Hyper-V<\/strong> como plataforma de virtualiza\u00e7\u00e3o. Existem v\u00e1rias raz\u00f5es, al\u00e9m do que foi contado, mas resumindo \u2014 n\u00e3o podemos usar nuvens, devemos usar nosso pr\u00f3prio hardware.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"den-30-fiksiruem-suschestvuyuschie-dogovorennosti---agreements-as-code\">Dia n\u00ba 30: Documentando acordos existentes \u2014 Agreements as Code<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/47a8cc980940b5080e195267d686df25.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Quando a pilha foi definida, a prepara\u00e7\u00e3o para a migra\u00e7\u00e3o come\u00e7ou. A codifica\u00e7\u00e3o dos acordos existentes como c\u00f3digo (<strong>Agreements as Code<\/strong>!). A transi\u00e7\u00e3o <em>trabalho manual<\/em> -&gt; <em>mecaniza\u00e7\u00e3o<\/em> -&gt; <em>automa\u00e7\u00e3o<\/em>.<\/p>\n<p><\/p>\n<h4 id=\"1-configure-vms\">1. Configurar VMs<\/h4>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/90b3c4ec5d4234fc218295bd9a34d676.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>O Ansible lida muito bem com essa tarefa. Com o m\u00ednimo de esfor\u00e7o, podemos gerenciar as configura\u00e7\u00f5es das VMs:<\/p>\n<p><\/p>\n<ol>\n<li>Criamos um reposit\u00f3rio git.<\/li>\n<li>Colocamos a lista de VMs no invent\u00e1rio, as configura\u00e7\u00f5es nos playbooks e pap\u00e9is.<\/li>\n<li>Configuramos um slave jenkins especial do qual ser\u00e1 poss\u00edvel executar o ansible.<\/li>\n<li>Criamos um job, configuramos o Jenkins.<\/li>\n<\/ol>\n<p><\/p>\n<p>O primeiro processo est\u00e1 pronto. Os acordos foram documentados.<\/p>\n<p><\/p>\n<h4 id=\"2-create-new-vm\">2. Criar nova VM<\/h4>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/3f6a02b170e28fd34e8f5fa65d1606c2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aqui tudo estava um pouco complicado. A partir do Linux, n\u00e3o \u00e9 muito f\u00e1cil criar VMs no Hyper-V. Uma das tentativas de automatizar esse processo foi:<\/p>\n<p><\/p>\n<ol>\n<li>Ansible se conecta ao host Windows via WinRM.<\/li>\n<li>Ansible executa um script PowerShell.<\/li>\n<li>O script PowerShell cria uma nova VM.<\/li>\n<li>Com ferramentas Hyper-V\/ScVMM, ao criar a VM, o hostname \u00e9 configurado no sistema operacional convidado.<\/li>\n<li>A VM, ao renovar o lease DHCP, envia seu hostname.<\/li>\n<li>A integra\u00e7\u00e3o padr\u00e3o ddns &amp; dhcp no lado do Controller de Dom\u00ednio configura o registro DNS.<\/li>\n<li>\u00c9 poss\u00edvel adicionar VMs ao invent\u00e1rio e configur\u00e1-las com Ansible.<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"3-create-vm-template\">3. Criar template de VM<\/h4>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/f10929c1bd5b350c16bb691dce61653a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aqui n\u00e3o inventamos nada \u2014 usamos o packer.<\/p>\n<p><\/p>\n<ol>\n<li>No reposit\u00f3rio git, colocamos a configura\u00e7\u00e3o do packer, kickstart.<\/li>\n<li>Configuramos um slave jenkins especial com hyper-v e Packer.<\/li>\n<li>Criamos um job, configuramos o Jenkins.<\/li>\n<\/ol>\n<p><\/p>\n<p>Como funciona essa combina\u00e7\u00e3o:<\/p>\n<p><\/p>\n<ol>\n<li>O Packer cria uma VM vazia e anexa o ISO.<\/li>\n<li>A VM \u00e9 inicializada, o Packer informa ao carregador para usar nosso arquivo kickstart a partir do disquete ou http.<\/li>\n<li>O anaconda \u00e9 iniciado com nossa configura\u00e7\u00e3o, efetuando a configura\u00e7\u00e3o inicial do sistema operacional.<\/li>\n<li>O Packer aguarda a disponibilidade da VM.<\/li>\n<li>O Packer dentro da VM executa o ansible em modo local.<\/li>\n<li>O Ansible utiliza exatamente os mesmos pap\u00e9is que no passo n\u00ba 1.<\/li>\n<li>O Packer exporta o modelo de VM.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"den-75-refaktorim-dogovorennosti-ne-lomaya--test-ansible--testkitchen\">Dia n\u00ba 75: Refatorando acordos sem quebrar = Teste ansible + Testkitchen<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/1b90074f3b17a77a732a259efdda518c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fixar acordos no c\u00f3digo pode n\u00e3o ser suficiente. Afinal, se no fundo do processo voc\u00ea quiser mudar algo, pode acabar quebrando alguma coisa. Portanto, em infraestrutura, surge a necessidade de testar essa pr\u00f3pria infraestrutura. Para sincronizar o conhecimento dentro da equipe, come\u00e7amos a testar os pap\u00e9is do Ansible. N\u00e3o vou me aprofundar, pois h\u00e1 um artigo que descreve os eventos daquele momento. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/437004\/\">Teste-me se puder ou ser\u00e1 que os programadores YML sonham em testar ansible?<\/a><\/noindex>(spoiler: essa n\u00e3o foi a vers\u00e3o final e depois tudo ficou mais complicado. <noindex><a rel=\"nofollow\" href=\"http:\/\/www.goncharov.xyz\/it\/ansible-testing-ru.html\">Como come\u00e7ar a testar Ansible, refatorar o projeto em um ano e n\u00e3o perder a cabe\u00e7a.<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h3 id=\"den-130-a-mozhet-centosansible-ne-nuzhen-mozhet-openshift\">Dia n\u00ba 130: E se CentOS+ansible n\u00e3o for necess\u00e1rio? E se for openshift?<\/h3>\n<p><\/p>\n<p>\u00c9 importante entender que o processo de implementa\u00e7\u00e3o da infraestrutura n\u00e3o foi o \u00fanico, e houve subprojetos colaterais. Por exemplo, recebemos um pedido para rodar nosso aplicativo no openshift e isso se transformou em uma pesquisa que levou mais de uma semana. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/441928\/\">Estamos rodando o aplicativo no Openshift e comparando as ferramentas existentes.<\/a><\/noindex> O que atrasou o processo de migra\u00e7\u00e3o. O resultado foi que o openshift n\u00e3o atende todas as necessidades, \u00e9 necess\u00e1rio ter hardware real ou, pelo menos, a possibilidade de brincar com o n\u00facleo.<\/p>\n<p><\/p>\n<h3 id=\"den-170-openshift-ne-podhodit-risknem-s-windows-azure-pack\">Dia n\u00ba 170: Openshift n\u00e3o \u00e9 adequado, vamos arriscar com o Windows Azure Pack?<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/73cbf7fd7e0330676c4d937df68289f5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hyper-V n\u00e3o \u00e9 muito amig\u00e1vel, SCVMM n\u00e3o melhora muito a situa\u00e7\u00e3o. Mas existe o Windows Azure Pack, que \u00e9 uma camada sobre o SCVMM e imita o Azure. No entanto, na realidade, o produto parece abandonado: documenta\u00e7\u00e3o com links quebrados e bastante escassa. Mas, no \u00e2mbito da pesquisa por op\u00e7\u00f5es de simplificar a vida de nossa nuvem, tamb\u00e9m o analisamos.<\/p>\n<p><\/p>\n<h3 id=\"den-250-windows-azure-pack-ne-ochen-ostaemsya-na-scvmm\">Dia n\u00ba 250: Windows Azure Pack n\u00e3o \u00e9 muito bom. Permanecemos no SCVMM.<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/8753b3da72adfb035d1a2f23ad28809b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>O Windows Azure Pack parecia promissor, mas decidimos n\u00e3o introduzir o WAP com suas complexidades no sistema apenas por recursos desnecess\u00e1rios e ficamos com o SCVMM.<\/p>\n<p><\/p>\n<h3 id=\"den-360-edim-slona-po-chastyam\">Dia n\u00ba 360: Comendo um elefante por partes.<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/84e003906234c46b57b7769abd7b7993.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Somente ap\u00f3s um ano a plataforma estava pronta para a migra\u00e7\u00e3o e o processo de mudan\u00e7a come\u00e7ou. Para isso, definimos uma tarefa S.M.A.R.T. Listamos todas as VMs e come\u00e7amos a resolver uma por uma a configura\u00e7\u00e3o, descrevendo-a no Ansible e cobrindo-a com testes.<\/p>\n<p><\/p>\n<h3 id=\"den-450-kakaya-sistema-poluchilas\">Dia n\u00ba 450: Que sistema obtivemos?<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/1d0c64e6a229a0b4e0e49f7b832147ba.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>O processo em si n\u00e3o \u00e9 interessante. Ele \u00e9 rotineiro e pode-se notar que a maioria das configura\u00e7\u00f5es era relativamente simples ou isom\u00f3rficas, seguindo o princ\u00edpio de Pareto, onde 80% das configura\u00e7\u00f5es no WM exigiram 20% do tempo. Da mesma forma, 80% do tempo foi dedicado \u00e0 prepara\u00e7\u00e3o da mudan\u00e7a, e apenas 20% \u00e0 pr\u00f3pria mudan\u00e7a. <\/p>\n<p><\/p>\n<h2 id=\"den-540-final\">Dia \u2116540: O Final<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs de CoreOS para CentOS em 18 meses\" src=\"\/wp-content\/uploads\/2020\/05\/7e3d1936dca58506d3b8efcf4ee3c115.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>O que aconteceu em 18 meses?<\/p>\n<p><\/p>\n<ol>\n<li>Os acordos tornaram-se c\u00f3digo.<\/li>\n<li><em>Trabalho manual<\/em> -&gt; <em>Mecaniza\u00e7\u00e3o<\/em> -&gt; <em>Automa\u00e7\u00e3o<\/em>.<\/li>\n<\/ol>\n<p><\/p>\n<h2 id=\"links\">Links<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/500350\/\">Vers\u00e3o em ingl\u00eas<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.goncharov.xyz\/it\/coreos2centos-ru.html\">Postagem cruzada do blog pessoal<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.mail.ru\/public\/UDCZ\/WM4Y9Qv3j\">slides<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/500058\/\">Como come\u00e7ar a testar Ansible, refatorar o projeto em um ano e n\u00e3o perder a cabe\u00e7a.<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/467171\/\">Li\u00e7\u00f5es aprendidas ao testar mais de 200.000 linhas de C\u00f3digo de Infraestrutura<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/441928\/\">Vamos implantar no OpenShift<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/342216\/\">Como testar sua pr\u00f3pria distribui\u00e7\u00e3o de OS<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/437004\/\">Teste-me se puder. Os desenvolvedores de YML sonham em testar o Ansible?<\/a><\/noindex><\/li>\n<\/ul>\n<p>Fonte: <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.3 - 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\/pt\/blog\/administrirovanie\/ansible-migracziya-konfiguraczii-120-vm-c-coreos-na-centos-za-18-mesyaczev\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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: Migra\u00e7\u00e3o da configura\u00e7\u00e3o de 120 VMs do CoreOS para o CentOS em 18 meses | ProHoster","description":"Isso.","canonical_url":"https:\/\/prohoster.info\/pt\/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":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/80289","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=80289"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/80289\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/80290"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=80289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=80289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=80289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}