GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ansible Inventar- und Konfigurationsdateien

Vor ein paar Tagen haben wir besprochen, wie man mit Vagrant ein Ansible-Lab mit drei Knoten einrichtet unter Linux. In diesem Artikel lernen wir grundlegende Ansible-Konzepte wie Ansible-Inventar und Konfigurationsdateien im Detail kennen.

Grundstruktur von Ansible

Wenn Sie anfangen, mit Ansible zu arbeiten, gibt es zwei wichtige Dateien, die Sie verstehen sollten. Eine davon ist Ansible Inventory Datei und die zweite ist die Ansible-Konfiguration Datei.

Die Konfiguration enthält alle Konfigurationen, die Ansible während der Laufzeit verwendet. Wenn Sie Ansible mit dem Paketmanager des Betriebssystems installieren, können Sie sehen, dass es eine Standardkonfigurationsdatei mit dem Namen "ansible.cfg" gibt " erstellt in /etc/ansible Verzeichnis.

Die Inventardatei enthält die IP-Adresse oder DNS-Informationen über die Liste der verwalteten Hosts, mit denen wir arbeiten möchten. Ansible liest die Hostnamen aus der Inventardatei und die Aufgaben/Spiele werden auf diesen Knoten ausgeführt. Inventardateien können in ini erstellt werden , yaml und json Formate.

Unten ist die Struktur meines Projekts. Ich habe eine ansible.cfg Konfigurationsdatei, eine hosts-Datei und ein Playbook, das in yaml geschrieben ist formatieren.

Wenn ich das Playbook auslöse, liest Ansible die Konfiguration aus ansible.cfg Datei und die Host-Details aus der Hosts-Datei, um die Stücke auszuführen.

[email protected]:~/ansible_project$ tree .
.
├── ansible.cfg
├── hosts
└── playbook.yml

0 directories, 3 files

Lassen Sie uns im Detail über diese beiden Dateien sprechen und wir werden schließlich einige Ad-hoc-Befehle ausführen.

Ansible-Konfigurationsdatei

Ansible verwendet die Konfigurationsdatei, um die Parameter zu laden, die zum Ausführen der Ansible-Aufgabe erforderlich sind. Wenn Sie Ansible mit dem Paketmanager installiert haben , haben Sie eine ansible.cfg Datei in /etc/ansible Verzeichnis.

Unten ist das Beispiel der ansible.cfg Datei.

Ansible sucht in der folgenden Reihenfolge nach der Konfigurationsdatei.

  • ANSIBLE_CONFIG - Umgebungsvariable
  • ansible.cfg - Aktuelles Verzeichnis, von dem aus Sie den Befehl ausführen
  • .ansible.cfg - Benutzer-Home-Verzeichnis
  • /etc/ansible/ansible.cfg - In /etc/ansible Verzeichnis

Führen Sie ansible --version aus Befehl, um zu sehen, welche Konfigurationsdatei Ansible auswählt.

$ ansible --version
ansible [core 2.12.3]
  config file = /home/vagrant/ansible_project/ansible.cfg
  configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
  ansible collection location = /home/vagrant/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.8.10 (default, Nov 26 2021, 20:14:08) [GCC 9.3.0]
  jinja version = 2.10.1
  libyaml = True

Ich habe ein benutzerdefiniertes Projektverzeichnis erstellt und eine ansible.cfg erstellt Datei. Meine Konfigurationsdatei enthält nur zwei Eigenschaften, den Inventarspeicherort und die deaktivierte Überprüfung des Hostschlüssels.

[defaults]
inventory = /home/karthick/ansible_project/hosts
host_key_checking = False

Es gibt unzählige andere Eigenschaften, aber im Moment können Sie damit beginnen, sie zu verwenden, indem Sie nur die "Inventar"-Eigenschaft hinzufügen.

Ansible-Inventardatei

In der Inventardatei geben wir die IP-Adresse oder DNS von Servernamen, Netzwerkgeräten, Cloud-Diensten oder allem, womit Ansible arbeiten kann, an.

Inventare können in ini geschrieben werden , json und yaml Format und Sie haben auch Skripte, um ein Inventarformat in andere Formate zu konvertieren.

Standardmäßig finden Sie eine Inventardatei (Hosts) in /etc/ansible Verzeichnis, wenn Sie Ansible mit dem OS-Paketmanager installiert haben. Es wird immer empfohlen, ein separates Projektverzeichnis anzulegen und eine Inventar- und Konfigurationsdatei anzulegen.

Die folgende Tabelle zeigt, wie mein Ansible-Labor eingerichtet ist. Ich werde die Inventardatei für dieses Lab-Setup erstellen und das Ping-Modul ausführen, um zu demonstrieren, wie die Dinge in der Inventardatei funktionieren.

