Anfänger-Tutorial – Ansible Playbooks, Variablen und Inventar

Beginner S Tutorial Ansible Playbooks



Ansible-Playbooks sind Dateien, die Aufgaben enthalten, die ausgeführt werden, um die Hosts mit Ansible zu konfigurieren. Ansible Playbooks werden im YAML-Format geschrieben. YAML ist ein sehr einfaches Dateiformat, genau wie JSON. Ich werde Ihnen in einem späteren Abschnitt dieses Artikels zeigen, wie Ansible YAML-Playbooks aussehen.

Ansible Inventory-Dateien enthalten eine Liste der Hosts, die Sie mit Ansible konfigurieren oder verwalten möchten. Sie können diese Hosts auch gruppieren und nach Gruppen verwalten. Sie können auch für jeden Host oder für eine Gruppe von Hosts unterschiedliche Variablen übergeben.







In diesem Artikel zeige ich Ihnen mit praktischen Beispielen, wie Sie mit Ansible-Playbooks, Variablen, Inventardateien und einigen gängigen Ansible-Modulen arbeiten. Also, lass uns loslegen!



Voraussetzungen

Wenn Sie die Beispiele in diesem Artikel ausprobieren möchten,



1) Sie müssen Ansible auf Ihrem Computer installiert haben.
2) Sie müssen mindestens einen Ubuntu/Debian-Host und einen CentOS/RHEL 8-Host für die Ansible-Automatisierung konfiguriert haben.





Es gibt viele Artikel auf LinuxHint, die sich der Installation von Ansible und der Konfiguration von Hosts für die Ansible-Automatisierung widmen. Sie können diese Artikel bei Bedarf für weitere Informationen lesen.

Erstellen eines Projektverzeichnisses

Erstellen Sie zunächst ein Projektverzeichnis ~/projekt/ mit folgendem Befehl:

$mkdir -pv~/Projekt/Spielbücher

Navigieren Sie zum ~/projekt/ Verzeichnis wie folgt:

$CD~/Projekt

Grundlegende Inventardatei:

Erstellen Sie eine Ansible-Inventardatei Gastgeber im Projektverzeichnis mit folgendem Befehl:

$NanoGastgeber

Sie können die IP-Adressen der Hosts eingeben, die Sie mit Ansible konfigurieren/automatisieren möchten Gastgeber Inventardatei.

192.168.20.167
192.168.20.168
192.168.20.169
192.168.20.170

Wenn Sie mit diesem Schritt fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Wenn Sie DNS-Namen anstelle von IP-Adressen in der Inventardatei verwenden möchten, können Sie dies ebenfalls tun.

Wenn Sie keinen funktionierenden DNS-Server haben, können Sie den /etc/hosts Datei auf Ihrem Computer für die lokale DNS-Auflösung.

Öffnen Sie für die lokale DNS-Auflösung das /etc/hosts Datei mit einem Texteditor ( Nano , in meinem Fall) wie folgt:

$sudo Nano /etc/Gastgeber

Geben Sie die IP-Adressen und Ihre gewünschten DNS-Namen wie folgt ein:

192.168.20.167 vm1.nodekite.com
192.168.20.168 vm2.nodekite.com
192.168.20.169 vm3.nodekite.com
192.168.20.170 vm4.nodekite.com

Wenn Sie mit diesem Schritt fertig sind, drücken Sie + x gefolgt von UND und .

Öffnen Sie die Ansible-Inventardatei Gastgeber wie folgt:

$NanoGastgeber

Sie können nun die DNS-Namen der Hosts eingeben, die Sie mit Ansible konfigurieren/automatisieren möchten Gastgeber Inventardatei.

vm1.nodekite.com
vm2.nodekite.com
vm3.nodekite.com
vm4.nodekite.com

Wenn Sie fertig sind, speichern Sie die Hosts-Inventardatei, indem Sie drücken + x gefolgt von UND und .

Testen der Konnektivität zu allen Hosts

Jetzt können Sie versuchen, alle Hosts in der Inventardatei wie folgt zu pingen:

$ansible-ichbeherbergt alle-uansible-m Klingeln

Wie Sie sehen, sind alle Hosts in der Inventardatei erreichbar. Wir sind also bereit, zum nächsten Abschnitt dieses Artikels überzugehen.

Dein erstes Ansible Playbook

Lassen Sie uns ein einfaches Ansible-Playbook erstellen ping_all_hosts.yaml in dem Spielbücher/ Verzeichnis. Diese Aktion pingt alle Hosts in der Gastgeber Inventardatei, wie zuvor.

$NanoSpielbücher/ping_all_hosts.yaml

Geben Sie die folgenden Zeilen in die ein ping_all_hosts.yaml Ansible Playbook-Datei:

- Gastgeber: alle
Benutzer: ansible
Aufgaben:
- Name: Alle Hosts anpingen
Klingeln:

Hier,

Gastgeber: alle – wählt alle Hosts aus der Inventardatei aus Gastgeber .
Benutzer: ansible – weist Ansible an, SSH in die Hosts in der Inventardatei als ansible Benutzer.
Aufgaben – Hier sind alle Aufgaben aufgelistet, die Ansible in den Hosts ausführen wird. Jede der Aufgaben hat normalerweise ein Name und eine oder mehrere modulspezifische Optionen.

