Hinweis:

OCI Dynamic Inventory mit Oracle Linux Automation Engine verwenden

Einführung

Oracle Linux Automation Engine, die Open-Source-Software für Provisioning und Konfigurationsmanagement, verwendet eine Bestandsdatei, um mit verwalteten Knoten oder Hosts in Ihrer Infrastruktur zu arbeiten. Diese Bestandsdatei enthält eine Liste der Server, ihrer IP-Adressen und anderer optionaler Verbindungsinformationen.

Eine statische Bestandsdatei funktioniert gut, wenn sich Ihre Infrastruktur kaum ändert.

Bei der Nutzung der Cloud ist Ihre Infrastruktur jedoch wahrscheinlich ständig im Fluss. Daher wäre es großartig, eine Möglichkeit zu haben, Ihr Inventar dynamisch zu aktualisieren, wenn Hosts kommen und gehen.

Ziele

In diesem Tutorial lernen Sie Folgendes:

Voraussetzungen

Oracle Linux Automation Engine bereitstellen

Hinweis: Wenn Sie in Ihrem eigenen Mandanten ausgeführt werden, lesen Sie das Projekt linux-virt-labs GitHub README.md, und schließen Sie die Voraussetzungen ab, bevor Sie die Übungsumgebung bereitstellen.

  1. Öffnen Sie ein Terminal auf dem Luna Desktop.

  2. Klonen Sie das Projekt linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Wechseln Sie in das Arbeitsverzeichnis.

    cd linux-virt-labs/olam
    
  4. Installieren Sie die erforderlichen Collections.

    ansible-galaxy collection install -r requirements.yml
    
  5. Aktualisieren Sie die Oracle Linux-Instanzkonfiguration.

    cat << EOF | tee instances.yml > /dev/null
    compute_instances:
      1:
        instance_name: "ol-control-node"
        type: "control"
      2:
        instance_name: "ol-host"
        type: "remote"
    EOF
    
  6. Stellen Sie die Übungsumgebung bereit.

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e "@instances.yml"
    

    Die kostenlose Übungsumgebung erfordert die zusätzliche Variable local_python_interpreter, die ansible_python_interpreter für Wiedergaben festlegt, die auf localhost ausgeführt werden. Diese Variable ist erforderlich, da die Umgebung das RPM-Package für das Oracle Cloud Infrastructure-SDK für Python installiert, das sich unter den python3.6-Modulen befindet.

    Die Standard-Deployment-Ausprägung verwendet die AMD-CPU und Oracle Linux 8. Um eine Intel-CPU oder Oracle Linux 9 zu verwenden, fügen Sie dem Deployment-Befehl -e instance_shape="VM.Standard3.Flex" oder -e os_version="9" hinzu.

    Wichtig: Warten Sie, bis die Arbeitsmappe erfolgreich ausgeführt wurde, und erreichen Sie die Aufgabe "Unterbrechen". In dieser Phase des Spiels ist die Installation von Oracle Linux abgeschlossen, und die Instanzen sind bereit. Beachten Sie die vorherige Wiedergabe, in der die öffentlichen und privaten IP-Adressen der bereitgestellten Knoten sowie alle anderen Deployment-Informationen gedruckt werden, die während der Ausführung der Übung benötigt werden.

Oracle Linux Automation Engine-Kontrollknoten installieren

Der Kontrollknoten ist das System, von dem aus die Oracle Linux Automation Engine-Playbooks ausgeführt werden. Bevor Sie Playbooks ausführen, müssen Sie die Oracle Linux Automation Engine-Packages installieren.

  1. Öffnen Sie ein neues Terminal und verbinden Sie sich über SSH mit dem ol-control-node-System.

    ssh oracle@<ip_address_of_instance>
    
  2. Installieren Sie das Oracle Linux Automation Engine-Package und die Abhängigkeiten.

    sudo dnf install -y ansible-core
    

    Das Package ansible-core ist im Repository ol8_appstream verfügbar.

  3. Testen Sie die Packageinstallation.

    ansible --version
    

    Prüfen Sie die Ausgabe, und suchen Sie nach der Standardversion von Python Oracle Linux Automation Manager. In dieser Umgebung müssen wir das Oracle Cloud Infrastructure-(OCI-)SDK für Python installieren.

    Hinweis: Wenn in der Ausgabe FEHLER: Für Ansible muss die Gebietsschemacodierung UTF-8 sein; Keine erkannt. angezeigt wird, weist dies auf eine falsche Gebietsschemaeinstellung für ansible hin. Beheben Sie das Problem, indem Sie die folgenden beiden Umgebungsvariablen festlegen:

    export LC_ALL="en_US.UTF-8"
    export LC_CTYPE="en_US.UTF-8"
    

Oracle Cloud Infrastructure-SDK für Python einrichten