KNOTENTYP KNOTENNAME IP-ADRESSE OS-GESCHMACK
Kontrollknoten controller.anslab.com 192.168.10.3 ubuntu/focal64
Verwalteter Knoten managed1.anslab.com 192.168.10.4 ubuntu/focal64
Verwalteter Knoten managed2.anslab.com 192.168.10.5 ubuntu/focal64

Inventardatei ohne explizite Gruppierung

Die Inventardatei hat ein Konzept namens Gruppierung, bei dem Sie Ihre Ressourcen gruppieren und Aufgaben für diese Gruppe ausführen. Es hat die folgende Struktur.

[group-name]
Resource1
Resource2
....
Resource N

Sie können die Inventardatei erstellen, ohne Gruppen zu verwenden. In diesem Fall verwendet Ansible zwei Standardgruppen "all" und "nicht gruppiert" .

  • ALLE GRUPPE - Alle Ressourcen, die standardmäßig in der Inventardatei verfügbar sind, werden der Gruppe alle zugewiesen .
  • GRUPPE AUFHEBEN - Ressourcen, die keiner benutzerdefinierten Gruppe angehören, werden automatisch der ungruppierten Gruppe zugewiesen .

Ich habe eine Inventardatei ohne Gruppen erstellt. Jetzt werden diese beiden Knoten sowohl unter alle Gruppen als auch unter die nicht gruppierte Gruppe fallen.

$ cat hosts
managed1.anslab.com
managed2.anslab.com

Sie können den folgenden ansible-Befehl ausführen, um die Liste der Hosts unter allen und der nicht gruppierten Gruppe zu überprüfen.

$ ansible all --list-hosts
  hosts (2):
    managed1.anslab.com
    managed2.anslab.com
$ ansible ungrouped --list-hosts
  hosts (2):
    managed1.anslab.com
    managed2.anslab.com

Inventardatei mit Gruppierung

Wie bereits erwähnt, ist die Gruppierung eine großartige Möglichkeit, Ihre Ressourcen zu organisieren, damit Sie die Aufgabe einfach für die jeweilige Gruppe ausführen können. Ich habe zwei verwaltete Knoten und sie führen Ubuntu 20.04LTS aus.

Angenommen, ich möchte meine Inventardatei basierend auf dem Betriebssystemtyp gruppieren, dann sieht die Inventardatei wie folgt aus. Hier ubuntu ist der Gruppenname.

[ubuntu]
managed1.anslab.com
managed2.anslab.com

Aufgaben können gegen diese Gruppe ausgeführt werden.

$ ansible ubuntu -m ping -o
managed1.anslab.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
managed2.anslab.com | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}

Wenn ich jetzt nach der "nicht gruppierten" Gruppe suche, wird kein Host dort sein.

$ ansible ungrouped --list-hosts
[WARNING]: No hosts matched, nothing to do
hosts (0):

Sie können beliebig viele Gruppen in der Inventardatei erstellen und dieselben Ressourcennamen verwenden.

[ubuntu]
managed1.anslab.com
managed2.anslab.com

[dev]
managed1.anslab.com

[test]
managed2.anslab.com
$ ansible ubuntu -m ping -o
$ ansible dev -m ping -o
$ ansible test -m ping -o

Inventardatei mit Bereichen

Wenn Sie ein gemeinsames Benennungsmuster für Ihre Ressourcen haben, können Sie Bereiche verwenden. Schauen Sie sich das folgende Beispiel an, in dem ich statt der Wiederholung des DNS den Bereich verwendet habe, um ihn zu verkürzen.

[ubuntu]
managed[1:2].anslab.com

Inventardatei mit untergeordneten Gruppen

Sie können eine Gruppe erstellen und andere Gruppennamen darunter verwenden. Schauen Sie sich das folgende Beispiel an, ich habe die Ubuntu-Gruppe, die meine Servernamen hat. Ich habe eine andere Gruppe namens Server erstellt, die die Ubuntu-Gruppe enthält.

Es ist wichtig, dass Sie :children hinzufügen an den Gruppennamen andernfalls behandelt die Servergruppe "ubuntu " als Servername anstelle des Gruppennamens.

[ubuntu]
managed[1:2].anslab.com

[server:children]
ubuntu

Inventardatei mit Host-Variablen und Gruppen-Variablen

Die Inventardatei unterstützt Host- und Gruppenvariablen. Host-Variablen sind nichts anderes als Variablen und ihre Werte, die in der Inventardatei an den Host übergeben werden. In der folgenden Konfiguration sage ich ansible, dass es ostechnix verwenden soll als mein Benutzer und verwenden Sie anstelle des Standard-SSH-Ports Port 2222 .