Das Spielbuch ping_all_hosts.yaml hat nur eine Aufgabe, alle Hosts in der Inventardatei anzupingen Gastgeber . Der Name der Aufgabe ist Alle Hosts anpingen und es verwendet die Klingeln Modul.

Die Klingeln Modul benötigt keine weiteren Optionen. Also habe ich es leer gelassen (nach dem Doppelpunkt steht nichts, : )

Wenn Sie mit diesem Schritt fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Sie können die ping_all_hosts.yaml Ansible-Playbook wie folgt:

$ansible-playbook-ichhostet Playbooks/ping_all_hosts.yaml

Wie Sie sehen, ist die Ping-Aufgabe auf allen Hosts in der Inventardatei erfolgreich.

Einfache Ansible-Konfigurationsdatei

Im vorherigen Beispiel mussten Sie die -ich Option, um Ansible mitzuteilen, welche Inventardatei verwendet werden soll. In meinem Fall ist es die Gastgeber Inventardatei.

$ansible-playbook-ichhostet Playbooks/ping_all_hosts.yaml

Wenn Sie keine Inventardatei mit dem -ich Option jedes Mal, wenn Sie ein Ansible-Playbook ausführen, müssen Sie lediglich eine Standardbestandsdatei für Ihr Projekt festlegen.

Erstellen Sie dazu eine neue Ansible-Konfigurationsdatei ansible.cfg in Ihrem Projektstamm wie folgt:

$Nanoansible.cfg

Geben Sie die folgenden Zeilen in die ein ansible.cfg Datei:

[Standardeinstellungen]
Inventar = ./Gastgeber

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Sie können dasselbe Ansible-Playbook wie folgt ausführen:

$Ansible-Playbook-Playbooks/ping_all_hosts.yaml

Wie Sie sehen, verwendet das Playbook die Gastgeber Inventardatei standardmäßig. Sie können die weiterhin verwenden -ich Option, um bei Bedarf eine andere Inventardatei anzugeben. Ansible ist sehr flexibel.

Gruppieren von Hosts in der Inventardatei

Bisher habe ich Ihnen gezeigt, wie Sie eine Reihe von Aufgaben (Playbook) auf allen Hosts in der Inventardatei ausführen. Aber was ist, wenn Sie eine Reihe von Aufgaben in einigen der Hosts und eine andere Reihe von Aufgaben in anderen Hosts ausführen möchten? Sie können die Hosts in der Inventardatei gruppieren und verschiedene Aufgaben für die Hostgruppen ausführen.

In diesem Abschnitt zeige ich Ihnen, wie Sie Hosts in der Inventardatei gruppieren und mit Hostgruppen arbeiten.

Öffnen Sie zuerst die Inventardatei Gastgeber wie folgt:

$NanoGastgeber

Geben Sie die folgenden Zeilen in die ein Gastgeber Inventardatei:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[Centos8]
vm3.nodekite.com
vm4.nodekite.com

Hier habe ich zwei Hostgruppen erstellt: debian10 und Centos8 .

In dem debian10 Gruppe habe ich zwei Hosts: vm1.nodekite.com und vm2.nodekite.com

In dem Centos8 Gruppe habe ich zwei Hosts: vm3.nodekite.com und vm4.nodekite.com

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Wir werden jetzt ein neues Playbook erstellen ping_debian10_hosts.yaml , die Hosts wie zuvor anpingen, aber nur die Hosts in der debian10 Wirtsgruppe.

Erstellen Sie ein Playbook ping_debian10_hosts.yaml in dem Spielbücher/ Verzeichnis wie folgt:

$NanoSpielbücher/ping_debian10_hosts.yaml

Geben Sie die folgenden Zeilen in die ein ping_debian10_hosts.yaml Ansible-Playbook:

- Hosts: debian10
Benutzer: ansible
Aufgaben:
- Name: Ping alle Debian10Gastgeber
Klingeln:

Anstatt von Gastgeber: alle , Ich habe hinzugefügt Hosts: debian10 Hier. debian10 ist die Gastgebergruppe. Dieses Playbook läuft nur auf den Hosts in der debian10 Wirtsgruppe.

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Führen Sie das Playbook wie folgt aus:

$Ansible-Playbook-Playbooks/ping_debian10_hosts.yaml

Wie Sie sehen können, sind nur die Gastgeber in der debian10 Hostgruppe werden angepingt.

Erstellen Sie mit derselben Methode ein weiteres Playbook ping_centos8_hosts.yaml wie folgt:

$NanoSpielbücher/ping_centos8_hosts.yaml

Geben Sie die folgenden Zeilen in die ein ping_centos8_hosts.yaml Ansible-Playbook:

- Gastgeber: centos8
Benutzer: ansible
Aufgaben:
- Name: Ping all CentOS8Gastgeber
Klingeln:

Genauso habe ich hinzugefügt Gastgeber: centos8 Hier. Centos8 ist die Gastgebergruppe. Dieses Playbook läuft nur auf den Hosts in der Centos8 Wirtsgruppe.

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Führen Sie das Playbook wie folgt aus:

$Ansible-Playbook-Playbooks/ping_centos8_hosts.yaml