Das OCI Dynamic Inventory-Plug-in erfordert eine funktionierende OCI-SDK für Python-Konfiguration auf dem Kontrollknoten. Das OCI-SDK kann mit Oracle Linux RPM oder PIP, dem Packageinstallationsprogramm für Python, installiert werden.

  1. Installieren Sie das OCI-SDK für Python mit PIP.

    1. Installieren Sie die Packages und Abhängigkeiten für PIP.

      sudo dnf install -y python3.12-pip python3.12-setuptools
      
    2. Python-Packages installieren

      /usr/bin/python3.12 -m pip install oci
      

      Fügen Sie die Option --proxy hinzu, wenn Sie sich hinter einem Proxy befinden. Details finden Sie in der Hilfe, indem Sie den Befehl python3.12 -m pip help install ausführen.

  2. Testen Sie die OCI-SDK für Python-Installation, indem Sie die zugehörige Version drucken.

    python3.12 -c "import oci;print(oci.__version__)"
    
  3. Erstellen Sie das Standardkonfigurationsverzeichnis für das OCI-SDK.

    mkdir -p ~/.oci
    
  4. SDK-Standardkonfigurationsdatei erstellen

    Das kostenlose Lab bietet eine vorab generierte SDK-Konfiguration, die wir mit scp in das System ol-control-node kopieren können.

    1. Öffnen Sie ein neues Terminal aus der Desktopumgebung.

    2. Kopieren Sie alle SDK-Konfigurationsdateien in das System ol-control-node.

      scp ~/.oci/* oracle@<ip_address_of_instance>:~/.oci/.
      
      exit
      

    Wenn Sie dieses Tutorial außerhalb der kostenlosen Übungsumgebung befolgen, lesen Sie die Anweisungen in den Abschnitten SDK- und CLI-Konfigurationsdatei und Erforderliche Schlüssel und OCIDs der OCI-Dokumentation, um Ihre OCI-Konfigurationsdatei zu generieren.

  5. Wechseln Sie zum Terminalfenster, das mit dem ol-control-node-System verbunden ist.

  6. Aktualisieren Sie den Speicherort von key_file in der SDK-Konfigurationsdatei.

    Wenn Sie die SDK-Konfigurationsdatei aus der Desktopumgebung kopieren, müssen Sie den Home-Verzeichnisteil des Benutzers in key_file ändern.

    sed -i 's/luna.user/oracle/g' ~/.oci/config
    
  7. Erstellen Sie ein Python-Testskript, um zu prüfen, ob das SDK funktioniert.

    cat << EOF | tee test.py > /dev/null
    import oci
    object_storage_client = oci.object_storage.ObjectStorageClient(oci.config.from_file())
    result = object_storage_client.get_namespace()
    print("Current object storage namespace: {}".format(result.data))
    EOF
    

    Das Skript test.py zeigt den Object Storage-Namespace für den konfigurierten OCI-Mandanten und das konfigurierte Compartment an.

  8. Führen Sie das Skript aus

    python3.12 test.py
    

    Das Testskript druckt erfolgreich den eindeutigen Namespace des konfigurierten Mandanten.

Oracle Cloud Infrastructure-Ansible-Sammlung installieren

Die OCI Ansible Collection enthält eine Reihe von Modulen zur Automatisierung der Bereitstellung und Konfiguration der Cloud-Infrastruktur, der Orchestrierung komplexer betrieblicher Prozesse sowie der Bereitstellung und Aktualisierung Ihrer Softwareassets.

  1. Erstellen Sie ein Projektverzeichnis.

    mkdir ~/myproject
    
  2. Erstellen Sie eine Anforderungsdatei.

    cat << EOF | tee ~/myproject/requirements.yml > /dev/null
    ---
    collections:
      - name: oracle.oci
    EOF
    
  3. Installieren Sie die OCI-Ansible-Sammlung.

    ansible-galaxy collection install -r ~/myproject/requirements.yml
    

    Wenn Sie eine vorherige Version installiert haben, rufen Sie das neueste Release ab, indem Sie den Befehl mit der Option --force ausführen.

    ansible-galaxy collection install --force oracle.oci
    

Mit OCI Dynamic Inventory arbeiten

Oracle schließt sein dynamisches Bestands-Plug-in in die OCI-Ansible-Sammlung ein.

  1. Konfigurieren Sie das Bestands-Plug-in, indem Sie eine YAML-Konfigurationsquelle erstellen.

    Der Quelldateiname muss <filename>.oci.yml oder <filename>.oci.yaml lauten. Dabei ist <filename> eine benutzerdefinierte hilfreiche ID.

    cat << EOF | tee ~/myproject/myproject.oci.yml > /dev/null
    ---
    plugin: oracle.oci.oci
    
    # Optional fields to specify oci connection config:
    config_file: ~/.oci/config
    config_profile: DEFAULT
    EOF
    
  2. Testen Sie das Bestands-Plug-in, indem Sie ein Bestandsdiagramm erstellen.

    ansible-inventory -i ~/myproject/myproject.oci.yml --graph
    

    Die Ausgabe zeigt eine Reihe von Warnungen und Fehlern. Was ist also schief gelaufen?

    Der Fehler tritt auf, weil das Plug-in die Compartment-OCID kennen muss. Wenn Sie die Mandanten-OCID anstelle der Compartment-OCID angeben und über die richtigen Berechtigungen verfügen, generiert das Plug-in einen Bestand für den gesamten Mandanten.

    Da das Plug-in die Compartment-OCID-Informationen nicht direkt aus der SDK-Konfigurationsdatei lesen kann, fügen Sie sie der Plug-in-Konfigurationsquelldatei hinzu.

  3. Greifen Sie auf die Compartment-OCID aus der SDK-Konfigurationsdatei zu, und weisen Sie sie der Variablen comp_ocid zu.

    comp_ocid=$(grep -i compartment ~/.oci/config | sed -e 's/compartment-id=//g')
    
  4. Hängen Sie einen Compartment-Parameter an die Plug-in-Quelldatei an.

    cat << EOF | tee -a ~/myproject/myproject.oci.yml > /dev/null
    
    compartments:
      - compartment_ocid: "$comp_ocid"
        fetch_compute_hosts: true
    EOF
    

    Wenn fetch_compute_hosts auf true gesetzt ist, werden im Bestand nur Informationen zu Compute-Hosts erfasst und andere Instanztypen ignoriert, die im Compartment bereitgestellt sind.

  5. Führen Sie den Test erneut aus.

    ansible-inventory -i ~/myproject/myproject.oci.yml --graph
    

    In unserem Beispiel werden die im Compartment verfügbaren Compute-Instanzen als Liste der Bestandsgruppen angezeigt, die mit dem Zeichen @ gekennzeichnet sind, und die öffentliche IP-Adresse der Instanz wird angezeigt.

    Was wäre, wenn wir die private IP-Adresse wünschen?

    Je nach physischem Speicherort des Controllerknotens oder der konfigurierten Netzwerktopologie innerhalb der Cloud-Infrastruktur ist ein Zugriff auf die private IP-Adresse erforderlich. Ein weiterer Grund für das Abrufen der privaten IP-Adresse ist, dass die angeforderten Compute-Instanzen nur über eine private IP-Adresse verfügen.

  6. Ändern Sie den Parameter für das Format des Plug-in-Hostnamens, indem Sie die Quelldatei der Plug-in-Konfiguration aktualisieren.

    cat << EOF | tee -a ~/myproject/myproject.oci.yml > /dev/null
    
    hostname_format_preferences:
      - "private_ip"
      - "public_ip"
    EOF
    

    Das obige Beispielformat priorisiert die private IP-Adresse eines Systems gegenüber der öffentlichen IP-Adresse. Weitere Informationen zu dieser Konfiguration finden Sie in der Dokumentation unter Hostnamensformatvoreinstellungen.

  7. Testen Sie das Plug-in erneut.

    ansible-inventory -i ~/myproject/myproject.oci.yml --graph
    

    In der Ausgabe wird jetzt die private IP-Adresse angezeigt.

Playbook ausführen

Mit dem dynamischen Inventar Setup und konfiguriert, können wir es verwenden, um ein einfaches Spielbuch auszuführen. Stellen Sie sicher, dass Sie den SSH-Zugriff zwischen den Kontrollknoten und allen Remotes aktivieren. Wir haben dies beim ersten Deployment der Instanzen mit passwortlosen SSH-Anmeldungen konfiguriert.

  1. Erstellen Sie ein Spielbuch, das den Host anpingt.

    cat << EOF | tee ~/myproject/ping.yml > /dev/null
    ---
    - hosts: all,!$(hostname -i)
      tasks:
      - name: Ansible ping test
        ansible.builtin.ping:
    EOF
    

    Oracle Linux Automation Engine erwartet nach dem Eintrag - hosts: eine durch Komma getrennte Liste der Hosts oder Gruppen, und ! gibt an, dass diese Einträge ausgeschlossen werden sollen. Der Eintrag all pingt jeden im Bestand angezeigten Host als @all innerhalb der Gruppe der obersten Ebene. Sie können diese Arbeitsmappe ändern, um eine andere Gruppe als die Diagrammausgabe zu verwenden, indem Sie das Zeichen @ aus dem Namen entfernen und diesen Namen in den Eintrag - hosts: eingeben.

  2. Führen Sie das Spielbuch aus.

    ansible-playbook -u opc -i ~/myproject/myproject.oci.yml ~/myproject/ping.yml
    

    Akzeptieren Sie den ECDSA-Schlüssel-Fingerprint, wenn Sie dazu aufgefordert werden.

    Mit der Option -i wird die verwendete dynamische Bestandsdatei festgelegt.

    Mit der Option -u wird der Remote-SSH-Benutzer beim Verbindungsversuch festgelegt.

Nächste Schritte

Wenn Sie die Wiedergabe mit dem Status OK abschließen, wird bestätigt, dass Oracle Linux Automation Engine das dynamische OCI-Bestandsverzeichnis erfolgreich verwendet, um mit der Remoteinstanz zu kommunizieren, die im Compartment erkannt wird. Lernen Sie weiter, und verwenden Sie dieses Feature, um Ihre Flotte von OCI-Instanzen zu verwalten und routinemäßige Administrationsaufgaben für Oracle Linux auszuführen.

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie im Oracle Learning YouTube-Channel auf weitere kostenlose Lerninhalte zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Die Produktdokumentation finden Sie im Oracle Help Center.