Nota

Scrivi un Playbook con Oracle Linux Automation Engine

Introduzione

Oracle Linux Automation Engine, un componente di Oracle Linux Automation Manager, è uno strumento di automazione per distribuire software, configurare sistemi e orchestrare attività, come aggiornamenti e aggiornamenti, sotto forma di playbook. Inizialmente utilizzando il pacchetto ansible, Oracle Linux Automation Engine ora deriva dal pacchetto software open source ansible-core.

La seguente esercitazione introduce la scrittura di playbook con Oracle Linux Automation Engine.

Obiettivi

In questo tutorial imparerai come:

Prerequisiti

Distribuisci Oracle Linux

Nota: se è in esecuzione nella propria tenancy, leggere il progetto linux-virt-labs GitHub README.md e completare i prerequisiti prima di distribuire l'ambiente di esercitazione pratica.

  1. Aprire un terminale sul Luna Desktop.

  2. Duplica il progetto linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Passare alla directory di lavoro.

    cd linux-virt-labs/olam
    
  4. Installare le raccolte richieste.

    ansible-galaxy collection install -r requirements.yml
    
  5. Aggiornare la configurazione dell'istanza Oracle Linux.

    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. Implementa l'ambiente di laboratorio.

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

    L'ambiente di laboratorio gratuito richiede la variabile aggiuntiva local_python_interpreter, che imposta ansible_python_interpreter per le riproduzioni in esecuzione su localhost. Questa variabile è necessaria perché l'ambiente installa il pacchetto RPM per l'SDK Oracle Cloud Infrastructure per Python, situato sotto i moduli python3.6.

    La forma di distribuzione predefinita utilizza la CPU AMD e Oracle Linux 8. Per utilizzare una CPU Intel o Oracle Linux 9, aggiungere -e instance_shape="VM.Standard3.Flex" o -e os_version="9" al comando di distribuzione.

    Importante: attendere la corretta esecuzione della guida e raggiungere il task di sospensione. In questa fase del playbook, l'installazione di Oracle Linux è completa e le istanze sono pronte. Prendi nota della riproduzione precedente, che stampa gli indirizzi IP pubblici e privati dei nodi che distribuisce e qualsiasi altra informazione di distribuzione necessaria durante l'esecuzione del laboratorio.

Imposta nodo controllo Oracle Linux Automation Engine

Il nodo di controllo è il sistema per l'esecuzione dei playbook Oracle Linux Automation Engine. L'esecuzione dei playbook richiede l'installazione del pacchetto Oracle Linux Automation Engine.

  1. Impostare una variabile uguale all'indirizzo IP del nodo di controllo.

    export CONTROL="<ip_address_of_ol-control-node>"
    
  2. Aprire un terminale e copiare la coppia di chiavi SSH nel nodo di controllo.

    scp -rp ~/.ssh/id_rsa* oracle@$CONTROL:~/.ssh/
    
  3. Impostare le autorizzazioni per la chiave privata SSH.

    ssh oracle@$CONTROL "chmod 600 ~/.ssh/id_rsa"
    
  4. Connettersi tramite SSH al sistema ol-control-node.

    ssh oracle@$CONTROL
    
  5. Installare il pacchetto Oracle Linux Automation Engine e le dipendenze.

    sudo dnf install -y ansible-core
    

    Il pacchetto ansible-core è disponibile nel repository ol8_appstream di Oracle Linux.

  6. Eseguire il test dell'installazione del pacchetto.

    ansible --version
    

    Nell'output verranno visualizzati la versione del comando, i dettagli di configurazione e la dipendenza della versione Python.

    Nota: se l'output mostra ERRORE: Ansible richiede che la codifica delle impostazioni nazionali sia UTF-8; nessuna rilevata. indica un'impostazione delle impostazioni nazionali errata per ansible. Risolvere il problema impostando le due variabili di ambiente riportate di seguito.

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

Creare un inventario

Il file di inventario contiene i dettagli sugli host che appartengono alla tua infrastruttura o che gestirai utilizzando Oracle Linux Automation Engine. Questi dettagli indicano come connettersi a questi host durante l'esecuzione di comandi o playbook ad hoc.

Raccolta di informazioni su indirizzo IP o nome host

Per creare un inventario per Oracle Linux Automation Engine, dovrai determinare l'indirizzo IP o il nome host risolvibile del sistema o dei sistemi che gestisci. I passi possono variare in base al tipo di sistema e alla posizione in cui viene distribuito.

