{"id":444,"date":"2021-06-21T13:49:18","date_gmt":"2021-06-21T11:49:18","guid":{"rendered":"http:\/\/www.digiliv.de\/?p=444"},"modified":"2021-06-21T13:51:04","modified_gmt":"2021-06-21T11:51:04","slug":"ansible-installation-und-einstieg","status":"publish","type":"post","link":"http:\/\/www.digiliv.de\/index.php\/2021\/06\/21\/ansible-installation-und-einstieg\/","title":{"rendered":"Ansible: Installation und Einstieg"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-443 alignleft\" src=\"http:\/\/www.digiliv.de\/wp-content\/uploads\/2021\/06\/Ansible_logo-244x300.png\" alt=\"\" width=\"244\" height=\"300\" srcset=\"http:\/\/www.digiliv.de\/wp-content\/uploads\/2021\/06\/Ansible_logo-244x300.png 244w, http:\/\/www.digiliv.de\/wp-content\/uploads\/2021\/06\/Ansible_logo.png 360w\" sizes=\"auto, (max-width: 244px) 100vw, 244px\" \/>Das Ansible-Projekt wurde 2012 gestartet und hat sich seitdem zu einer der, wenn nicht der f\u00fchrenden Automatisierungsl\u00f6sung entwickelt. Das System ist sehr einfach zu installieren und zu handhaben. Diese Reihe von Artikeln soll den Einstieg in Ansible erleichtern und durch die ersten Schritte f\u00fchren. Allerdings soll hier nur die CLI-Bedienung betrachtet werden, Grafische Oberfl\u00e4chen, wie Ansible Tower oder AWS sind daher &#8216;out of scope&#8217;.<\/p>\n<p>Geht man von einem installierten Linux-System aus, ist die Installation sehr einfach.<br \/>\nEs braucht lediglich das Paket ansible installiert werden:<\/p>\n<pre>- Debian\/Ubuntu: apt install ansible\r\n- RedHat etc: dnf install ansible\r\nbei \u00e4lteren Distros muss hier vorher noch\u00a0 das epel-release installiert werden.\r\n- SuSE: zypper install ansible<\/pre>\n<p>Die einfachste Variante zu pr\u00fcfen ob die Installation geklappt hat ist der Berfehl <em>ansible &#8211;version<br \/>\n<\/em>Die darauf folgende Ausgabe enh\u00e4lt alle relevanten Konfigurations- und Versionsinformationen.<\/p>\n<pre>[root@ansible ~]# ansible --version \r\nansible 2.9.21 \r\n\u00a0config file = \/etc\/ansible\/ansible.cfg \r\n\u00a0configured module search path = ['\/root\/.ansible\/plugins\/modules', '\/usr\/share\/ansible\/plugins\/modules'] \r\n\u00a0ansible python module location = \/usr\/lib\/python3.9\/site-packages\/ansible \r\n\u00a0executable location = \/usr\/bin\/ansible \r\n\u00a0python version = 3.9.5 (default, May 14 2021, 00:00:00) [GCC 11.1.1 20210428 (Red Hat 11.1.1-1)]<\/pre>\n<p>Der n\u00e4chste Schritt besteht jetzt darin, Ansible die Zugriffsparameter f\u00fcr die Systeme bekannt zu machen, auf die zugegriffen werden soll. Diese Werte werden im Config-File und in der Datei hosts eingetragen. Zuerst wird also in \/etc\/ansible\/ansible.cfg editiert.<br \/>\nIm ersten Schritt wird die Variable inventory gesetzt, die die weiteren Gruppierungen\u00a0 enth\u00e4lt.<\/p>\n<pre>inventory\u00a0 = \/etc\/ansible\/hosts<\/pre>\n<p>Nachdem dieser Eintrag gemacht in der ansible.cfg gemacht ist kann sie gespeichert und verlassen werden.<br \/>\nWeiter geht es in der Datei \/etc\/ansible\/hosts mit der Definition der Ziel-Systeme.<br \/>\nDie Struktur dabei st sehr einfach. Eine Sektion in eckigen Klammer enth\u00e4lt den Gruppennamen gefolgt von den IPs und\/oder DNS-Namen der Ziel-Hosts. Die Folgesektion mit Namen:vars enh\u00e4lt spezifische Infos wie Usernamen, Passworten (sofern man nicht den Passwort-Vault verwendet), Key-Exchange-Infos wie sieauch beim Zugriff auf Cisco-Devices be\u00f6tigt werden\u00a0 etc.<\/p>\n<pre>[TEST] \r\n172.16.199.222 \r\n172.16.199.223 \r\n\r\n[TEST:vars] \r\nansible_user=ansible\r\nansible_password=AnSiBLE3210<\/pre>\n<p>In diesem Beispiel k\u00f6nnte man mit einem Ansible-Befehl entweder einen enzelnen Host durch direkte Angabe der IP ansprechen oder gleich die gesamte Gruppe durch nennung des Gruppennamen.<br \/>\nEin Ping-Test eines einzelnen Hosts oder der gesamten Test-Gruppe kann wie folgt durchgef\u00fchrt werden:<\/p>\n<pre>Ping f\u00fcr einen einzelnen Host:\r\n[root@ansible ansible]# ansible 172.16.199.223 -m ping \u00a0\u00a0\u00a0\u00a0\r\n[WARNING]: Platform linux on host 172.16.199.223 is using the discovered Python interpreter at \/usr\/bin\/python, but future installation of another Python interpreter could \r\nchange this. See https:\/\/docs.ansible.com\/ansible\/2.9\/reference_appendices\/interpreter_discovery.html for more information. \r\n172.16.199.223 | SUCCESS =&gt; { \r\n\u00a0\u00a0\u00a0\"ansible_facts\": { \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"discovered_interpreter_python\": \"\/usr\/bin\/python\" \r\n\u00a0\u00a0\u00a0}, \r\n\u00a0\u00a0\u00a0\"changed\": false, \r\n\u00a0\u00a0\u00a0\"ping\": \"pong\"\r\n\r\n\r\nPing f\u00fcr eine Hostgruppe:\r\n[root@ansible ansible]# ansible TEST -m ping \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\r\n[WARNING]: Platform linux on host 172.16.199.223 is using the discovered Python interpreter at \/usr\/bin\/python, but future installation of another Python interpreter could \r\nchange this. See https:\/\/docs.ansible.com\/ansible\/2.9\/reference_appendices\/interpreter_discovery.html for more information. \r\n172.16.199.223 | SUCCESS =&gt; { \r\n\u00a0\u00a0\u00a0\"ansible_facts\": { \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"discovered_interpreter_python\": \"\/usr\/bin\/python\" \r\n\u00a0\u00a0\u00a0}, \r\n\u00a0\u00a0\u00a0\"changed\": false, \r\n\u00a0\u00a0\u00a0\"ping\": \"pong\" \r\n} \r\n[DEPRECATION WARNING]: Distribution fedora 34 on host 172.16.199.222 should use \/usr\/bin\/python3, but is using \/usr\/bin\/python for backward compatibility with prior Ansible \u00a0\r\nreleases. A future Ansible release will default to using the discovered platform python for this host. See \u00a0\r\nhttps:\/\/docs.ansible.com\/ansible\/2.9\/reference_appendices\/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings \u00a0\r\ncan be disabled by setting deprecation_warnings=False in ansible.cfg. \r\n172.16.199.222 | SUCCESS =&gt; { \r\n\u00a0\u00a0\u00a0\"ansible_facts\": { \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"discovered_interpreter_python\": \"\/usr\/bin\/python\" \r\n\u00a0\u00a0\u00a0}, \r\n\u00a0\u00a0\u00a0\"changed\": false, \r\n\u00a0\u00a0\u00a0\"ping\": \"pong\"<\/pre>\n<p>Der Parameter -m definiert das zu verwendende Modul, hier also ping. Wird stattdessen das Command-Modul verwendet lassen sich auch Befehle ausf\u00fchren, wie im n\u00e4chsten Beispiel gezeigt:<\/p>\n<pre>[root@ansible ansible]# ansible TEST -m command -a \"ip address show\" \r\n[WARNING]: Platform linux on host 172.16.199.223 is using the discovered Python interpreter at \/usr\/bin\/python, but future installation of another Python interpreter could \r\nchange this. See https:\/\/docs.ansible.com\/ansible\/2.9\/reference_appendices\/interpreter_discovery.html for more information. \r\n172.16.199.223 | CHANGED | rc=0 &gt;&gt; \r\n1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 \r\n\u00a0\u00a0\u00a0link\/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 \r\n\u00a0\u00a0\u00a0inet 127.0.0.1\/8 scope host lo \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0valid_lft forever preferred_lft forever \r\n\u00a0\u00a0\u00a0inet6 ::1\/128 scope host \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0valid_lft forever preferred_lft forever \r\n2: ens18: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 \r\n\u00a0\u00a0\u00a0link\/ether e2:43:52:59:7c:7b brd ff:ff:ff:ff:ff:ff \r\n\u00a0\u00a0\u00a0inet 172.16.199.223\/24 brd 172.16.199.255 scope global dynamic ens18 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0valid_lft 3963sec preferred_lft 3963sec \r\n\u00a0\u00a0\u00a0inet6 fe80::e043:52ff:fe59:7c7b\/64 scope link \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0valid_lft forever preferred_lft forever \r\n3: docker0: &lt;NO-CARRIER,BROADCAST,MULTICAST,UP&gt; mtu 1500 qdisc noqueue state DOWN group default \u00a0\r\n\u00a0\u00a0\u00a0link\/ether 02:42:70:70:26:9a brd ff:ff:ff:ff:ff:ff \r\n\u00a0\u00a0\u00a0inet 172.17.0.1\/16 brd 172.17.255.255 scope global docker0 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0valid_lft forever preferred_lft forever \r\n[DEPRECATION WARNING]: Distribution fedora 34 on host 172.16.199.222 should use \/usr\/bin\/python3, but is using \/usr\/bin\/python for backward compatibility with prior Ansible \u00a0\r\nreleases. A future Ansible release will default to using the discovered platform python for this host. See \u00a0\r\nhttps:\/\/docs.ansible.com\/ansible\/2.9\/reference_appendices\/interpreter_discovery.html for more information. This feature will be removed in version 2.12. Deprecation warnings \u00a0\r\ncan be disabled by setting deprecation_warnings=False in ansible.cfg. \r\n172.16.199.222 | CHANGED | rc=0 &gt;&gt; \r\n1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 \r\n\u00a0\u00a0\u00a0link\/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 \r\n\u00a0\u00a0\u00a0inet 127.0.0.1\/8 scope host lo \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0valid_lft forever preferred_lft forever \r\n\u00a0\u00a0\u00a0inet6 ::1\/128 scope host \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0valid_lft forever preferred_lft forever \r\n2: ens18: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc fq_codel state UP group default qlen 1000 \r\n\u00a0\u00a0\u00a0link\/ether 66:74:cb:65:24:17 brd ff:ff:ff:ff:ff:ff \r\n\u00a0\u00a0\u00a0altname enp0s18 \r\n\u00a0\u00a0\u00a0inet 172.16.199.222\/24 brd 172.16.199.255 scope global dynamic noprefixroute ens18 \r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0valid_lft 7011sec preferred_lft 7011sec \r\n\u00a0\u00a0\u00a0inet6 fe80::6474:cbff:fe65:2417\/64 scope link noprefixroute \u00a0\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0valid_lft forever preferred_lft forever<\/pre>\n<p>Hier wird das Command-Modul angezogen (-m command) und der mit -a definierte Befehl ausgef\u00fchrt. Da das Command-Modul sehr h\u00e4ufig genutzt wird, kann es auch einfach ausgelassen werden. <em>ansible TEST -a &#8220;ip address show&#8221;<\/em> w\u00fcrde also das selbe bewirken.<\/p>\n<p>&nbsp;<\/p>\n<p>Nat\u00fcrlich kann Ansible nicht nur interaktiv aufgerufen werden. Um verkettete Aufgaben auf mehreren Systemen durchf\u00fchren zu k\u00f6nnen gibt es Playbooks. Die Erstellung und Verwendung von Playbooks folgt in einem eigenen Artikel.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Das Ansible-Projekt wurde 2012 gestartet und hat sich seitdem zu einer der, wenn nicht der f\u00fchrenden Automatisierungsl\u00f6sung entwickelt. Das System ist sehr einfach zu installieren und zu handhaben. Diese Reihe von Artikeln soll den Einstieg in Ansible erleichtern und durch die ersten Schritte f\u00fchren. Allerdings soll hier nur die CLI-Bedienung betrachtet werden, Grafische Oberfl\u00e4chen, wie [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":443,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[75,45,32,4],"tags":[76,77,29,6],"class_list":["post-444","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-automation","category-dienste","category-linux","category-netzwerk","tag-ansible","tag-automation","tag-linux","tag-netzwerk"],"_links":{"self":[{"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/posts\/444","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/comments?post=444"}],"version-history":[{"count":5,"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/posts\/444\/revisions"}],"predecessor-version":[{"id":449,"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/posts\/444\/revisions\/449"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/media\/443"}],"wp:attachment":[{"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/media?parent=444"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/categories?post=444"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.digiliv.de\/index.php\/wp-json\/wp\/v2\/tags?post=444"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}