Ansibel ist heutzutage das Tool der Wahl, wenn Sie mehrere Geräte verwalten müssen, sei es Linux, Windows, Mac, Netzwerkgeräte, VMware und vieles mehr. Was Ansible so beliebt macht, ist seine agentenlose Funktion und granulare Steuerung. Wenn Sie mit Python gearbeitet haben oder Erfahrung mit yaml haben , werden Sie sich mit Ansible wie zu Hause fühlen. Um zu sehen, wie Sie Ansible installieren können, klicken Sie hier.
Mit Ansible-Kernmodulen können Sie fast alles verwalten, wenn Sie Playbooks schreiben möchten, aber oft gibt es jemanden, der bereits eine Rolle für ein Problem geschrieben hat, das Sie zu lösen versuchen. Nehmen wir ein Beispiel:Sie möchten NTP-Clients auf den Linux-Rechnern verwalten. Sie haben zwei Möglichkeiten, entweder eine Rolle zu schreiben, die auf die Knoten angewendet werden kann, oder ansible-galaxy zu verwenden um eine vorhandene Rolle herunterzuladen, die jemand bereits für Sie geschrieben/getestet hat. Ansible Galaxy hat Rollen für fast alle Domänen und diese lösen unterschiedliche Probleme. Sie können https://galaxy.ansible.com/ besuchen, um sich ein Bild von Domains und beliebten Rollen zu machen. Jede im Galaxy-Repository veröffentlichte Rolle wird gründlich getestet und von den Benutzern bewertet, sodass Sie eine Vorstellung davon bekommen, wie es anderen Benutzern gefallen hat.
Um mit der NTP-Idee weiterzumachen, können Sie hier eine NTP-Rolle von Galaxy suchen und installieren.
Lassen Sie uns zunächst ansible-galaxy mit dem Hilfe-Flag ausführen, um zu prüfen, welche Optionen es uns gibt
[[email protected] ~]# ansible-galaxy --help
Wie Sie aus der obigen Ausgabe sehen können, wurden einige interessante Optionen gezeigt, da wir nach einer Rolle suchen, um NTP-Clients zu verwalten. Probieren Sie die Suchoption aus, um zu sehen, wie gut sie findet, wonach wir suchen.
[[email protected] ~]# ansible-galaxy search ntp
Hier ist die abgeschnittene Ausgabe des obigen Befehls.
Basierend auf unserer Suche wurden 341 Übereinstimmungen gefunden, wie Sie der obigen Ausgabe entnehmen können, haben viele dieser Rollen nicht einmal mit NTP zu tun, was bedeutet, dass unsere Suche etwas verfeinert werden muss. Es ist jedoch gelungen, einige NTP-Rollen zu ziehen was diese Rollen sind. Aber vorher möchte ich Ihnen sagen, welche Namenskonvention hier befolgt wird. Dem Namen einer Rolle wird immer der Name des Autors vorangestellt, sodass es einfach ist, Rollen mit demselben Namen zu trennen. Wenn Sie also eine NTP-Rolle geschrieben und im Galaxy Repo veröffentlicht haben, wird sie nicht mit einem anderen Repo mit demselben Namen verwechselt.
Nachdem dies aus dem Weg geräumt ist, können wir mit unserer Aufgabe fortfahren, eine NTP-Rolle für unsere Linux-Maschinen zu installieren. Versuchen wir es mit bennojoy.ntp Für dieses Beispiel, aber bevor wir dies verwenden, müssen wir einige Dinge herausfinden, ist diese Rolle mit der Version von Ansible kompatibel, die ich ausführe. Außerdem, wie lautet der Lizenzstatus dieser Rolle. Um diese herauszufinden, führen wir den folgenden Befehl ansible-galaxy aus,
[[email protected] ~]# ansible-galaxy info bennojoy.ntp
ok, das sagt also, die Mindestversion ist 1.4 und die Lizenz ist BSD, lass es uns herunterladen
[[email protected] ~]# ansible-galaxy install bennojoy.ntp - downloading role 'ntp', owned by bennojoy - downloading role from https://github.com/bennojoy/ntp/archive/master.tar.gz - extracting bennojoy.ntp to /etc/ansible/roles/bennojoy.ntp - bennojoy.ntp (master) was installed successfully [[email protected] ~]# ansible-galaxy list - bennojoy.ntp, master [[email protected] ~]#
Suchen wir die neu installierte Rolle.
[[email protected] ~]# cd /etc/ansible/roles/bennojoy.ntp/ [[email protected] bennojoy.ntp]# ls -l total 4 drwxr-xr-x. 2 root root 21 May 21 22:38 defaults drwxr-xr-x. 2 root root 21 May 21 22:38 handlers drwxr-xr-x. 2 root root 48 May 21 22:38 meta -rw-rw-r--. 1 root root 1328 Apr 20 2016 README.md drwxr-xr-x. 2 root root 21 May 21 22:38 tasks drwxr-xr-x. 2 root root 24 May 21 22:38 templates drwxr-xr-x. 2 root root 55 May 21 22:38 vars [[email protected] bennojoy.ntp]#
Ich werde diese neu heruntergeladene Rolle auf meinem Elasticsearch CentOS-Knoten ausführen. Hier ist meine Hosts-Datei
[[email protected] ~]# cat hosts [CentOS] elastic7-01 ansible_host=192.168.1.15 ansibel_port=22 ansible_user=linuxtechi [[email protected] ~]#
Versuchen wir, den Knoten mit dem folgenden ansiblen Ping-Modul zu pingen,
[[email protected] ~]# ansible -m ping -i hosts elastic7-01 elastic7-01 | SUCCESS => { "changed": false, "ping": "pong" } [[email protected] ~]#
So sieht die aktuelle ntp.conf auf einem elastischen Knoten aus.
[[email protected] ~]# head -30 /etc/ntp.conf
Da ich in Indien bin, fügen wir den Server in.pool.ntp.org hinzu zu ntp.conf. Ich müsste die Variablen im Standardverzeichnis der Rolle bearbeiten.
[[email protected] ~]# vi /etc/ansible/roles/bennojoy.ntp/defaults/main.yml
Ändern Sie die NTP-Serveradresse im Parameter „ntp_server“, nach der Aktualisierung sollte sie wie folgt aussehen.
Als letztes muss ich jetzt mein Playbook erstellen, das diese Rolle nennen würde.
[[email protected] ~]# vi ntpsite.yaml --- - name: Configure NTP on CentOS/RHEL/Debian System become: true hosts: all roles: - {role: bennojoy.ntp}
Speichern und beenden Sie die Datei
Wir sind bereit, diese Rolle jetzt auszuführen, verwenden Sie den folgenden Befehl, um das NTP-Playbook auszuführen,
[[email protected] ~]# ansible-playbook -i hosts ntpsite.yaml
Die Ausgabe des obigen NTP-Ansible-Playbooks sollte in etwa so aussehen:
Lassen Sie uns jetzt die aktualisierte Datei überprüfen. Gehen Sie zum elastischen Knoten und sehen Sie sich den Inhalt der Datei ntp.conf an
[[email protected] ~]# cat /etc/ntp.conf #Ansible managed driftfile /var/lib/ntp/drift server in.pool.ntp.org restrict -4 default kod notrap nomodify nopeer noquery restrict -6 default kod notrap nomodify nopeer noquery restrict 127.0.0.1 [[email protected] ~]#
Falls Sie keine Rolle finden, die Ihre Anforderungen erfüllt, kann ansible-galaxy Ihnen helfen, eine Verzeichnisstruktur für Ihre benutzerdefinierten Rollen zu erstellen. Dies hilft Ihren Playbooks zusammen mit den Variablen, Handlern, Vorlagen usw., die in einer standardisierten Dateistruktur zusammengestellt sind. Lassen Sie uns unsere eigene Rolle erstellen, es ist immer eine gute Praxis, ansible-galaxy die Struktur für Sie erstellen zu lassen.
[[email protected] ~]# ansible-galaxy init pk.backup - pk.backup was created successfully [[email protected] ~]#
Überprüfen Sie die Struktur Ihrer Rolle mit dem Baumbefehl
Lassen Sie mich kurz erklären, wofür jedes dieser Verzeichnisse und Dateien da ist, jedes davon erfüllt einen Zweck.
Die allererste ist die Standardeinstellung Verzeichnis, das die Dateien enthält, die Variablen mit enthalten, hat den niedrigsten Vorrang, wenn die gleichen Variablen im var-Verzeichnis zugewiesen werden, hat es Vorrang vor Standard. Die Handler Verzeichnis hostet die Handler. Die Datei und Vorlagen Behalten Sie alle Dateien, die Ihre Rolle möglicherweise kopieren muss, und Jinja-Vorlagen jeweils in Playbooks verwendet werden. Die Aufgaben Im Verzeichnis werden Ihre Playbooks mit den Aufgaben gespeichert. Das var-Verzeichnis besteht aus allen Dateien, die die in der Rolle verwendeten Variablen hosten. Das Testverzeichnis besteht aus einem Beispielinventar und Testplaybooks, die zum Testen der Rolle verwendet werden können. Das Meta-Verzeichnis besteht aus allen Abhängigkeiten von anderen Rollen zusammen mit den Informationen zur Urheberschaft.
Schließlich README.md Datei besteht einfach aus einigen allgemeinen Informationen wie Beschreibung und Mindestversion von Ansible, mit der diese Rolle kompatibel ist.