Wie Sie sehen können, sind nur die Gastgeber in der Centos8 Hostgruppe werden angepingt.

Ansible Variablentypen

Es gibt verschiedene Arten von Variablen in Ansible. Die wichtigsten Variablentypen sind Ansible Facts-Variablen und Benutzerdefinierte Variablen .

Ansible Facts-Variablen: Abhängig vom Host, auf dem Ansible arbeitet, generiert Ansible Ansible-Faktenvariablen. Ansible Facts-Variablen enthalten Informationen über den Host, wie IP-Adressen, Hostname, Domänenname, Datum, Uhrzeit, Shell-Umgebungsvariablen und mehr.

Benutzerdefinierte Variablen: Dies sind benutzerdefinierte Variablen, die vom Benutzer definiert werden. Sie können benutzerdefinierte Variablen von der Befehlszeile aus übergeben oder die Inventardatei verwenden.

Es gibt hauptsächlich benutzerdefinierte Variablen von zwei Arten: Gruppenvariablen und Hostvariablen .

Ansible Variable Vorrang

Die variable Priorität von Ansible ist : Befehlszeilenvariablen > Hostvariablen > Gruppenvariablen

Wenn Sie dieselbe Variable wie die Hostvariable und die Gruppenvariable festlegen, wird die Hostvariable angewendet.

Ebenso ersetzen die Variablen, die Sie beim Ausführen eines Playbooks über die Befehlszeile festlegen, sowohl die Host- als auch die Gruppenvariablen.

Arbeiten mit Ansible-Fakten-Variablen

In diesem Abschnitt zeige ich Ihnen, wie Sie mit Ansible facts-Variablen arbeiten. Also, lass uns loslegen!

Sie können alle Ansible Facts-Variablen der Hosts in Ihrem Gastgeber Inventardatei wie folgt:

$ansible alle-uansible-merstellen

Wie Sie sehen, sind alle Ansible Facts-Variablen im JSON-Format aufgelistet. Es ist eine sehr lange Liste.

Da die Liste recht lang ist, können Sie sie mit einem Pager-Programm öffnen, wie z weniger wie folgt:

$ansible alle-uansible-merstellen| weniger

Nun können Sie die Ausgabe nach Bedarf nach oben, unten, links und rechts scrollen.

Sie können auch über den Pager nach Variablennamen suchen. Drücken Sie dazu die / Taste auf Ihrer Tastatur. Geben Sie dann die Suchzeichenfolge ein ( Hostname in meinem Fall) und drücke .

Wie Sie sehen können, ist die Variable Ansible facts, die mit der Suchzeichenfolge übereinstimmt, ansible_hostname . Sie können drücken n um zum nächsten Spiel zu gehen und P um vom Pager zum vorherigen Match zu gehen. So finden Sie die Variable Ansible facts, die Sie für Ihr Ansible-Projekt benötigen.

Sehen wir uns nun an, wie Sie auf die Ansible-Faktenvariablen zugreifen.

Erstellen Sie ein neues Playbook print_variable1.yaml wie folgt:

$NanoSpielbücher/print_variable1.yaml

Geben Sie die folgenden Zeilen in die ein print_variable1.yaml Datei:

- Gastgeber: alle
Benutzer: ansible
Aufgaben:
- Name: DruckenHostnamealler Gastgeber
debuggen:
Nachricht:'{{ ansible_hostname }}'

Hier habe ich eine Aufgabe hinzugefügt Hostnamen aller Hosts drucken . Diese Aufgabe verwendet die Ansible debuggen Modul zum Drucken einer Nachricht, wenn das Playbook ausgeführt wird.

Nachricht ist der einzige erforderliche Parameter des debuggen Modul. Die Nachricht Parameter akzeptiert eine Zeichenfolge in Anführungszeichen, die die Nachricht ist, die auf der Konsole ausgegeben wird.

Hier, {{ Variablennamen }} format wird verwendet, um auf eine Variable zuzugreifen. In diesem Fall, {{ ansible_hostname }} wird verwendet, um die zu drucken ansible_hostname Variable jedes der Hosts in der Inventardatei.

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Sie können auch auf die Variable Ansible facts zugreifen als ansible_facts[variable_name] . Also, die ansible_hostname variabel wird ansible_facts[Hostname] .

Wir können das neu schreiben print_variable1.yaml auch ein solches Spielbuch. Wir erhalten die gleiche Ausgabe.

- Gastgeber: alle
Benutzer: ansible
Aufgaben:
- Name: DruckenHostnamealler Gastgeber
debuggen:
Nachricht:'{{ ansible_facts['variable_name'] }}'

Führen Sie das Playbook aus print_variable1.yaml wie folgt:

$Ansible-Playbook-Playbooks/print_variable1.yaml

Wie Sie sehen, wird der Hostname jedes Hosts in der Inventardatei auf der Konsole gedruckt.

Lassen Sie uns nun die Standard-IPv4-Adresse jedes Hosts zusammen mit dem Hostnamen ausgeben. Wie Sie sehen, kann auf die Standard-IPv4-Adresse des Hosts über die die Anschrift Eigentum der ansible_default_ipv4 Objekt.

Erstellen Sie ein neues Playbook print_variable2.yaml wie folgt:

$NanoSpielbücher/print_variable2.yaml