Nell'ambiente di laboratorio gratuito fornito è necessario l'indirizzo IP del sistema ol-host, che viene individuato utilizzando la scheda Risorse di Luna Lab.

Crea file magazzino

Oracle Linux Automation Engine inserisce l'inventario predefinito in /etc/ansible/hosts. Consente inoltre un file di inventario a livello di progetto. Quando si utilizza un inventario a livello di progetto, è necessario fornire il percorso al file di inventario utilizzando l'opzione -i quando si eseguono comandi o playbook ad hoc.

Da un terminale sul nodo di controllo di Oracle Linux Automation Engine:

  1. Crea una directory di progetto

    mkdir ~/ol-automation
    
  2. Spostarsi nella nuova directory e aprire un nuovo file di inventario utilizzando l'editor di testo desiderato. Qui, useremo vi.

    cd ~/ol-automation
    
    vi inventory
    
  3. Immettere la modalità di inserimento vi digitando i.

  4. Aggiungere l'indirizzo IP pubblico del sistema ol-host fornito. Il file deve contenere solo l'indirizzo IP.

    Esempio:

    130.61.100.96
    
  5. Salvare e chiudere il file. Se si utilizza vi, è possibile digitare ESC, :wq! e ENTER.

  6. Convalidare il file magazzino.

    ansible-inventory -i inventory --list
    

    L'output mostra le informazioni sul magazzino.

    Output di esempio:

    {
        "_meta": {
            "hostvars": {}
        },
        "all": {
            "children": [
                "ungrouped"
            ]
        },
        "ungrouped": {
            "hosts": [
                "130.61.100.96"
            ]
        }
    }
    

    Il riferimento all si riferisce a ogni host nel file di inventario e la sezione ungrouped si riferisce a qualsiasi host che non fa parte di un gruppo elencato.

  7. Modificare l'inventario e inserire l'host all'interno di un gruppo denominato development.

    vi inventory
    
  8. Immettere la modalità di inserimento vi digitando i.

  9. Aggiungere il nome del gruppo tra parentesi con l'indirizzo IP riportato di seguito, come mostrato nell'esempio.

    Esempio:

    [development]
    130.61.100.96
    
  10. Salvare e chiudere il file. Se si utilizza vi, è possibile digitare ESC, :wq! e ENTER.

  11. Eseguire di nuovo il passo di convalida per visualizzare il gruppo aggiunto all'output.

    ansible-inventory -i inventory --list
    

    L'output mostra le informazioni aggiornate con il gruppo.

    Output di esempio:

    {
        "_meta": {
            "hostvars": {}
        },
        "all": {
            "children": [
                "development",
                "ungrouped"
            ]
        },
        "development": {
            "hosts": [
                "130.61.100.96"
            ]
        }
    }
    

Esegui comando ad hoc

Oracle Linux Automation Engine dispone di diversi moduli che non richiedono la scrittura di un playbook. Il più fondamentale di questi è il modulo ping, che tenta di effettuare una connessione SSH in base ai dettagli forniti nell'inventario.

Da un terminale sul nodo di controllo di Oracle Linux Automation Engine:

  1. Eseguire il modulo ping.

    ansible all -i inventory -m ping
    

    L'opzione all indica all'utente di eseguire il comando su tutti gli host elencati nel file di inventario specificato dall'opzione -i. Il comando accetta anche singoli nomi host o gruppi.

    L'opzione -m specifica il modulo da eseguire.

  2. Accettare l'impronta digitale del tasto ECDSA digitando yes al prompt.

    In base all'ambiente in uso, il file ping potrebbe non riuscire con il seguente output:

    Output di esempio:

    130.61.100.96 | UNREACHABLE! => {
        "changed": false,
        "msg": "Failed to connect to the host via ssh: Warning: Permanently added '130.61.100.96' (ECDSA) to the list of known hosts.\r\noracle@130.61.100.96: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).",
        "unreachable": true
    }
    

    Questo errore si verifica perché l'account utente locale oracle non esiste sull'host che si sta tentando di gestire. Correggere questo problema aggiungendo un utente remoto valido all'inventario utilizzando la variabile ansible_user. Nel file di inventario, fornire all'host un riferimento al nome host e assegnare l'indirizzo IP alla variabile ansible_host.

  3. Aggiungere l'utente remoto al file di inventario.

    vi inventory
    
  4. Immettere la modalità di inserimento vi digitando i.

  5. Aggiungere le due variabili come mostrato nell'esempio.

    Esempio:

    [development]
    ol-host ansible_host=130.61.100.96 ansible_user=opc
    

    L'ambiente di laboratorio gratuito fornisce un sistema preconfigurato per il test della gestione remota contenente un utente denominato opc. opc è l'utente predefinito creato su un'istanza Oracle Linux in Oracle Cloud Infrastructure (OCI). È possibile utilizzare un nome di esempio ol-host per il nome host.

  6. Salvare e chiudere il file. Se si utilizza vi, è possibile farlo digitando ESC, :wq! e ENTER.

  7. Eseguire di nuovo il modulo ping, utilizzando il nome host anziché all.

    ansible ol-host -i inventory -m ping
    

    Il comando viene eseguito correttamente con risultati simili a quelli mostrati.

    Output di esempio:

    ol-host | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
    }
    

