[ English | Deutsch | English (United Kingdom) | español | русский | Indonesia ]
Inventar erstellen¶
The script that creates the inventory is located at
inventory/dynamic_inventory.py
and installed into the ansible-runtime
virtualenv as openstack-ansible-inventory
.
In diesem Abschnitt wird erläutert, wie ansible das Inventar ausführt und wie Sie es manuell ausführen können, um sein Verhalten zu sehen.
Das Skript dynamic_inventory.py manuell ausführen¶
Beim Ausführen eines Ansible-Befehls (wie ansible
, ansible-playbook
oder openstack-ansible
) führt Ansible automatisch das dynamic_inventory.py
-Skript aus und verwendet seine Ausgabe als Inventar.
Führen Sie den folgenden Befehl aus:
# from the root folder of cloned OpenStack-Ansible repository
inventory/dynamic_inventory.py --config /etc/openstack_deploy/
Dynamic inventory script is also installed inside virtualenv as a script. So alternatively you can run following:
source /opt/ansible-runtime/bin/activate
openstack-ansible-inventory --config /etc/openstack_deploy/
Dieser Aufruf ist nützlich, wenn Änderungen am dynamischen Inventarscript getestet werden.
Eingänge¶
Das dynamic_inventory.py
nimmt das --config
Argument für die Verzeichnisholding-Konfiguration, aus der das Inventar erstellt werden soll. Wenn nicht angegeben, ist der Standard /etc/openstack_deploy/
.
Zusätzlich zu diesem Argument wird das Skelett der Basisumgebung im Verzeichnis inventory/env.d
der OpenStack-Ansible-Codebasis bereitgestellt.
Sollte ein env.d
-Verzeichnis in dem mit --config
angegebenen Verzeichnis gefunden werden, wird dessen Inhalt der Basisumgebung hinzugefügt, wobei im Konfliktfall der vorherige Inhalt überschrieben wird.
Bemerkung
In allen Versionen vor Zed war dieses Argument file
.
Die folgende Datei muss im Konfigurationsverzeichnis vorhanden sein:
openstack_user_config.yml
Darüber hinaus könnte die Konfiguration oder Umgebung auf zwei zusätzliche Unterverzeichnisse aufgeteilt werden:
conf.d
env.d
(für die Anpassung der Umgebung)
Das dynamische Inventarscript führt Folgendes aus:
Erzeugt die Namen jedes Containers, der einen Service ausführt
Erstellt Container- und IP-Adresszuordnungen
Weist den physischen Hosts Container zu
Betrachten Sie als Beispiel den folgenden Auszug aus openstack_user_config.yml
:
identity_hosts:
infra01:
ip: 10.0.0.10
infra02:
ip: 10.0.0.11
infra03:
ip: 10.0.0.12
Das identity_hosts
-Wörterbuch definiert eine Ansible-Inventory-Gruppe mit dem Namen identity_hosts
, die die drei infra-Hosts enthält. Die Konfigurationsdatei inventory/env.d/keystone.yml
definiert zusätzliche Ansible-Inventory-Gruppen für die Container, die auf den drei Hosts mit dem Präfix infra bereitgestellt werden.
Beachten Sie, dass alle Dienste, die mit is_metal: true
gekennzeichnet sind, auf dem zugewiesenen physischen Host und nicht in einem Container ausgeführt werden. Ein Beispiel für die Verwendung von is_metal: true
ist inventory/env.d/cinder.yml
im Abschnitt container_skel
.
Weitere Informationen finden Sie unter Konfigurieren des Inventars.
Ausgänge¶
Nach der Ausführung gibt das Skript eine Datei openstack_inventory.json
in das Verzeichnis aus, das mit dem Argument --config
angegeben wurde. Dies wird als Quelle der Wahrheit für wiederholte Läufe verwendet.
Warnung
Die openstack_inventory.json
Datei ist die Quelle der Wahrheit für die Umgebung. Wenn Sie dies in einer Produktionsumgebung löschen, bedeutet dies, dass der UUID-Teil der Containernamen neu generiert wird. Dies führt dazu, dass neue Container erstellt werden. Container, die unter der vorherigen Version generiert wurden, werden von Ansible nicht mehr erkannt, selbst wenn sie über SSH erreichbar sind.
Die gleiche JSON-Struktur wird auf stdout gedruckt, die von Ansible als Inventar für die Playbooks verwendet wird.
Überprüfen der Bestandskonfiguration auf Fehler¶
Wenn Sie das --check
-Flag bei der Ausführung von `` dynamic_inventory.py`` verwenden, wird der Inventarerstellungsprozess ausgeführt und nach bekannten Fehlern gesucht, aber keine Dateien auf die Festplatte geschrieben.
Wenn in den Dateien openstack_user_config.yml
oder conf.d
definierte Gruppen nicht in der Umgebung gefunden werden, wird eine Warnung ausgegeben.
Diese Überprüfung führt keine YAML-Syntaxvalidierung durch, obwohl sie fehlschlägt, wenn nicht korrigierbare Fehler auftreten.
Debug-Protokolle schreiben¶
Der Parameter --debug/-d
ermöglicht das Schreiben einer detaillierten Protokolldatei zum Debuggen des Verhaltens des Inventarscripts. Die Ausgabe wird in das aktuelle Arbeitsverzeichnis in inventory.log
geschrieben.
Die Datei inventory.log
wird angehängt, nicht überschrieben.
Wie --check
wird dieses Flag bei der Ausführung von ansible nicht aufgerufen.
Running with tox¶
In some cases you might want to generate inventory on operator local machines
after altering openstack_user_config.yml or env.d/conf.d files. Given that
you already have openstack_deploy
directory on such machine, you can create
tox.ini file in that directory with following content:
[tox]
envlist = generate_inventory
[testenv]
skip_install = True
usedevelop = True
allowlist_externals =
bash
[testenv:generate_inventory]
basepython = python3
deps = -rhttps://opendev.org/openstack/openstack-ansible/raw/branch/master/requirements.txt
install_command =
pip install -c https://releases.openstack.org/constraints/upper/master {packages} -e git+https://opendev.org/openstack/openstack-ansible@master\#egg=openstack-ansible
commands =
openstack-ansible-inventory --config {toxinidir}/openstack_deploy
Then you can run a command to generate inventory using tox:
tox -e generate_inventory
As a result you will get your openstack_user_config.json updated. You can use this method also to verify validity of the inventory.