Introduzione
Ansible è uno strumento moderno di gestione della configurazione che facilita il compito di configurare e mantenere server remoti.
Questa guida in stile cheat sheet fornisce un riferimento rapido ai comandi e alle pratiche comunemente utilizzate quando si lavora con Ansible. Per una panoramica di Ansible e come installarlo e configurarlo, si prega di consultare la nostra guida su Come Installare e Configurare Ansible su Ubuntu 20.04.
Come Utilizzare Questa Guida:
- Questa guida è in formato cheat sheet con frammenti di comando autonomi da linea di comando.
- Passa a qualsiasi sezione rilevante per il compito che stai cercando di completare.
- Quando vedi del testo
evidenziato
nei comandi di questa guida, tieni presente che questo testo dovrebbe fare riferimento agli host, ai nomi utente e agli indirizzi IP propri del tuo inventario.
Glossario di Ansible
I seguenti termini specifici di Ansible sono ampiamente utilizzati in questa guida:
- Macchina / Nodo di Controllo: un sistema dove Ansible è installato e configurato per connettersi ed eseguire comandi sui nodi.
- Nodo: un server controllato da Ansible.
- File di inventario: un file che contiene informazioni sui server controllati da Ansible, di solito situato in
/etc/ansible/hosts
. - Playbook: un file contenente una serie di attività da eseguire su un server remoto.
- Ruolo: una raccolta di playbooks e altri file pertinenti a un obiettivo come l’installazione di un server web.
- Play: una esecuzione completa di Ansible. Un play può avere diversi playbooks e ruoli, inclusi da un singolo playbook che funge da punto di ingresso.
Se desideri un esempio di questi comandi in pratica, consulta la nostra guida su Come Usare Ansible per Automatizzare la Configurazione Iniziale del Server su Ubuntu 20.04. Avrai bisogno di almeno un server remoto da utilizzare come nodo.
Test di Connessione ai Nodi
Per verificare che Ansible sia in grado di connettersi ed eseguire comandi e playbooks sui tuoi nodi, puoi utilizzare il seguente comando:
Il modulo ping
testerà se hai credenziali valide per la connessione ai nodi definiti nel tuo file di inventario, oltre a verificare se Ansible è in grado di eseguire script Python sul server remoto. Una risposta pong significa che Ansible è pronto per eseguire comandi e playbooks su quel nodo.
Connessione come utente diverso
Per impostazione predefinita, Ansible cerca di connettersi ai nodi come l’utente del sistema corrente, utilizzando la sua coppia di chiavi SSH corrispondente. Per connettersi come utente diverso, aggiungi il comando con il flag -u
e il nome dell’utente previsto:
Lo stesso è valido anche per ansible-playbook
:
Utilizzo di una chiave SSH personalizzata
Se stai utilizzando una chiave SSH personalizzata per connetterti ai server remoti, puoi fornirla al momento dell’esecuzione con l’opzione --private-key
:
Questa opzione è valida anche per ansible-playbook
:
Utilizzo dell’autenticazione basata su password
Se è necessario utilizzare autenticazione basata su password per connettersi ai nodi, è necessario aggiungere l’opzione --ask-pass
al comando di Ansible.
Questo farà sì che Ansible ti richieda la password dell’utente sul server remoto a cui stai cercando di connetterti:
Questa opzione è valida anche per ansible-playbook
:
Fornire la password di sudo
Se l’utente remoto deve fornire una password per eseguire comandi sudo
, è possibile includere l’opzione --ask-become-pass
nel comando Ansible. Questo ti chiederà di fornire la password di sudo dell’utente remoto:
Questa opzione è valida anche per ansible-playbook
:
Utilizzo di un file inventario personalizzato
Il file inventario predefinito si trova tipicamente in /etc/ansible/hosts
, ma è possibile utilizzare anche l’opzione -i
per indicare file inventario personalizzati durante l’esecuzione di comandi e playbook Ansible. Ansible supporta anche script inventario per la creazione di file inventario dinamici, quando il tuo inventario fluttua, con server che vengono creati e distrutti spesso. I file inventario personalizzati sono utili per configurare inventari per progetti che possono essere inclusi nei sistemi di controllo versione come Git:
La stessa opzione è valida anche per ansible-playbook
:
Esecuzione di Comandi Ad-Hoc
Per eseguire un comando su un nodo, utilizza l’opzione -a
seguita dal comando che desideri eseguire, tra virgolette.
Questo eseguirà uname -a
su tutti i nodi nel tuo inventario:
È anche possibile eseguire i moduli di Ansible con l’opzione -m
. Il seguente comando installerà il pacchetto vim
su server1
dal tuo inventario:
Prima di apportare modifiche ai tuoi nodi, puoi effettuare una prova a secco per prevedere come i server sarebbero influenzati dal tuo comando. Ciò può essere fatto includendo l’opzione --check
:
Esecuzione di Playbook
Per eseguire un playbook ed eseguire tutti i compiti definiti al suo interno, utilizza il comando ansible-playbook
:
Per sovrascrivere l’opzione hosts
predefinita nel playbook e limitare l’esecuzione a un certo gruppo o host, includi l’opzione -l
nel tuo comando:
Ottenere informazioni su una riproduzione
L’opzione --list-tasks
è utilizzata per elencare tutte le attività che verrebbero eseguite da una riproduzione senza apportare alcuna modifica ai server remoti:
Allo stesso modo, è possibile elencare tutti gli host che verrebbero interessati da una riproduzione, senza eseguire alcuna attività sui server remoti:
Puoi utilizzare tag per limitare l’esecuzione di una riproduzione. Per elencare tutti i tag disponibili in una riproduzione, utilizza l’opzione --list-tags
:
Controllo dell’esecuzione della raccolta di playbook
Puoi utilizzare l’opzione --start-at-task
per definire un nuovo punto di ingresso per il tuo playbook. Ansible salterà quindi tutto ciò che viene prima dell’attività specificata, eseguendo il resto della riproduzione da quel punto in poi. Questa opzione richiede un nome di attività valido come argomento:
Per eseguire solo le attività associate a tag specifici, puoi utilizzare l’opzione --tags
. Ad esempio, se desideri eseguire solo le attività contrassegnate come nginx
o mysql
, puoi usare:
Se desideri saltare tutte le attività che si trovano sotto tag specifici, utilizza --skip-tags
. Il seguente comando eseguirebbe myplaybook.yml
, saltando tutte le attività contrassegnate come mysql
:
Utilizzo di Ansible Vault per memorizzare dati sensibili
Se i tuoi playbook di Ansible gestiscono dati sensibili come password, chiavi API e credenziali, è importante mantenere tali dati al sicuro utilizzando un meccanismo di crittografia. Ansible fornisce ansible-vault
per crittografare file e variabili.
Anche se è possibile crittografare qualsiasi file di dati di Ansible così come i file binari, è più comune utilizzare ansible-vault
per crittografare file di variabili contenenti dati sensibili. Dopo aver crittografato un file con questo strumento, sarai in grado di eseguire, modificare o visualizzare i suoi contenuti solo fornendo la password rilevante definita quando hai crittografato per la prima volta il file.
Creazione di un nuovo file crittografato
Puoi creare un nuovo file di Ansible crittografato con:
Questo comando eseguirà le seguenti azioni:
- Prima, ti chiederà di inserire una nuova password. Dovrai fornire questa password ogni volta che accedi ai contenuti del file, che sia per modificarli, visualizzarli o semplicemente eseguire playbooks o comandi utilizzando quei valori.
- Successivamente, aprirà il tuo editor della riga di comando predefinito in modo che tu possa popolare il file con i contenuti desiderati.
- Infine, quando hai finito di modificare,
ansible-vault
salverà il file come dati criptati.
Crittografare un File Ansible Esistente
Per crittografare un file Ansible esistente, puoi usare la seguente sintassi:
Questo ti chiederà una password che dovrai inserire ogni volta che accedi al file credentials.yml
.
Visualizzazione dei Contenuti di un File Crittografato
Se desideri visualizzare i contenuti di un file che è stato precedentemente crittografato con ansible-vault
e non hai bisogno di modificarne i contenuti, puoi usare:
Questo ti chiederà di fornire la password che hai selezionato quando hai criptato il file per la prima volta con ansible-vault
.
Modifica di un file crittografato
Per modificare il contenuto di un file precedentemente crittografato con Ansible Vault, eseguire:
Questo ti chiederà di fornire la password scelta quando hai criptato per la prima volta il file credentials.yml
con ansible-vault
. Dopo la convalida della password, il tuo editor di riga di comando predefinito si aprirà con il contenuto non crittografato del file, consentendoti di apportare le modifiche desiderate. Quando hai finito, puoi salvare e chiudere il file come faresti normalmente e i contenuti aggiornati verranno salvati come dati crittografati.
Decrittazione di file crittografati
Se desideri ripristinare permanentemente un file precedentemente crittografato con ansible-vault
alla sua versione non crittografata, puoi farlo con questa sintassi:
Questo ti chiederà di fornire la stessa password usata quando hai criptato per la prima volta il file credentials.yml
con ansible-vault
. Dopo la convalida della password, i contenuti del file verranno salvati sul disco come dati non crittografati.
Utilizzo di password di vault multiple
Ansible supporta più password di vault raggruppate per diversi ID di vault. Questo è utile se si desidera avere password di vault dedicate per diversi ambienti, come sviluppo, test e produzione.
Per creare un nuovo file crittografato utilizzando un ID di vault personalizzato, includere l’opzione --vault-id
insieme a un etichetta e la posizione in cui ansible-vault
può trovare la password per quel vault. L’etichetta può essere qualsiasi identificatore e la posizione può essere prompt
, il che significa che il comando dovrebbe chiederti di inserire una password, o un percorso valido per un file di password.
Questo creerà un nuovo ID di vault chiamato dev che utilizza prompt
come origine della password. Combinando questo metodo con i file di variabili di gruppo, sarai in grado di avere vault ansible separati per ogni ambiente dell’applicazione:
Abbiamo utilizzato dev e prod come ID di vault per mostrare come è possibile creare vault separati per ogni ambiente, ma è possibile creare quante vault si desidera e utilizzare qualsiasi identificatore a scelta come ID di vault.
Ora, per visualizzare, modificare o decrittografare questi file, sarà necessario fornire lo stesso ID di vault e la stessa origine della password insieme al comando ansible-vault
:
Utilizzo di un file password
Se hai bisogno di automatizzare il processo di provisioning dei server con Ansible utilizzando un tool di terze parti, avrai bisogno di un modo per fornire la password del vault senza essere richiesto di inserirla manualmente. Puoi farlo utilizzando un file password con ansible-vault
.
A password file can be a plain text file or an executable script. If the file is an executable script, the output produced by this script will be used as the vault password. Otherwise, the raw contents of the file will be used as vault password.
Per utilizzare un file password con ansible-vault
, devi fornire il percorso del file password quando esegui qualunque dei comandi vault:
Ansible non fa distinzione tra contenuti criptati utilizzando prompt
o un file password come origine della password, purché la password inserita sia la stessa. In termini pratici, questo significa che è accettabile criptare un file utilizzando prompt
e poi in seguito utilizzare un file password per memorizzare la stessa password utilizzata con il metodo prompt
. Il contrario è altrettanto vero: è possibile criptare contenuti utilizzando un file password e in seguito utilizzare il metodo prompt
, fornendo la stessa password quando richiesta da Ansible.
Per una flessibilità e sicurezza estese, invece di avere la password del vault memorizzata in un file di testo normale, puoi utilizzare uno script Python per ottenere la password da altre fonti. Il repository ufficiale di Ansible contiene alcuni esempi di script vault che puoi utilizzare come riferimento quando crei uno script personalizzato che si adatta alle esigenze specifiche del tuo progetto.
Eseguire un Playbook con Dati Crittografati tramite Ansible Vault
Ogni volta che esegui un playbook che utilizza dati precedentemente crittografati tramite ansible-vault
, dovrai fornire la password del vault al comando del playbook.
Se hai utilizzato le opzioni predefinite e la sorgente della password prompt
durante la crittografia dei dati utilizzati in questo playbook, puoi utilizzare l’opzione --ask-vault-pass
per far sì che Ansible ti chieda la password:
Se hai utilizzato un file di password anziché richiedere la password, dovresti utilizzare l’opzione --vault-password-file
invece:
Se stai utilizzando dati crittografati con un ID vault, dovrai fornire lo stesso ID vault e la stessa sorgente della password che hai usato quando hai crittografato i dati per la prima volta:
Se stai utilizzando un file di password con il tuo ID vault, dovresti fornire l’etichetta seguita dal percorso completo del file di password come sorgente della password:
Se il tuo playbook utilizza più vault, dovresti fornire un parametro --vault-id
per ognuno di essi, senza un ordine particolare:
Debugging
Se incontri errori durante l’esecuzione di comandi e playbook di Ansible, è una buona idea aumentare la verbosità dell’output per ottenere più informazioni sul problema. Puoi farlo includendo l’opzione -v
al comando:
Se hai bisogno di maggiori dettagli, puoi utilizzare -vvv
e questo aumenterà la verbosità dell’output. Se non riesci a connetterti ai nodi remoti tramite Ansible, utilizza -vvvv
per ottenere informazioni di debug sulla connessione:
Conclusione
Questa guida copre alcuni dei comandi Ansible più comuni che potresti utilizzare durante il provisioning dei server, come eseguire comandi remoti sui tuoi nodi e come eseguire i playbook utilizzando una varietà di impostazioni personalizzate.
Esistono altre variazioni di comandi e flag che potresti trovare utili per il tuo flusso di lavoro di Ansible. Per ottenere una panoramica di tutte le opzioni disponibili, puoi utilizzare il comando help:
Se desideri una visione più completa di Ansible e di tutti i suoi comandi e funzionalità disponibili, consulta la documentazione ufficiale di Ansible.
Se desideri vedere un altro esempio pratico di Ansible, consulta la nostra guida su Come utilizzare Ansible per installare e configurare Docker su Ubuntu 20.04.
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ansible-cheat-sheet-guide