[ English | Deutsch | Indonesia | English (United Kingdom) | español | русский ]

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 2023.1 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.