{"id":2349,"date":"2020-03-15T13:51:47","date_gmt":"2020-03-15T11:51:47","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=2349"},"modified":"2020-03-15T14:15:24","modified_gmt":"2020-03-15T12:15:24","slug":"erfahrungsbericht-zum-deployment-meines-blogs-mit-ansible","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/erfahrungsbericht-zum-deployment-meines-blogs-mit-ansible\/","title":{"rendered":"Erfahrungsbericht zum Deployment meines Blogs mit Ansible"},"content":{"rendered":"\n<p>Vor ziemlich genau zwei Jahren habe ich in <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/konzept-zum-deployment-meines-blogs-mit-ansible\/\">&#8222;Konzept zum Deployment meines Blogs mit Ansible&#8220;<\/a> geschrieben, wie ich diesen Blog mit Hilfe von <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/ansible-it-automation-fuer-jedermann\/\">Ansible<\/a> ausgehend von einem bestehenden Backup auf einen neuen Server deployen bzw. wiederherstellen m\u00f6chte.<\/p>\n\n\n\n<p>Seither habe ich das dort beschriebene Verfahren mehrfach angewendet und m\u00f6chte heute an dieser Stelle meine Erfahrungen mit euch teilen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Umgebung<\/h2>\n\n\n\n<p>Wie schon vor zwei Jahren basiert mein Ansible Control Node auf einer RHEL 7 VM. Im Unterschied zu damals kommt heute statt Ansible in der Version 2.4.2 eine aktuell unterst\u00fctzte Version 2.9.6 zum Einsatz.<\/p>\n\n\n\n<p>Das Zielsystem war damals Ubuntu Bionic Beaver. Zwischendurch habe ich diesen Blog nach dem Konzept bereits auf CentOS\/RHEL 7 sowie Debian 10 eingerichtet.<\/p>\n\n\n\n<p>Die weiteren Rahmenbedingungen entsprechen der <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/konzept-zum-deployment-meines-blogs-mit-ansible\/#Testumgebung\">Testumgebung aus 2018<\/a>. Auch verwende ich heute noch die gleichen Module wie vor zwei Jahren:<\/p>\n\n\n\n\n<table id=\"tablepress-9\" class=\"tablepress tablepress-id-9\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">Modul<\/th><th class=\"column-2\">Status<\/th><th class=\"column-3\">Verwendung<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\"><a href=\"https:\/\/docs.ansible.com\/ansible\/2.4\/apt_module.html\" rel=\"noopener noreferrer\" target=\"_blank\">apt<\/a><\/td><td class=\"column-2\">stableinterface<\/td><td class=\"column-3\">Verwaltet APT-Pakete<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\"><a href=\"https:\/\/docs.ansible.com\/ansible\/2.4\/unarchive_module.html\" rel=\"noopener noreferrer\" target=\"_blank\">unarchive<\/a><\/td><td class=\"column-2\">preview<\/td><td class=\"column-3\">Entpackt Archiv-Dateien und kopiert sie ggf. vorher auf das Zielsystem<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\"><a href=\"https:\/\/docs.ansible.com\/ansible\/2.4\/copy_module.html\" rel=\"noopener noreferrer\" target=\"_blank\">copy<\/a><\/td><td class=\"column-2\">stableinterface<\/td><td class=\"column-3\">Kopiert Dateien auf entfernte Rechner<\/td>\n<\/tr>\n<tr class=\"row-5\">\n\t<td class=\"column-1\"><a href=\"https:\/\/docs.ansible.com\/ansible\/2.4\/file_module.html\" rel=\"noopener noreferrer\" target=\"_blank\">file<\/a><\/td><td class=\"column-2\">stableinterface<\/td><td class=\"column-3\">Erstellt Dateien, Verzeichnisse, symbolische Links und setzt deren Attribute<\/td>\n<\/tr>\n<tr class=\"row-6\">\n\t<td class=\"column-1\"><a href=\"https:\/\/docs.ansible.com\/ansible\/2.4\/mysql_db_module.html\" rel=\"noopener noreferrer\" target=\"_blank\">mysql_db<\/a><\/td><td class=\"column-2\">preview<\/td><td class=\"column-3\">Hinzuf\u00fcgen von MySQL-Datenbanken (aus Backup)<\/td>\n<\/tr>\n<tr class=\"row-7\">\n\t<td class=\"column-1\"><a href=\"https:\/\/docs.ansible.com\/ansible\/2.4\/mysql_user_module.html\" rel=\"noopener noreferrer\" target=\"_blank\">mysql_user<\/a><\/td><td class=\"column-2\">preview<\/td><td class=\"column-3\">Hinzuf\u00fcgen (und Entfernen) von Benutzern in MySQL-Datenbanken<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-9 from cache -->\n\n\n\n<p>In der Tabelle ist zu erkennen, dass jene Module, die 2018 den Status <em>preview<\/em> hatten, diesen auch heute noch besitzen. Ich pers\u00f6nlich finde es schade, dass es keines dieser Module innerhalb von zwei Jahren zu einem <em>stableinterface<\/em> gebracht hat.<\/p>\n\n\n\n<p>Dar\u00fcber hinaus schleppen einige Module wie <em>mysql_db<\/em> noch ein paar ziemlich alte Bugs mit sich herum. Darunter z.B. <a href=\"https:\/\/github.com\/ansible\/ansible\/issues\/20196\">dieser<\/a> aus dem Jahre 2016. Zwar kann ich nicht mit Sicherheit sagen, ob dieser seit 2.4.2 bereits gefixt wurde. In Version 2.9.6 ist er jedenfalls vorhanden. Als Workaround habe ich den MySQL-Dump zuvor entpackt und dann im Modul verwendet, wodurch eine erheblich gr\u00f6\u00dfere Datenmenge \u00fcber das Netzwerk \u00fcbertragen werden muss.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Erfahrungen der letzten zwei Jahre<\/h2>\n\n\n\n<p>Am Status der Module hat sich leider nichts ge\u00e4ndert. Positiv sei hier jedoch angemerkt, dass s\u00e4mtliche Module noch existieren und weiterhin genutzt werden k\u00f6nnen. So hatte ich zumindest keinen Aufwand, mir zwischenzeitlich neue Module suchen zu m\u00fcssen, um die gestellte Aufgabe erledigen zu k\u00f6nnen.<\/p>\n\n\n\n<p>Grunds\u00e4tzlich klappt das Deployment bzw. die Wiederherstellung meines Blogs aus einem Backup mittels der Ansible-Rolle gut. Je nach verwendetem Zielsystem sind kleinere Anpassungen notwendig, da einige Pakete in CentOS anders benannt sind als in Debian, oder sich der Name in einer neueren Version der Distribution leicht ge\u00e4ndert hat. Dieser Umstand ist jedoch nicht Ansible anzulasten, sondern r\u00fchrt von den jeweiligen Paketnamen der unterschiedlichen Distributionen her.<\/p>\n\n\n\n<p>Was mir pers\u00f6nlich \u00fcberhaupt nicht gef\u00e4llt, ist dass Ansible bei Minor-Release-Upgrades (z.B. von 2.9 auf 2.10) teilweise nicht abw\u00e4rtskompatible \u00c4nderungen an der Syntax vornimmt. Dies sollte nach den Richtlinien des <a href=\"https:\/\/semver.org\/lang\/de\/\">Semantic Versioning<\/a> nicht so sein und geht in meinen Augen gar nicht. Darunter finden sich Dinge wie die Art und Weise, wie Paketnamen an ein Modul wie <em>apt<\/em> oder <em>yum<\/em> zu \u00fcbergeben sind oder dass pl\u00f6tzlich der <a href=\"https:\/\/github.com\/ansible\/ansible\/issues\/56930\">Bindestrich (-) in Gruppennamen nicht mehr zul\u00e4ssig<\/a> ist. \u00c4nderungen wie diese machen sehr h\u00e4ufig Anpassungen am Inventory, den Playbooks und Rollen erforderlich. In meinem Fall ist der Aufwand noch \u00fcberschaubar. In gr\u00f6\u00dferen Organisationen mit einigen hundert oder gar tausenden von Playbooks sieht die Sache schnell anders aus und wird auch nicht von allen Kunden gut aufgenommen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>Es gibt einige Punkte, die mir an Ansible nicht so gut gefallen und bei denen ich auch keine schnelle Besserung erwarte. Auch sind von Zeit zu Zeit Anpassungen notwendig, um den Blog zu deployen bzw. wiederherstellen zu k\u00f6nnen. Jedoch h\u00e4lt sich der Aufwand daf\u00fcr in Grenzen und ist deutlich geringer, als bspw. bei der ausschlie\u00dflichen Verwendung von Bash-Skripten.<\/p>\n\n\n\n<p>Verglichen zur manuellen Vorgehensweise (vgl. <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/testinstanz-fuer-einen-wordpress-blog-erstellen\/\">Testinstanz f\u00fcr einen WordPress Blog erstellen<\/a>) erspart mir Ansible sogar eine Menge Zeit, welche ich z.B. mit meiner Familie verbringen kann. Daher bleibt Ansible f\u00fcr mich weiterhin gesetzt.<\/p>\n\n\n\n<p>Welche Erfahrungen habt ihr mit Ansible gemacht? Und wie beurteilt ihr dieses heute im Vergleich zu den Vorjahren? Eure Berichte sind jederzeit willkommen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vor ziemlich genau zwei Jahren habe ich in &#8222;Konzept zum Deployment meines Blogs mit Ansible&#8220; geschrieben, wie ich diesen Blog mit Hilfe von Ansible ausgehend von einem bestehenden Backup auf einen neuen Server deployen bzw. wiederherstellen m\u00f6chte. Seither habe ich das dort beschriebene Verfahren mehrfach angewendet und m\u00f6chte heute an dieser Stelle meine Erfahrungen mit<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/erfahrungsbericht-zum-deployment-meines-blogs-mit-ansible\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[532],"tags":[430,305],"class_list":["post-2349","post","type-post","status-publish","format-standard","hentry","category-ansible","tag-osbn","tag-planet"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2349","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=2349"}],"version-history":[{"count":5,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2349\/revisions"}],"predecessor-version":[{"id":2366,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/2349\/revisions\/2366"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=2349"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=2349"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=2349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}