Geben Sie die folgenden Zeilen in die ein print_variable2.yaml Datei:

- Gastgeber: alle
Benutzer: ansible
Aufgaben:
- Name: DruckenHostnamealler Gastgeber
debuggen:
Nachricht:'{{ ansible_hostname }} - {{ ansible_default_ipv4.address }}'

Dieses Playbook ist das gleiche wie zuvor. Der einzige Unterschied ist die neue Variable {{ ansible_default_ipv4.address }} in dem Nachricht Option der debuggen Modul.

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Führen Sie die print_variable2.yaml Spielbuch wie folgt:

$Ansible-Playbook-Playbooks/print_variable2.yaml

Wie Sie sehen, werden die Standard-IPv4-Adresse und der Hostname der Hosts auf der Konsole gedruckt.

So arbeiten Sie also mit Ansible Facts-Variablen.

Festlegen von benutzerdefinierten Variablen über die Befehlszeile:

In diesem Abschnitt zeige ich Ihnen, wie Sie benutzerdefinierte Variablen über die Befehlszeile festlegen, während Sie Ansible-Playbooks ausführen.

Erstellen Sie zuerst ein neues Playbook print_variable3.yaml wie folgt:

$NanoSpielbücher/print_variable3.yaml

Geben Sie die folgenden Zeilen in die ein print_variable3.yaml Datei:

- Gastgeber: alle
Benutzer: ansible
Aufgaben:
- Name: DruckenBefehlZeilenvariable
debuggen:
Nachricht:'Willkommen {{ Benutzername }}'

Hier habe ich die debuggen Modul zum Drucken der Nachricht Willkommen {{ Benutzername }} . Nutzername ist eine Variable, die ersetzt wird, wenn wir das Playbook ausführen.

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Führen Sie das Playbook aus print_variable3.yaml wie folgt:

$ansible-playbook-Und 'Benutzername=Bob'Spielbücher/print_variable3.yaml

HINWEIS: Hier, -Und Option wird verwendet, um a . zu übergeben Nutzername variabel mit dem Wert Bob zum Spielbuch print_variable3.yaml von der Befehlszeile.

Wie Sie sehen können, ist die Nachricht Willkommen Bob wird auf der Konsole gedruckt.

Lassen Sie uns nun herausfinden, wie Sie mehrere Variablen von der Befehlszeile aus übergeben.

Erstellen Sie ein neues Playbook print_variable4.yaml wie folgt:

$NanoSpielbücher/print_variable4.yaml

Geben Sie die folgenden Zeilen in die ein print_variable4.yaml Datei:

- Gastgeber: alle
Benutzer: ansible
Aufgaben:
- name: Benutzerdefinierte Variablen drucken
debuggen:
Nachricht:'benutzername={{ benutzername }} http_port={{ http_port }}'

Das Playbook sollte Ihnen im Moment sehr vertraut sein. Alles, was es tut, ist, die 2 Variablen zu drucken Nutzername und http_port auf der Konsole.

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Sie können jetzt die Nutzername und http_port variabel an das Playbook mit zwei verschiedenen -Und Möglichkeit wie folgt:

$ ansible-playbook-Und 'Benutzername=Bob' -Und 'http_port=8080'
Spielbücher/print_variable4.yaml

Oder Sie können die Variablen einfach wie folgt durch ein Leerzeichen trennen:

$ ansible-playbook-Und 'Benutzername=Bob http_port=8080'
Spielbücher/print_variable4.yaml

Wie Sie sehen können, ist die Nutzername und http_port Variablen werden auf der Konsole ausgegeben.

Arbeiten mit benutzerdefinierten Gruppenvariablen

Angenommen, Sie möchten einer Gruppe von Hosts einige Variablen hinzufügen. Diese Aktion ist in Ansible sehr einfach durchzuführen.

Öffne zuerst dein Gastgeber Inventardatei wie folgt:

$NanoGastgeber

Geben Sie die folgenden Zeilen in Ihr . ein Gastgeber Inventardatei:

[debian10]
vm1.nodekite.com
vm2.nodekite.com
[debian10:vars]
Benutzername = Lilie
http_port =4343
[Centos8]
vm3.nodekite.com
vm4.nodekite.com
[centos8: vars]
Benutzername = Bob
http_port =7878

Wie ihr seht, habe ich eine neue Rubrik erstellt [debian10:vars] zum debian10 host-Gruppe und fügte die Variablen hinzu ( Nutzername und http_port ) zum debian10 Gastgebergruppe dort.

Genauso habe ich einen neuen Abschnitt erstellt [centos8: vars] zum Centos8 host-Gruppe und fügte die Variablen hinzu ( Nutzername und http_port ) zum Centos8 Gastgebergruppe dort.

Wenn Sie fertig sind, speichern Sie die Gastgeber Inventardatei durch Drücken von + x gefolgt von UND und .

Führen Sie die print_variable4.yaml Spielbücher wie folgt:

$Ansible-Playbook-Playbooks/print_variable4.yaml

Wie Sie sehen, werden die richtigen Variablen je nach Hostgruppe an jeden der Hosts übergeben.

Arbeiten mit benutzerdefinierten Hostvariablen