Scrivi un Playbook

Un playbook è un insieme di istruzioni, scritte in una corretta sintassi YAML, eseguite contro un singolo host o un gruppo di host. Questi file hanno l'estensione predefinita .yml o .yaml.

Il nostro primo playbook indirizzerà gli host all dal file di inventario creato. Questo playbook di esempio è costituito da un'unica attività che stampa un messaggio di debug.

Da un terminale sul nodo di controllo di Oracle Linux Automation Engine:

  1. Creare un nuovo file di playbook.

    vi hello.yml
    
  2. Immettere la modalità di inserimento vi digitando i.

  3. Aggiungere il testo seguente al file del playbook.

    Esempio:

    ---
    - hosts: all
      tasks:
        - name: Print message
          debug:
            msg: Hello from Oracle Linux
    

    Una guida deve sempre iniziare con ---, seguita da una riga hosts che specifica gli host da gestire. Il valore all indica che il playbook agirà su ogni host elencato nell'inventario. In alternativa, è possibile indicare a una playbook di eseguire attività solo su una lista specifica di host o gruppi elencando ogni destinazione separata da due punti o virgole. Il task utilizza quindi il modulo di debug per stampare un messaggio.

    La linea name fa sì che Oracle Linux Automation Engine visualizzi l'output nel terminale mentre esegue il playbook.

  4. Salvare e chiudere il file. Se si utilizza vi, è possibile farlo digitando ESC, :wq! e ENTER.

  5. Eseguire il playbook hello.yml rispetto all'inventario.

    ansible-playbook -i inventory hello.yml
    

    Invece di utilizzare la variabile ansible_user nel file di inventario, è possibile passare il nome utente remoto sulla riga di comando utilizzando l'opzione -u username.

    ansible-playbook -i inventory hello.yml -u opc
    

    Se tutto funziona, il comando viene completato correttamente e viene stampato il messaggio di debug.

    Output di esempio:

    
    PLAY [all] *********************************************************************
    
    TASK [Gathering Facts] *********************************************************
    [WARNING]: Platform linux on host ol-host is using the discovered Python
    interpreter at /usr/bin/python, but future installation of another Python
    interpreter could change this. See https://docs.ansible.com/ansible/2.9/referen
    ce_appendices/interpreter_discovery.html for more information.
    ok: [ol-host]
    
    TASK [Print message] ***********************************************************
    ok: [ol-host] => {
        "msg": "Hello from Oracle Linux"
    }
    
    PLAY RECAP *********************************************************************
    ol-host                      : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    

    Poiché l'inventario definisce solo un singolo host, ol-host, la guida viene eseguita una sola volta. Prima di eseguire il task elencato nel playbook, Oracle Linux Automation Engine esegue un task predefinito che raccoglie informazioni denominate fatti. Questa attività estrae informazioni sull'host remoto, che i playbook possono successivamente utilizzare per personalizzare il comportamento delle attività attraverso i condizionali.

  6. Eseguire il seguente comando ad hoc per stampare un elenco completo di fatti per l'host.

    ansible ol-host -i inventory -m setup
    

Passi successivi

Questo messaggio e l'output dei fatti confermano che la prima guida è stata eseguita correttamente con Oracle Linux Automation Engine.

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.

Per la documentazione del prodotto, visita l'Oracle Help Center.