Nota
- Questa esercitazione è disponibile in un ambiente di esercitazione pratica gratuito fornito da Oracle.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
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:
- Installa Oracle Linux Automation Engine
- Creare un file di inventario
- Eseguire un comando ad hoc
- Scrivi e gestisci un playbook
Prerequisiti
-
Almeno due sistemi Oracle Linux con la seguente configurazione:
- un utente non root con autorizzazioni
sudo
- coppia di chiavi ssh per l'utente non root
- la possibilità di SSH da un host a un altro utilizzando un login SSH senza password
- un utente non root con autorizzazioni
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.
-
Aprire un terminale sul Luna Desktop.
-
Duplica il progetto
linux-virt-labs
GitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
Passare alla directory di lavoro.
cd linux-virt-labs/olam
-
Installare le raccolte richieste.
ansible-galaxy collection install -r requirements.yml
-
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
-
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 impostaansible_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.
-
Impostare una variabile uguale all'indirizzo IP del nodo di controllo.
export CONTROL="<ip_address_of_ol-control-node>"
-
Aprire un terminale e copiare la coppia di chiavi SSH nel nodo di controllo.
scp -rp ~/.ssh/id_rsa* oracle@$CONTROL:~/.ssh/
-
Impostare le autorizzazioni per la chiave privata SSH.
ssh oracle@$CONTROL "chmod 600 ~/.ssh/id_rsa"
-
Connettersi tramite SSH al sistema ol-control-node.
ssh oracle@$CONTROL
-
Installare il pacchetto Oracle Linux Automation Engine e le dipendenze.
sudo dnf install -y ansible-core
Il pacchetto
ansible-core
è disponibile nel repositoryol8_appstream
di Oracle Linux. -
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:
-
Crea una directory di progetto
mkdir ~/ol-automation
-
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
-
Immettere la modalità di inserimento
vi
digitandoi
. -
Aggiungere l'indirizzo IP pubblico del sistema ol-host fornito. Il file deve contenere solo l'indirizzo IP.
Esempio:
130.61.100.96
-
Salvare e chiudere il file. Se si utilizza
vi
, è possibile digitareESC
,:wq!
eENTER
. -
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 sezioneungrouped
si riferisce a qualsiasi host che non fa parte di un gruppo elencato. -
Modificare l'inventario e inserire l'host all'interno di un gruppo denominato
development
.vi inventory
-
Immettere la modalità di inserimento
vi
digitandoi
. -
Aggiungere il nome del gruppo tra parentesi con l'indirizzo IP riportato di seguito, come mostrato nell'esempio.
Esempio:
[development] 130.61.100.96
-
Salvare e chiudere il file. Se si utilizza
vi
, è possibile digitareESC
,:wq!
eENTER
. -
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:
-
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. -
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 variabileansible_user
. Nel file di inventario, fornire all'host un riferimento al nome host e assegnare l'indirizzo IP alla variabileansible_host
. -
Aggiungere l'utente remoto al file di inventario.
vi inventory
-
Immettere la modalità di inserimento
vi
digitandoi
. -
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 esempiool-host
per il nome host. -
Salvare e chiudere il file. Se si utilizza
vi
, è possibile farlo digitandoESC
,:wq!
eENTER
. -
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:
-
Creare un nuovo file di playbook.
vi hello.yml
-
Immettere la modalità di inserimento
vi
digitandoi
. -
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 rigahosts
che specifica gli host da gestire. Il valoreall
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. -
Salvare e chiudere il file. Se si utilizza
vi
, è possibile farlo digitandoESC
,:wq!
eENTER
. -
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. -
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.
Collegamenti correlati
- Documentazione di Oracle Linux Automation Manager
- Formazione su Oracle Linux Automation Manager
- Stazione di formazione su Oracle Linux
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.
Write a Playbook with Oracle Linux Automation Engine
F52964-04
Copyright ©2021, Oracle and/or its affiliates.