In diesem Abschnitt zeige ich Ihnen, wie Sie Variablen für bestimmte Hosts in der Inventardatei festlegen.

Öffnen Sie zuerst die Gastgeber Inventardatei wie folgt:

$NanoGastgeber

Um Variablen zu einem bestimmten Host hinzuzufügen (z. B. vm1.nodekite.com ), fügen Sie einfach ein Leerzeichen/Tabulator nach dem Host-IP/DNS-Namen hinzu und geben Sie Ihre Variablen ein, wie im Screenshot unten gezeigt.

Sie können auch mehrere Variablen hinzufügen. Trennen Sie einfach jede Variable mit einem Leerzeichen.

Wenn Sie fertig sind, speichern Sie die Inventardatei, indem Sie drücken + x gefolgt von UND und .

Führen Sie die print_variable4.yaml Spielbücher wie folgt:

$Ansible-Playbook-Playbooks/print_variable4.yaml

Wie Sie sehen, werden die Variablen nur für die vm1.nodekite.com Gastgeber. Auf die anderen Hosts werden Gruppenvariablen angewendet.

Schnelles Generieren von Inventardateien mit Bereichen

Sie können Bereiche verwenden, um schnell Ansible-Inventardateien zu generieren, wenn Ihre Host-IP-Adressen oder DNS-Namen konsistent sind (d. h. ein bestimmtes Format haben).

In den früheren Beispielen habe ich die Hosts verwendet vm1.nodekite.com , vm2.nodekite.com , vm3.nodekite.com und vm4.nodekite.com . Anstatt 4 Zeilen einzutippen, hätte ich einfach tippen können vm[1:4].nodekite.com in der Inventardatei.

Um mit Bereichen zu experimentieren, öffnen Sie die Gastgeber Inventardatei wie folgt:

$NanoGastgeber

Entfernen Sie alle Hosts und Variablen aus den Inventardateien.

Wir dürfen jetzt ersetzen vm1.nodekite.com und vm2.nodekite.com mit vm[1:2].nodekite.com zum debian10 Host-Gruppe wie folgt.

Auf die gleiche Weise können wir ersetzen vm3.nodekite.com und vm4.nodekite.com mit vm[3:4].nodekite.com zum Centos8 Wirtsgruppe.

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Führen Sie die ping_all_hosts.yaml wie folgt:

$Ansible-Playbook-Playbooks/ping_all_hosts.yaml

Wie Sie sehen, wurden die Hostbereiche beim Ausführen des Playbooks erweitert.

Speichern von Variablen in verschiedenen Dateien

Das Speichern der Gruppenvariablen und Hostvariablen in derselben Inventardatei ist sehr einfach. Möglicherweise suchen Sie jedoch nach mehr Flexibilität. Vor allem, wenn Sie Bereiche in Ihrer Inventardatei verwenden möchten, da Sie bei Verwendung von Bereichen keine Hostvariablen mehr festlegen können. Nun, Sie können Gruppenvariablen und Hostvariablen in verschiedenen Dateien speichern. In diesem Abschnitt zeige ich Ihnen, wie es geht.

Standardmäßig sucht Ansible nach Gruppenvariablen im group_vars / Verzeichnis- und Host-Variablen im host_vars / Verzeichnis.

Erstellen Sie also die group_vars / und host_vars / Verzeichnis wie folgt:

$mkdir -pv {Gastgeber, Gruppe}_deren

So legen Sie Gruppenvariablen für die . fest debian10 Hostgruppe, erstellen Sie eine Datei debian10 (wie Gruppenname) im group_vars / Verzeichnis wie folgt:

$Nanogroup_vars/debian10

Geben Sie Ihre Variablen wie folgt ein:

Benutzername: Lilie
http_port: 4343

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von Y und .

Auf die gleiche Weise können Sie Gruppenvariablen für die Centos8 Hostgruppe, erstellen Sie eine Datei Centos8 (wie Gruppenname) im group_vars / Verzeichnis wie folgt:

$Nanogroup_vars/Centos8

Geben Sie Ihre Variablen wie folgt ein:

Benutzername: Bob
http_port: 7878

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von Y und .

Führen Sie die print_variable4.yaml Spielbuch wie folgt:

$Ansible-Playbook-Playbooks/print_variable4.yaml

Wie Sie sehen, sind die Gruppenvariablen für jede Hostgruppe richtig eingestellt.

So legen Sie Hostvariablen für den Host fest vm1.nodekite.com , erstelle eine Datei vm1.nodekite.com (entspricht dem Hostnamen oder der IP-Adresse) im host_vars / Verzeichnis wie folgt:

$Nanovm1.nodekite.com

Geben Sie Ihre Hostvariablen wie folgt ein:

Benutzername: Alex
http_port: 7788

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von Y und .

Führen Sie die print_variable4.yaml Spielbuch wie folgt:

