So legen Sie den Standard-Inventory-Datei-Pfad in Ansible fest

AnsibleBeginner
Jetzt üben

Einführung

Ansible ist ein weit verbreitetes IT-Automatisierungstool, das die Verwaltung von Infrastruktur und Anwendungen vereinfacht. In diesem Tutorial werden wir untersuchen, wie man den Standardpfad für die Inventory-Datei (Bestandsdatei) in Ansible festlegt, um eine effiziente und konsistente Infrastrukturverwaltung zu gewährleisten. Eine Inventory-Datei in Ansible enthält eine Liste der Hosts, die Ansible verwaltet. Durch die Konfiguration eines benutzerdefinierten Speicherorts für die Inventory-Datei können Sie Ihren Automatisierungs-Workflow besser organisieren.

Das Ansible Inventory verstehen

Bevor wir einen benutzerdefinierten Pfad für die Inventory-Datei konfigurieren, wollen wir verstehen, was ein Ansible Inventory ist und wie es standardmäßig funktioniert.

Was ist ein Ansible Inventory?

Ein Ansible Inventory ist eine Datei, die Informationen über die Hosts enthält, die Ansible verwalten soll. Standardmäßig sucht Ansible nach der Inventory-Datei unter /etc/ansible/hosts. Das Inventory kann in verschiedenen Formaten vorliegen, aber das gebräuchlichste ist eine Datei im INI-Stil oder eine YAML-Datei.

Lassen Sie uns überprüfen, ob Ansible korrekt auf unserem System installiert ist:

ansible --version

Sie sollten eine Ausgabe ähnlich dieser sehen:

ansible [core 2.12.x]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/labex/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.10.x (default, Ubuntu, etc.)

Schauen wir uns nun den Standardspeicherort der Inventory-Datei an:

cat /etc/ansible/hosts

Diese Datei kann leer sein oder Beispiel-Hostkonfigurationen enthalten. Die Standard-Inventory-Datei sieht oft so aus:

## Example inventory file

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

In diesem Format:

  • [webservers] und [dbservers] sind Gruppennamen
  • Die Hostnamen oder IP-Adressen, die unter jeder Gruppe aufgeführt sind, gehören zu dieser Gruppe

Für unser Lab erstellen wir unsere eigene benutzerdefinierte Inventory-Datei an einem anderen Ort.

Erstellen einer benutzerdefinierten Inventory-Datei

Nachdem wir nun verstanden haben, was eine Inventory-Datei ist, erstellen wir unsere eigene benutzerdefinierte Inventory-Datei in unserem Projektverzeichnis.

Erstellen eines Verzeichnisses für Ansible-Dateien

Zuerst navigieren wir zu unserem Projektverzeichnis und erstellen einen dedizierten Ordner für unsere Ansible-Dateien:

cd ~/project
mkdir -p ansible/inventory

Erstellen einer benutzerdefinierten Inventory-Datei

Nun erstellen wir eine einfache Inventory-Datei in unserem neuen Verzeichnis:

cat > ansible/inventory/hosts.ini << 'EOF'
## Custom inventory file

[webservers]
web1.example.com
web2.example.com

[dbservers]
db1.example.com
db2.example.com

[local]
localhost ansible_connection=local

[all:vars]
ansible_user=ubuntu
EOF

Diese Inventory-Datei definiert drei Gruppen:

  • webservers: Enthält zwei Webserver
  • dbservers: Enthält zwei Datenbankserver
  • local: Enthält localhost mit einer speziellen Verbindungseinstellung

Überprüfen wir unsere neu erstellte Inventory-Datei:

cat ansible/inventory/hosts.ini

Sie sollten den Inhalt sehen, den wir gerade erstellt haben.

Diese Datei ist nun bereit, als unsere benutzerdefinierte Inventory-Datei verwendet zu werden. Im nächsten Schritt konfigurieren wir Ansible so, dass diese Datei standardmäßig anstelle der systemweiten Datei /etc/ansible/hosts verwendet wird.

Festlegen des Standardpfads für die Inventory-Datei

Nachdem wir unsere benutzerdefinierte Inventory-Datei erstellt haben, konfigurieren wir Ansible so, dass diese als Standard-Inventory-Datei verwendet wird. Es gibt verschiedene Möglichkeiten, dies zu tun, aber wir konzentrieren uns auf die beiden gängigsten Methoden.

Methode 1: Verwenden einer Ansible-Konfigurationsdatei

Ansible sucht in der folgenden Reihenfolge nach Konfigurationsdateien:

  1. ANSIBLE_CONFIG Umgebungsvariable
  2. ansible.cfg im aktuellen Verzeichnis
  3. ~/.ansible.cfg (Home-Verzeichnis des Benutzers)
  4. /etc/ansible/ansible.cfg (systemweit)

Erstellen wir eine ansible.cfg-Datei in unserem Projektverzeichnis:

cat > ~/project/ansible/ansible.cfg << 'EOF'
[defaults]
inventory = ~/project/ansible/inventory/hosts.ini
host_key_checking = False
EOF