[ubuntu]
managed1.anslab.com ansible_user=ostechnix ansible_port=2222
managed2.anslab.com ansible_user=ostechnix ansible_port=2222

Gruppen-Variablen sind dieselben wie Host-Variablen, aber die Variablen werden auf die gesamte Gruppe anstatt auf einen einzelnen Host angewendet. Sie können aus der obigen Konfiguration ersehen, dass ansible_user und ansible_port für beide Knoten gleich sind. Sie können also eine Gruppenvariable erstellen, in der die Variablen von allen Knoten in der Gruppe geerbt werden. Sie müssen :vars hinzufügen um die Gruppe als Gruppenvariable zu erstellen.

[ubuntu]
managed1.anslab.com
managed2.anslab.com

[ubuntu:vars]
ansible_user=ostechnix
ansible_port=2222

Vorsicht: Wenn Sie sowohl eine Gruppenvariable als auch eine Hostvariable für denselben Knoten haben, hat die Hostvariable hohe Priorität.

Es gibt viele Inventarparameter, die Sie verwenden können, und Sie können die Liste aus dem offiziellen Dokument abrufen .

Inventardatei mit Alias

Sie können einen Alias ​​für die Ressource wie unten erstellen. Hier sind m1 und m2 Aliase.

[ubuntu]
m1 ansible_host=managed1.anslab.com
m2 ansible_host=managed2.anslab.com

Jetzt kann dieser Alias ​​verwendet werden, um einige Aufgaben auszuführen.

$ ansible m1 -m ping -o
m1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}
$ ansible m2 -m ping -o
m2 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python3"},"changed": false,"ping": "pong"}

Inventardatei im YAML-Format

Inventardateien können auch im YAML-Format geschrieben werden. Alles, was wir in den vorherigen Abschnitten besprochen haben, ist im YAML-Format geschrieben.

Das folgende Bild zeigt zwei Knoten mit einigen Host-Variablen.

Das folgende Bild zeigt zwei Knoten mit Gruppenvariablen.

Ansible Inventory-Befehl

Ansible hat einen Inventory-Befehl, der sehr hilfreich sein wird, um die Informationen der Inventory-Dateien anzuzeigen.

Um die Liste der unterstützten Optionen zu erhalten, führen Sie den Befehl help aus.

$ ansible-inventory --help

Um die Bestandsdetails im Diagrammformat abzurufen, verwenden Sie --graph Flagge. Wenn Sie unterschiedliche Inventardateien haben, können Sie -i verwenden Flag, um explizit auf die Inventardatei zu verweisen.

$ ansible-inventory --graph

Sie können die Host- und Gruppen-Variableninformationen drucken, indem Sie --vars übergeben Flag zusammen mit --graph Flagge.

$ ansible-inventory --graph --vars

Wenn Sie die --list verwenden Flag, erfolgt die Ausgabe im JSON-Format.

$ ansible-inventory -list

Sie können Informationen über einen bestimmten Knoten mit --host abrufen Flagge.

$ ansible-inventory --host managed1.anslab.com

Schlussfolgerung

In diesem Artikel haben wir ein wichtiges Konzept gesehen, das den Kern der Ansible-Architektur bildet. Wenn Sie ein Anfänger sind, konzentrieren Sie sich darauf, das Inventar im INI-Format zu erstellen, und später werden Sie mehr über Best Practices erfahren, wenn Sie mit der Arbeit an Produktionsprojekten beginnen.

Weiterlesen:

  • Ansible SSH-Authentifizierung und Rechteausweitung
  • Erste Schritte mit Ansible Ad-Hoc-Befehlen

Linux
  1. So finden Sie MySQL-, PHP- und Apache-Konfigurationsdateien

  2. Eine einfache Möglichkeit, Dateien und Verzeichnisse in Linux zu verstecken

  3. So verwalten Sie statisches und dynamisches Host-Inventar von Ansible

  4. Erstellen und entfernen Sie Auslagerungsdateien in Ubuntu

  5. Unterschied zwischen Gerätedatei und Gerätetreiber

So erstellen und führen Sie eine Ansible Playbook-Datei aus

So benennen Sie Dateien und Verzeichnisse in Linux um

So kopieren Sie Dateien und Verzeichnisse im Linux-Terminal

Stat-Befehl:Attribute von Dateien und Verzeichnissen anzeigen

Linux-tar-Befehl zum Komprimieren und Extrahieren von Dateien

Umbenennen von Dateien und Ordnern in cPanel