$ ansible-playbook-Playbooks/print_variable4.yaml
[

Wie Sie sehen, sind die Host-Variablen für den Host korrekt eingestellt vm1.nodekite.com .

Arbeiten mit Schleifen in Ansible

In diesem Abschnitt zeige ich Ihnen, wie Sie Schleifen in Ansible verwenden.

Erstellen Sie zuerst ein neues Playbook loop1.yaml in dem Spielbücher/ Verzeichnis wie folgt:

$NanoSpielbücher/loop1.yaml

Geben Sie die folgenden Zeilen in die ein loop1.yaml Spielbuch:

- Gastgeber: alle
Benutzer: ansible
Aufgaben:
- Name: Benutzerliste drucken
debuggen:
Nachricht:'Benutzer: {{ item }}'
with_items:
- Alex
- Bob
- Lilie

Hier habe ich 1 Aufgabe, die eine Liste von Benutzern mit Schleife druckt.

Um die Iterationswerte für die Aufgabe festzulegen, verwenden Sie die with_items Modul. Anschließend fügen Sie die Werte nacheinander hinzu.

with_items:
- Alex
- Bob
- Lilie

Auf den Wert der aktuellen Iteration greifen Sie mit der Artikel Variable.

debuggen:
Nachricht:'Benutzer: {{ item }}'

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Führen Sie die loop1.yaml Spielbuch wie folgt:

$Ansible-Playbook-Playbooks/loop1.yaml

Wie Sie sehen, wurde für jedes Element auf jedem Host dieselbe Aufgabe ausgeführt. Die Schleife funktioniert also.

Arbeiten mit Bedingungen in Ansible

Wenn Sie Aufgaben unter bestimmten Bedingungen ausführen möchten, ist dieser Abschnitt genau das Richtige für Sie.

Um Aufgaben basierend auf einer Bedingung auszuführen, können Sie die Wenn Modul von Ansible. Sehen wir uns ein Beispiel für dieses Modul an. Erstellen Sie zuerst ein neues Playbook Bedingung1.yaml wie folgt:

$NanoSpielbücher/Bedingung1.yaml

Geben Sie die folgenden Zeilen in die ein Bedingung1.yaml Spielbuch:

- Gastgeber: alle
Benutzer: ansible
Aufgaben:
- name: Führen Sie diese Aufgabe nur unter Debian aus
debuggen:
Nachricht:'Diese Aufgabe läuft unter Debian'
wann: ansible_facts['Verteilung']=='Debian'

Hier,

ansible_facts[‘distribution’] == ‘Debian’ wird verwendet, um zu überprüfen, ob die Verteilung ist Debian . Die Aufgabe wird nur ausgeführt, wenn die Distribution Debian ist.

Die ansible_facts[‘Verteilung’] wird verwendet, um auf die Variable Ansible Facts zuzugreifen ansible_distribution . Sie können die Distributionsversion auch mit dem ansible_distribution_major_version Variable.

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Führen Sie die Bedingung1.yaml Spielbuch wie folgt:

$Ansible-Playbook-Playbooks/Bedingung1.yaml

Wie Sie sehen, lief die Aufgabe nur auf den Debian-Hosts. Die Aufgabe wurde auf den CentOS-Hosts nicht ausgeführt.

Sie können auch gleichzeitig nach mehreren Bedingungen suchen und die Aufgabe nur ausführen, wenn alle Bedingungen zutreffen. Sehen wir uns ein Beispiel an.

Erstellen Sie ein neues Playbook Bedingung2.yaml wie folgt:

$NanoSpielbücher/Bedingung2.yaml

Geben Sie die folgenden Zeilen in die ein Bedingung2.yaml Datei:

- Gastgeber: alle
Benutzer: ansible
Aufgaben:
- name: Führen Sie diese Aufgabe nur unter Debian aus10
debuggen:
Nachricht:'Diese Aufgabe läuft unter Debian 10'
wann: ansible_facts['Verteilung']=='Debian'
und ansible_facts['distribution_major_version']=='10'

Hier wird die Aufgabe nur ausgeführt, wenn die Distribution Debian ist ( ansible_facts[‘distribution’] == ‘Debian’ ) und die Version ist 10 ( ansible_facts[‘distribution_major_version’] == ’10’ ). Wenn beide Bedingungen zutreffen, wird die Aufgabe ausgeführt. Andernfalls wird die Aufgabe nicht ausgeführt.

Ich habe die benutzt und Schlüsselwort, um zu überprüfen, ob beide Bedingungen hier zutreffen. Wenn Sie überprüfen möchten, ob eine der Bedingungen zutrifft, können Sie die oder Stichwort statt.

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Führen Sie das Playbook aus Bedingung2.yaml wie folgt:

$Ansible-Playbook-Playbooks/Bedingung2.yaml

Wie Sie sehen, lief die Aufgabe nur auf den Debian 10-Hosts.

Lass uns das Playbook ändern Bedingung2.yaml um die Aufgabe nur auf Debian 8-Hosts wie folgt auszuführen.

Wie Sie sehen, wurden alle Hosts übersprungen, da ich keine Debian 8-Hosts in der Inventardatei habe.

Arbeiten mit dem Ansible apt-Modul

Die geeignet Modul von Ansible wird verwendet, um ein bestimmtes Softwarepaket auf Ubuntu/Debian-Hosts zu installieren. Lassen Sie uns sehen, wie Sie dieses Modul verwenden.

Erstellen Sie zuerst ein neues Playbook apt1.yaml in dem Spielbücher/ Verzeichnis wie folgt:

$NanoSpielbücher/apt1.yaml

Geben Sie die folgenden Zeilen in die ein apt1.yaml Spielbuch:

- Hosts: debian10
Benutzer: ansible
wahr werden
Aufgaben:
- Name: Apache2 installieren
geeignet:
Name: Apache2
Zustand: aktuell

Die geeignet Modul benötigt nur die Name des Pakets, das Sie installieren/aktualisieren/entfernen möchten und die Zustand des Pakets.

Hier versuche ich, das zu installieren Apache2 Paket ( Name: Apache2 ) auf meinen Debian 10-Hosts. Da ich versuche, ein Paket zu installieren und es auch zu aktualisieren, wenn eine neue Version verfügbar ist, Zustand sollte sein neueste .

Zustand akzeptiert auch die folgenden Optionen:

- abwesend – Das Paket wird entfernt, wenn es bereits installiert ist.
- neueste – Das Paket wird aktualisiert, wenn ein Update verfügbar ist. Wenn das Paket noch nicht installiert ist, wird es installiert.
- gegenwärtig – Das Paket wird installiert, wenn es noch nicht installiert ist. Das Paket wird jedoch nicht aktualisiert, wenn ein Update verfügbar ist.

Beachten Sie, dass ich hinzugefügt habe wahr werden im Spielbuch. Dies wird die ansible Benutzer-Sudo-Berechtigungen zum Ändern der Dateisystemstruktur (z. B. Pakete installieren/aktualisieren/entfernen). Ohne wahr werden , das geeignet Modul kann das Modul nicht installieren Apache2 Paket.

Wenn Sie fertig sind, speichern Sie das Playbook, indem Sie drücken + x gefolgt von UND und .

Führen Sie die apt1.yaml Spielbuch wie folgt:

$Ansible-Playbook-Playbooks/apt1.yaml

Wie Sie sehen, lief das Playbook erfolgreich auf den Debian 10-Hosts.

Wie Sie sehen können, ist die Apache2 Paket ist auf meinen Debian 10-Hosts installiert.

Arbeiten mit dem Ansible dnf/yum-Modul

Die dnf und lecker Modul von Ansible wird verwendet, um ein bestimmtes Softwarepaket auf CentOS/RHEL-Hosts zu installieren. Sie können dieses Modul auf die gleiche Weise verwenden, wie Sie es getan haben geeignet Modul im vorherigen Abschnitt dieses Artikels.

Beide dnf und lecker Module akzeptieren die gleichen Parameter. Sie können die dnf Modul auf CentOS/RHEL 8-Hosts und lecker auf CentOS/RHEL 7 oder älter.

Betrachten wir nun ein Beispiel für dieses Modul.

Erstellen Sie zuerst ein neues Playbook dnf1.yaml in dem Spielbücher/ Verzeichnis wie folgt:

$NanoSpielbücher/dnf1.yaml

Geben Sie die folgenden Zeilen in die ein dnf1.yaml Spielbuch:

- Gastgeber: centos8
Benutzer: ansible
wahr werden
Aufgaben:
- Name: httpd-Paket installieren
dnf:
Name: httpd
Zustand: aktuell

Die dnf und lecker Modul benötigt nur die Name des Pakets, das Sie installieren/aktualisieren/entfernen möchten und die Zustand des Pakets.

Hier versuche ich, das zu installieren httpd Paket ( Name: httpd ) auf meinen CentOS 8-Hosts. Da ich versuche, ein Paket zu installieren und es auch aktualisieren möchte, wenn eine neue Version verfügbar ist, ist die Zustand sollte sein neueste .

Zustand akzeptiert die folgenden Optionen:

- abwesend – Das Paket wird entfernt, wenn es bereits installiert ist.
- neueste – Das Paket wird aktualisiert, wenn ein Update verfügbar ist. Wenn das Paket noch nicht installiert ist, wird es installiert.
- gegenwärtig – Das Paket wird installiert, wenn es noch nicht installiert ist. Das Paket wird jedoch nicht aktualisiert, wenn ein Update verfügbar ist.

Beachten Sie, dass ich hinzugefügt habe wahr werden im Spielbuch. Das gibt dem ansible Benutzer-Sudo-Berechtigungen zum Ändern der Dateisystemstruktur (z. B. Pakete installieren/aktualisieren/entfernen). Ohne wahr werden , das geeignet Modul kann das Modul nicht installieren httpd Paket.

Wenn Sie fertig sind, speichern Sie das Playbook, indem Sie drücken + x gefolgt von UND und .

Führen Sie die dnf1.yaml Spielbuch wie folgt:

$Ansible-Playbook-Playbooks/dnf1.yaml

Wie Sie sehen, wurde das Playbook erfolgreich auf dem CentOS 8-Host ausgeführt.

Arbeiten mit dem Ansible-Servicemodul

Die Service -Modul von Ansible wird verwendet, um Dienste in Ihren Hosts zu starten, zu stoppen, neu zu starten, zu aktivieren (Dienst zum Start hinzuzufügen) und zu deaktivieren (Dienst aus dem Start zu entfernen).

In früheren Abschnitten habe ich Ihnen gezeigt, wie Sie das Apache HTTP-Serverpaket mit Ansible installieren geeignet , dnf und lecker Module. Lassen Sie uns nun sicherstellen, dass der Apache HTTP-Serverdienst ausgeführt wird und zum Systemstart hinzugefügt wurde.

Ich werde mit meinen Debian 10-Hosts arbeiten. Sie können jedoch mit CentOS 8-Hosts arbeiten, wenn Sie möchten. Passen Sie das Playbook einfach entsprechend an.

Erstellen Sie zunächst ein neues Ansible-Playbook apt2.yaml wie folgt:

$NanoSpielbücher/apt2.yaml

Geben Sie die folgenden Zeilen in die ein apt2.yaml Spielbuch:

- Hosts: debian10
Benutzer: ansible
wahr werden
Aufgaben:
- Name: Apache2 installieren
geeignet:
Name: Apache2
Zustand: aktuell
- name: Starten Sie den Apache2-Dienst
Service:
Name: Apache2
Zustand: gestartet
aktiviert: Richtig

Hier habe ich eine neue Aufgabe hinzugefügt, Starten Sie den Apache2-Dienst .

Name: Apache2 – der Dienst, an dem ich arbeite, ist Apache2 .

Zustand: gestartet – Der Dienst muss laufen.

aktiviert: Richtig – Der Dienst muss zum Systemstart hinzugefügt werden.

Die Zustand Parameter akzeptiert andere Werte.

- nachgeladen – Der Dienst muss die Konfigurationsdateien neu laden.
- neu gestartet – Der Dienst muss neu gestartet werden.
- gestartet – Der Dienst muss ausgeführt werden. Wenn der Dienst nicht ausgeführt wird, starten Sie den Dienst.
- gestoppt – Der Dienst muss beendet werden. Wenn der Dienst ausgeführt wird, stoppen Sie den Dienst.

Führen Sie das Playbook aus apt2.yaml wie folgt:

$Ansible-Playbook-Playbooks/apt2.yaml

Wie Sie sehen, wurde das Playbook erfolgreich ausgeführt.

Wie Sie sehen können, ist die Apache2 Dienst läuft auf meinen Debian 10-Hosts.

Arbeiten mit dem Ansible Copy-Modul

Der Ansible Kopieren Das Modul wird hauptsächlich verwendet, um Dateien von Ihrem Computer auf entfernte Hosts zu kopieren.

Im vorherigen Abschnitt habe ich den Apache 2-Webserver auf meinen Debian 10-Hosts installiert. Lassen Sie uns jetzt ein kopieren index.html Datei in das Webroot der Debian 10-Hosts.

Erstellen Sie zuerst ein neues Verzeichnis Dateien/ wie folgt:

$mkdir -vDateien

Erstellen Sie eine neue Datei index.html in dem Dateien/ Verzeichnis wie folgt:

$NanoDateien/index.html

Geben Sie die folgenden Zeilen in die ein index.html Datei:


< html >
< Kopf >
< Titel >Webserver von Ansible</ Titel >
</ Kopf >
< Karosserie >
< h1 >Willkommen bei LinuxHinweis</ h1 >
< P >Dieser Webserver wurde mit Ansible bereitgestellt.</ P >
</ Karosserie >
</ html >

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Erstellen Sie ein neues Ansible-Playbook apt3.yaml wie folgt:

$NanoSpielbücher/apt3.yaml

Geben Sie die folgenden Zeilen in die ein apt3.yaml Datei:

- Hosts: debian10
Benutzer: ansible
wahr werden
Aufgaben:
- Name: Apache2 installieren
geeignet:
Name: Apache2
Zustand: aktuell
- Name: Index.html auf den Server kopieren
Kopieren:
src: ../Dateien/index.html
Ziel:/wo/www/html/index.html
Modus: 0644
Inhaber: www-data
Gruppe: www-daten
- name: Starten Sie den Apache2-Dienst
Service:
Name: Apache2
Zustand: gestartet
aktiviert: Richtig

Hier die Aufgabe Kopieren Sie index.html auf den Server kopiert die index.html von dem Dateien/ Verzeichnis zum /var/www/html/ Verzeichnis der Debian 10-Hosts.

src: ../files/index.html – Der Quelldateipfad.
Ziel: /var/www/html/index.html – Der Zieldateipfad.
Modus: 0644 – Die Berechtigungen für den Dateibenutzer (6 – Lesen und Schreiben), Gruppe (4 – Lesen) und andere (4 – Lesen).
Inhaber: www-data – Setzen Sie den Eigentümer der Datei auf www-daten .
Gruppe: www-daten – Stellen Sie die Gruppe der Datei auf www-daten .

Wenn Sie fertig sind, speichern Sie die Datei, indem Sie drücken + x gefolgt von UND und .

Führen Sie die apt3.yaml Spielbuch wie folgt:

$Ansible-Playbook-Playbooks/apt3.yaml

Wie Sie sehen, ist die Aufgabe Kopieren Sie index.html auf den Server ist erfolgreich.

Wie Sie sehen können, ist die index.html Datei wurde auf die Debian 10-Hosts kopiert.

Wie Sie sehen können, dient der Debian 10-Webserver dem index.html Seite, die ich gerade auf die Debian 10-Hosts kopiert habe.

Dies sind also die Grundlagen von Ansible. Sie können mehr über Ansible erfahren, indem Sie die offizielle Dokumentation von Ansible lesen. Vielen Dank für das Lesen dieses Artikels.