In dieser Konfigurationsdatei haben wir Folgendes festgelegt:

  • inventory: Der Pfad zu unserer benutzerdefinierten Inventory-Datei
  • host_key_checking: Deaktiviert, um SSH-Host-Key-Verifizierungsaufforderungen zu verhindern

Methode 2: Verwenden einer Umgebungsvariable

Eine andere Möglichkeit, die Inventory-Datei anzugeben, ist die Verwendung der Umgebungsvariable ANSIBLE_INVENTORY. Dies ist nützlich, wenn Sie vorübergehend eine andere Inventory-Datei verwenden möchten, ohne die Konfiguration zu ändern:

export ANSIBLE_INVENTORY=~/project/ansible/inventory/hosts.ini

Bestätigen wir, dass unsere Konfiguration funktioniert, indem wir einen einfachen Ansible-Befehl ausführen:

cd ~/project/ansible
ansible --list-hosts all

Dieser Befehl sollte alle Hosts aus unserer benutzerdefinierten Inventory-Datei auflisten:

  hosts (5):
    web1.example.com
    web2.example.com
    db1.example.com
    db2.example.com
    localhost

Nun verwendet Ansible standardmäßig unsere benutzerdefinierte Inventory-Datei, wenn wir Ansible-Befehle aus dem Verzeichnis ~/project/ansible ausführen.

Überprüfen der Inventory-Konfiguration

Nachdem wir unsere benutzerdefinierte Inventory-Datei konfiguriert haben, überprüfen wir, ob Ansible sie korrekt verwendet, und erkunden einige Befehle zur Arbeit mit der Inventory.

Überprüfen der Inventory mit ansible-inventory

Der Befehl ansible-inventory ermöglicht es uns, unsere Inventory-Konfiguration anzuzeigen und zu validieren:

cd ~/project/ansible
ansible-inventory --list

Dies zeigt die Inventory im JSON-Format an:

{
  "_meta": {
    "hostvars": {
      "localhost": {
        "ansible_connection": "local"
      }
    }
  },
  "all": {
    "children": ["dbservers", "local", "ungrouped", "webservers"]
  },
  "dbservers": {
    "hosts": ["db1.example.com", "db2.example.com"]
  },
  "local": {
    "hosts": ["localhost"]
  },
  "webservers": {
    "hosts": ["web1.example.com", "web2.example.com"]
  }
}

Für ein besser lesbares Format können wir die Option --graph verwenden:

ansible-inventory --graph

Dies zeigt die Inventory in einer baumartigen Struktur an:

@all:
  |--@dbservers:
  |  |--db1.example.com
  |  |--db2.example.com
  |--@local:
  |  |--localhost
  |--@ungrouped:
  |--@webservers:
  |  |--web1.example.com
  |  |--web2.example.com

Testen der Verbindung zum lokalen Host

Führen wir einen einfachen Ping-Befehl aus, um zu überprüfen, ob wir mit dem lokalen Host kommunizieren können:

ansible local -m ping

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

localhost | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Ausführen eines einfachen Befehls auf Hosts

Wir können auch einen Befehl auf unseren Hosts mit dem Befehl ansible ausführen. Da unsere Beispiel-Hosts nicht wirklich existieren, zielen wir nur auf den lokalen Host ab:

ansible local -a "uname -a"

Dies führt den Befehl uname -a auf dem lokalen Host aus und zeigt eine Ausgabe ähnlich der folgenden an:

localhost | CHANGED | rc=0 >>
Linux ubuntu 5.15.0-1033-aws #37-Ubuntu SMP Wed Aug 16 07:38:46 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

Dies bestätigt, dass Ansible unsere benutzerdefinierte Inventory-Datei korrekt verwendet und Befehle auf den darin definierten Hosts ausführen kann.

Zusammenfassung

In diesem Tutorial haben Sie gelernt, wie Sie einen benutzerdefinierten Inventory-Datei-Pfad in Ansible einrichten und konfigurieren. Sie verstehen jetzt:

  • Was eine Ansible Inventory-Datei ist und wo sich ihr Standardort befindet
  • Wie man eine benutzerdefinierte Inventory-Datei mit Hostgruppen erstellt
  • Wie man Ansible so konfiguriert, dass es standardmäßig Ihre benutzerdefinierte Inventory-Datei verwendet, sowohl mit der Konfigurationsdateimethode als auch mit Umgebungsvariablen
  • Wie Sie Ihre Inventory-Konfiguration mit verschiedenen Ansible-Befehlen überprüfen

Diese Fähigkeiten helfen Ihnen, Ihren Ansible-Automatisierungs-Workflow effizienter zu organisieren. Durch die Anpassung des Inventory-Datei-Speicherorts können Sie Ihre Infrastruktur besser auf der Grundlage der Struktur und Anforderungen Ihres Projekts verwalten.

Bei der Arbeit an größeren Projekten sollten Sie möglicherweise dynamische Inventories erkunden oder Ansible Vault verwenden, um sensible Informationen in Ihren Inventory-Dateien zu sichern.