{"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\/fr\/blog\/administrirovanie\/ansible-migracziya-konfiguraczii-120-vm-c-coreos-na-centos-za-18-mesyaczev","title":{"rendered":"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/c12bef0589cc29a2a63840ecf5572357.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ceci est la transcription de la pr\u00e9sentation \u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/devopsconf.io\/moscow\/2019\/meetups#2331050\">DevopsConf 2019-10-01<\/a><\/noindex> et <noindex><a rel=\"nofollow\" href=\"http:\/\/spblug.org\/\">SPbLUG 2019-09-25<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>C'est l'histoire d'un projet qui utilisait un syst\u00e8me de gestion des configurations fait maison et pourquoi la migration vers Ansible a dur\u00e9 18 mois.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2 id=\"den---hhh-before-the-beginning\">Jour n\u00b0 -XXX : Avant le d\u00e9but<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/22ebc514d85df93237e7f7d262a393a4.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Au d\u00e9part, l'infrastructure se composait de plusieurs h\u00f4tes autonomes g\u00e9r\u00e9s par Hyper-V. Cr\u00e9er une machine virtuelle n\u00e9cessitait de nombreuses actions : placer les disques au bon endroit, configurer le DNS, r\u00e9server le DHCP, placer la configuration de la VM dans un d\u00e9p\u00f4t git. Ce processus \u00e9tait partiellement automatis\u00e9, mais par exemple, les VMs \u00e9taient r\u00e9parties entre les h\u00f4tes manuellement. Cependant, les d\u00e9veloppeurs pouvaient appliquer une configuration de VM en la modifiant dans git et en red\u00e9marrant la VM.<\/p>\n<p><\/p>\n<h3 id=\"custom-configuration-management-solution\">Solution de gestion de configuration personnalis\u00e9e<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/166b61b7f70c49ba06e622cd3592826f.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>L'id\u00e9e de d\u00e9part, je le soup\u00e7onne, \u00e9tait con\u00e7ue comme IaC : de nombreuses VMs sans \u00e9tat, qui r\u00e9initialisaient leur \u00e9tat lors du red\u00e9marrage. Que repr\u00e9sentait la gestion des configurations des VMs ? Cela semblait simple sch\u00e9matiquement :<\/p>\n<p><\/p>\n<ol>\n<li>Pour les VMs, un MAC statique \u00e9tait fix\u00e9.<\/li>\n<li>On connectait \u00e0 la VM un ISO avec CoreOS et un disque de d\u00e9marrage.<\/li>\n<li>CoreOS ex\u00e9cute un script de personnalisation en le t\u00e9l\u00e9chargeant depuis un serveur WEB en fonction de son IP.<\/li>\n<li>Le script r\u00e9cup\u00e8re la configuration de la VM via SCP en se basant sur l'adresse IP.<\/li>\n<li>Une s\u00e9rie de fichiers unitaires systemd et une s\u00e9rie de scripts bash sont lanc\u00e9s.<\/li>\n<\/ol>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/6baa343ddc2b8df8812f2ed282e5bc3a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cette solution avait de nombreux probl\u00e8mes \u00e9vidents :<\/p>\n<p><\/p>\n<ol>\n<li>L'ISO dans CoreOS \u00e9tait obsol\u00e8te.<\/li>\n<li>Nombreux actes et magie difficilement automatissables lors de la migration\/cr\u00e9ation des VMs.<\/li>\n<li>Difficult\u00e9 de mise \u00e0 jour lorsque certains logiciels n\u00e9cessitent une version donn\u00e9e. C\u2019est encore plus amusant avec les modules du noyau.<\/li>\n<li>Les VMs n'\u00e9taient pas si d\u00e9pourvues de donn\u00e9es, c'est-\u00e0-dire qu'il y avait des VMs avec un disque mont\u00e9 contenant des donn\u00e9es utilisateur en suppl\u00e9ment.<\/li>\n<li>Quelqu'un avait constamment des probl\u00e8mes avec les d\u00e9pendances des unit\u00e9s systemd et lors du red\u00e9marrage, CoreOS se bloquait. Il \u00e9tait difficile de rep\u00e9rer \u00e7a avec les outils disponibles dans CoreOS.<\/li>\n<li>Gestion des secrets.<\/li>\n<li>La gestion de configuration \u00e9tait quasiment inexistante. Il y avait des scripts bash et des configurations YML de CoreOS.<\/li>\n<\/ol>\n<p><\/p>\n<p>Pour appliquer la configuration de la VM, il fallait la red\u00e9marrer, mais elle pouvait ne pas red\u00e9marrer. Cela semble \u00eatre un probl\u00e8me \u00e9vident, mais il n'y avait pas de disques persistants \u2014 les journaux n'avaient nulle part o\u00f9 \u00eatre enregistr\u00e9s. Eh bien, d'accord, essayons d'ajouter des options de d\u00e9marrage du noyau pour transmettre les journaux. Mais non, tout cela est si compliqu\u00e9.<\/p>\n<p><\/p>\n<h2 id=\"den-0-priznanie-problemy\">Jour n\u00b00 : Reconnaissance du probl\u00e8me<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/d80b98b91624085d5d11fc54647a55bc.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>C'\u00e9tait une infrastructure de d\u00e9veloppement classique : jenkins, environnements de test, surveillances, registry. CoreOS \u00e9tait con\u00e7u pour l'h\u00e9bergement de clusters k8s, c'est-\u00e0-dire que le probl\u00e8me \u00e9tait comment CoreOS \u00e9tait utilis\u00e9. La premi\u00e8re \u00e9tape a \u00e9t\u00e9 de choisir la stack. Nous avons opt\u00e9 pour :<\/p>\n<p><\/p>\n<ol>\n<li><strong>CentOS<\/strong> comme distribution de base, car c'est la distribution la plus proche des environnements de production.<\/li>\n<li><strong>Ansible<\/strong> pour la gestion des configurations, car il y avait une vaste expertise \u00e0 ce sujet.<\/li>\n<li><strong>Jenkins<\/strong> comme framework d'automatisation des processus existants, car il \u00e9tait d\u00e9j\u00e0 utilis\u00e9 de mani\u00e8re active pour les processus de d\u00e9veloppement.<\/li>\n<li><strong>Hyper-V<\/strong> comme plateforme de virtualisation. Il y a plusieurs raisons qui vont au-del\u00e0 de ce r\u00e9cit, mais en r\u00e9sum\u00e9 \u2014 nous ne pouvons pas utiliser le cloud, nous devons utiliser notre propre mat\u00e9riel.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"den-30-fiksiruem-suschestvuyuschie-dogovorennosti---agreements-as-code\">Jour n\u00b030 : Formalisation des accords existants \u2014 Agreements as Code<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/47a8cc980940b5080e195267d686df25.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Une fois la stack d\u00e9finie, la pr\u00e9paration \u00e0 la migration a commenc\u00e9. Formaliser les accords existants sous forme de code (<strong>Agreements as Code<\/strong>!). Migration <em>travail manuel<\/em> -&gt; <em>m\u00e9canisation<\/em> -&gt; <em>qui permet de tester, d\u00e9ployer et livrer de nouvelles fonctionnalit\u00e9s aux utilisateurs beaucoup plus rapidement. Par exemple, dans tous nos projets, un pipeline CI est automatiquement cr\u00e9\u00e9 \u00e0 chaque commit. Celui-ci construit l'image, la teste, la d\u00e9ploie dans divers environnements Kubernetes pour le d\u00e9bogage et les v\u00e9rifications restantes, et si tout va bien, les modifications atteignent l'utilisateur final. Ce n'est plus une science-fus\u00e9e, mais une banalit\u00e9 pour beaucoup \u2014 probablement pour vous \u00e9galement, puisque vous lisez cet article.<\/em>.<\/p>\n<p><\/p>\n<h4 id=\"1-configure-vms\">1. Configurer les VM<\/h4>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/90b3c4ec5d4234fc218295bd9a34d676.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ansible g\u00e8re tr\u00e8s bien cette t\u00e2che. Avec un minimum d'efforts, nous pouvons prendre en charge les configurations des VM :<\/p>\n<p><\/p>\n<ol>\n<li>Cr\u00e9ons un d\u00e9p\u00f4t git.<\/li>\n<li>Nous pla\u00e7ons la liste des VM dans l'inventaire, les configurations dans des playbooks et des r\u00f4les.<\/li>\n<li>Nous configurons un esclave jenkins sp\u00e9cial \u00e0 partir duquel nous pourrons ex\u00e9cuter ansible.<\/li>\n<li>Cr\u00e9ons un job, configurons Jenkins.<\/li>\n<\/ol>\n<p><\/p>\n<p>Le premier processus est pr\u00eat. Les accords sont formalis\u00e9s.<\/p>\n<p><\/p>\n<h4 id=\"2-create-new-vm\">2. Cr\u00e9er une nouvelle VM<\/h4>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/3f6a02b170e28fd34e8f5fa65d1606c2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ici, tout n'\u00e9tait pas tr\u00e8s pratique. Il n'est pas tr\u00e8s commode de cr\u00e9er des VM sous Hyper-V depuis Linux. Une des tentatives de m\u00e9caniser ce processus a \u00e9t\u00e9 :<\/p>\n<p><\/p>\n<ol>\n<li>Ansible se connecte via WinRM \u00e0 l'h\u00f4te Windows.<\/li>\n<li>Ansible ex\u00e9cute un script powershell.<\/li>\n<li>Le script Powershell cr\u00e9e une nouvelle VM.<\/li>\n<li>Avec Hyper-V\/ScVMM, lors de la cr\u00e9ation de la VM, le nom d'h\u00f4te est configur\u00e9 dans le syst\u00e8me d'exploitation invit\u00e9.<\/li>\n<li>La VM, lors de la mise \u00e0 jour du bail DHCP, envoie son nom d'h\u00f4te.<\/li>\n<li>L'int\u00e9gration standard ddns &amp; dhcp du c\u00f4t\u00e9 du Contr\u00f4leur de Domaine configure l'enregistrement DNS.<\/li>\n<li>Nous pouvons ajouter la VM \u00e0 l'inventaire et la configurer avec Ansible.<\/li>\n<\/ol>\n<p><\/p>\n<h4 id=\"3-create-vm-template\">3. Cr\u00e9er un mod\u00e8le de VM<\/h4>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/f10929c1bd5b350c16bb691dce61653a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ici, nous n'avons rien invent\u00e9 \u2014 nous avons pris packer.<\/p>\n<p><\/p>\n<ol>\n<li>Nous pla\u00e7ons la configuration de packer, kickstart dans le d\u00e9p\u00f4t git.<\/li>\n<li>Nous configurons un esclave jenkins sp\u00e9cial avec hyper-v et Packer.<\/li>\n<li>Cr\u00e9ons un job, configurons Jenkins.<\/li>\n<\/ol>\n<p><\/p>\n<p>Comment ce lien fonctionne :<\/p>\n<p><\/p>\n<ol>\n<li>Packer cr\u00e9e une VM vide, y attache l'ISO.<\/li>\n<li>La VM d\u00e9marre, Packer entre dans le chargeur de d\u00e9marrage la commande d'utiliser notre fichier kickstart depuis la disquette ou http.<\/li>\n<li>Anaconda se lance avec notre configuration, la mise en place initiale de l'OS se fait.<\/li>\n<li>Packer attend la disponibilit\u00e9 de la VM.<\/li>\n<li>Packer ex\u00e9cute Ansible \u00e0 l'int\u00e9rieur de la VM en mode local.<\/li>\n<li>Ansible utilise exactement les m\u00eames r\u00f4les que dans l'\u00e9tape n\u00b01.<\/li>\n<li>Packer exporte le mod\u00e8le de VM.<\/li>\n<\/ol>\n<p><\/p>\n<h3 id=\"den-75-refaktorim-dogovorennosti-ne-lomaya--test-ansible--testkitchen\">Jour n\u00b075 : Refactorisation des accords sans casser = Test ansible + Testkitchen<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/1b90074f3b17a77a732a259efdda518c.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Fixer les accords dans le code peut \u00eatre insuffisant. En effet, si tu veux changer quelque chose en profondeur dans le processus, tu risques de tout casser. C'est pourquoi, en mati\u00e8re d'infrastructure, il devient crucial de tester cette m\u00eame infrastructure. Pour synchroniser les connaissances au sein de l'\u00e9quipe, nous avons commenc\u00e9 \u00e0 tester les r\u00f4les Ansible. Je ne vais pas entrer dans les d\u00e9tails, car il existe un article qui d\u00e9crit les \u00e9v\u00e9nements \u00e0 ce moment-l\u00e0. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/437004\/\">Teste-moi si tu peux ou les programmeurs YML r\u00eavent-ils de tester ansible ?<\/a><\/noindex>(spoiler, ce n'\u00e9tait pas la version finale et tout est devenu plus compliqu\u00e9 par la suite) <noindex><a rel=\"nofollow\" href=\"http:\/\/www.goncharov.xyz\/it\/ansible-testing-ru.html\">Comment commencer \u00e0 tester Ansible, refactoriser un projet en un an et ne pas perdre la raison.<\/a><\/noindex>).<\/p>\n<p><\/p>\n<h3 id=\"den-130-a-mozhet-centosansible-ne-nuzhen-mozhet-openshift\">Jour n\u00b0130 : Et si CentOS+ansible n'\u00e9tait pas n\u00e9cessaire ? Peut-\u00eatre openshift ?<\/h3>\n<p><\/p>\n<p>Il faut comprendre que le processus d'int\u00e9gration de l'infrastructure n'\u00e9tait pas unique et qu'il y avait des sous-projets connexes. Par exemple, une demande est arriv\u00e9e pour d\u00e9ployer notre application sur openshift, ce qui a entra\u00een\u00e9 des recherches durant plus d'une semaine. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/441928\/\">Nous d\u00e9ployons l'application sur Openshift et comparons les outils existants.<\/a><\/noindex> Ce qui a retard\u00e9 le processus de migration. Au final, il s'est av\u00e9r\u00e9 qu'openshift ne satisfait pas tous les besoins, il faut du mat\u00e9riel r\u00e9el, ou au moins la possibilit\u00e9 de jouer avec le noyau.<\/p>\n<p><\/p>\n<h3 id=\"den-170-openshift-ne-podhodit-risknem-s-windows-azure-pack\">Jour n\u00b0170 : Openshift n'est pas adapt\u00e9, prenons le risque avec Windows Azure Pack ?<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/73cbf7fd7e0330676c4d937df68289f5.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hyper-V n'est pas tr\u00e8s amical, SCVMM ne l'am\u00e9liore pas beaucoup. Mais il existe un outil appel\u00e9 Windows Azure Pack, qui est une surcouche \u00e0 SCVMM et imite Azure. Cependant, en r\u00e9alit\u00e9, le produit semble abandonn\u00e9 : documentation avec des liens cass\u00e9s et plut\u00f4t succinte. Mais dans le cadre de la recherche de solutions pour simplifier notre cloud, nous avons \u00e9galement examin\u00e9 cela.<\/p>\n<p><\/p>\n<h3 id=\"den-250-windows-azure-pack-ne-ochen-ostaemsya-na-scvmm\">Jour n\u00b0250 : Windows Azure Pack n'est pas super. Nous restons sur SCVMM.<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/8753b3da72adfb035d1a2f23ad28809b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Windows Azure Pack semblait prometteur, mais il a \u00e9t\u00e9 d\u00e9cid\u00e9 de ne pas introduire WAP avec ses complications dans le syst\u00e8me pour des fonctionnalit\u00e9s inutiles et nous sommes rest\u00e9s avec SCVMM.<\/p>\n<p><\/p>\n<h3 id=\"den-360-edim-slona-po-chastyam\">Jour n\u00b0360 : Nous mangeons l'\u00e9l\u00e9phant morceau par morceau.<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/84e003906234c46b57b7769abd7b7993.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ce n'est qu'un an plus tard que la plateforme \u00e0 laquelle migrer a \u00e9t\u00e9 pr\u00eate et le processus de migration a commenc\u00e9. Pour cela, une t\u00e2che S.M.A.R.T. a \u00e9t\u00e9 d\u00e9finie. Nous avons dress\u00e9 une liste de toutes les VMs et avons commenc\u00e9 \u00e0 examiner leur configuration une par une, \u00e0 la d\u00e9crire sur Ansible et \u00e0 la couvrir de tests.<\/p>\n<p><\/p>\n<h3 id=\"den-450-kakaya-sistema-poluchilas\">Jour n\u00b0450 : Quel syst\u00e8me a \u00e9t\u00e9 obtenu ?<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/1d0c64e6a229a0b4e0e49f7b832147ba.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Le processus lui-m\u00eame n'est pas int\u00e9ressant. Il est routinier, on peut noter que la plupart des configurations \u00e9taient relativement simples ou isomorphes et selon le principe de Pareto, 80 % des configurations ont n\u00e9cessit\u00e9 20 % du temps. De la m\u00eame mani\u00e8re, 80 % du temps a \u00e9t\u00e9 consacr\u00e9 \u00e0 la pr\u00e9paration du d\u00e9m\u00e9nagement et seulement 20 % au d\u00e9m\u00e9nagement lui-m\u00eame. <\/p>\n<p><\/p>\n<h2 id=\"den-540-final\">Jour n\u00b0540 : La finale<\/h2>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Ansible : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois\" src=\"\/wp-content\/uploads\/2020\/05\/7e3d1936dca58506d3b8efcf4ee3c115.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Que s'est-il pass\u00e9 en 18 mois ?<\/p>\n<p><\/p>\n<ol>\n<li>Les accords sont devenus un code.<\/li>\n<li><em>Travail manuel<\/em> -&gt; <em>M\u00e9canisation<\/em> -&gt; <em>Automatisation<\/em>.<\/li>\n<\/ol>\n<p><\/p>\n<h2 id=\"links\">Liens<\/h2>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/500350\/\">Version anglaise<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/www.goncharov.xyz\/it\/coreos2centos-ru.html\">Post crois\u00e9 depuis le blog personnel<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/cloud.mail.ru\/public\/UDCZ\/WM4Y9Qv3j\">diapositives<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/500058\/\">Comment commencer \u00e0 tester Ansible, refactoriser un projet en un an et ne pas perdre la raison.<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/467171\/\">Le\u00e7ons tir\u00e9es des tests de plus de 200 000 lignes de code d'infrastructure<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/441928\/\">D\u00e9ployons sur OpenShift<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/342216\/\">Comment tester votre propre distribution OS<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/437004\/\">Teste-moi si tu peux. Les d\u00e9veloppeurs YML r\u00eavent-ils de tester Ansible ?<\/a><\/noindex><\/li>\n<\/ul>\n<p>Source : <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.2 - 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\/fr\/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.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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 : Migration de la configuration de 120 VM de CoreOS vers CentOS en 18 mois | ProHoster","description":"C'est.","canonical_url":"https:\/\/prohoster.info\/fr\/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":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/80289","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=80289"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/80289\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/80290"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=80289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=80289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=80289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}