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 Webserverdbservers: Enthält zwei Datenbankserverlocal: 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:
ANSIBLE_CONFIGUmgebungsvariableansible.cfgim aktuellen Verzeichnis~/.ansible.cfg(Home-Verzeichnis des Benutzers)/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-Dateihost_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.


