Hinweis:

OCI Dynamic Inventory mit Oracle Linux Automation Engine verwenden

Einführung

Oracle Linux Automation Engine, eine Open-Source-Software für das Provisioning und die Konfigurationsverwaltung, verwendet eine Bestandsdatei für verwaltete Knoten oder Hosts in Ihrer Infrastruktur. Diese Bestandsdatei enthält eine Liste von Servern, deren IP-Adressen und andere optionale Verbindungsinformationen.

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

Ihre Infrastruktur ist jedoch wahrscheinlich in ständigem Fluss, wenn Sie die Cloud verwenden. Daher wäre es von Vorteil, Ihr Inventar dynamisch zu aktualisieren, wenn Hosts hinzugefügt und entfernt werden.

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"
    olam_type: none
    EOF
    
  6. Bestandsdatei erstellen

    cat << EOF | tee hosts > /dev/null
    localhost ansible_connection=local ansible_connection=local ansible_python_interpreter=/usr/bin/python3.6
    EOF
    
  7. Stellen Sie die Übungsumgebung bereit.

    ansible-playbook create_instance.yml -i hosts -e "@instances.yml"
    

    Für die kostenlose Übungsumgebung ist die zusätzliche Variable ansible_python_interpreter für localhost erforderlich, da sie das RPM-Package für das Oracle Cloud Infrastructure-SDK für Python installiert. Der Speicherort für die Installation dieses Packages befindet sich basierend auf Ihrer Oracle Linux-Version unter den Python-Standardmodulen des Systems. Wenn Sie eine Bestandsvariable verwenden, wird verhindert, dass sich dies auf andere Hosts als localhost auswirkt.

    Die Standard-Deployment-Ausprägung verwendet die AMD-CPU. Sie können die Ausprägung der Instanzen ändern, indem Sie eine neue Definition der Ausprägungsvariablen in der Befehlszeile übergeben.

    Beispiel: -e instance_shape="VM.Standard3.Flex"

    Ebenso verwendet die Standardversion des Oracle Linux-Images die Variable os_version, die in der Datei "default_vars.yml" definiert ist. Sie können diesen Wert ändern, indem Sie die Oracle Linux-Hauptversion in der Befehlszeile übergeben.

    Beispiel: -e os_version="9"

    Wichtig: Warten Sie, bis das Playbook erfolgreich ausgeführt wird, und erreichen Sie die Unterbrechungsaufgabe. In dieser Phase des Playbooks ist die Installation von Oracle Linux abgeschlossen, und die Instanzen sind bereit. Beachten Sie die vorherige Wiedergabe, bei der die öffentlichen und privaten IP-Adressen der bereitgestellten Knoten ausgegeben werden.

Oracle Linux Automation Engine-Kontrollknoten einrichten

Der Kontrollknoten ist das System zum Ausführen der Oracle Linux Automation Engine-Playbooks. Für die Ausführung von Playbooks muss das Oracle Linux Automation Engine-Package installiert werden.

  1. Legen Sie eine Variable fest, die der IP-Adresse des Kontrollknotens entspricht.

    export CONTROL="<ip_address_of_ol-control-node>"
    
  2. Öffnen Sie ein Terminal, und kopieren Sie das SSH-Schlüsselpaar in den Kontrollknoten.

    scp -rp ~/.ssh/id_rsa* oracle@$CONTROL:~/.ssh/
    
  3. Legen Sie die Berechtigungen für den SSH-Private Key fest.

    ssh oracle@$CONTROL "chmod 600 ~/.ssh/id_rsa"
    
  4. Stellen Sie über SSH eine Verbindung zum ol-control-node-System her.

    ssh oracle@$CONTROL
    
  5. 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 AppStream verfügbar.

  6. 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 installieren

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.

      Oracle Linux 8:

      sudo dnf install -y python3.12-pip python3.12-setuptools
      

      Oracle Linux 9:

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

      Oracle Linux 8:

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

      Oracle Linux 9:

      /usr/bin/python3.9 -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.

    Oracle Linux 8:

    python3.12 -c "import oci;print(oci.__version__)"
    

    Oracle Linux 9:

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

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

    In der kostenlosen Übung wird eine vorab generierte SDK-Konfiguration bereitgestellt, die wir mit scp in das ol-control-node-System 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 das Home-Verzeichnis des Benutzers von key_file ändern, um sicherzustellen, dass es mit dem Benutzernamen des Kontrollsystems übereinstimmt.

    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

    Oracle Linux 8:

    python3.12 test.py
    

    Oracle Linux 9:

    python3.9 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, die das Provisioning und die Konfiguration der Cloud-Infrastruktur automatisieren, komplexe betriebliche Prozesse orchestrieren sowie Softwareassets bereitstellen und aktualisieren.

  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 Sie fetch_compute_hosts auf true setzen, werden Informationen zur Bestandserfassung nur auf Compute-Hosts erfasst, und andere Instanztypen, die im Compartment bereitgestellt sind, werden ignoriert.

  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 unter Hostname-Formatvoreinstellungen in der Dokumentation.

  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 der Konfiguration können wir damit ein einfaches Playbook ausführen. Stellen Sie sicher, dass Sie SSH-Zugriff zwischen den Kontrollknoten und allen Remoteknoten aktivieren.

  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.