Se hai bisogno di eseguire attività Ansible basate su diverse condizioni, allora sei fortunato. Ansible when
e altre condizioni ti permettono di valutare condizioni, come ad esempio in base al sistema operativo, o se un’attività dipende dall’attività precedente.
In questo tutorial, imparerai come lavorare con Ansible when
e altre condizioni in modo da poter eseguire attività senza creare problemi.
Iniziamo!
Prerequisiti
Questo tutorial comprende esempi pratici. Se desideri seguirlo, assicurati di avere quanto segue a disposizione:
- Un host controller Ansible – Questo tutorial utilizza Ansible v2.9.24 ospitato su una macchina Ubuntu 18.04.5 LTS.
- A remote computer to run commands.
- Avrai bisogno di un file di inventario configurato e uno o più host già configurati per eseguire comandi e playbook di Ansible. Il tutorial utilizzerà un gruppo di inventario chiamato web.
Lavorare con Ansible when
con più attività in un playbook
Avere più attività in un playbook può essere noioso se vengono tutte eseguite senza condizioni specifiche. Iniziamo questo tutorial definendo le condizioni when
nel playbook Ansible con più attività.
1. Apri un terminale sull’host controller di Ansible.
2. Esegui i comandi seguenti per creare una directory e assegnarle un nome a tua scelta nella tua directory home, e naviga in quella directory.
Per questo esempio, la directory si chiama ansible_when_condition_demo
. Questa directory conterrà il playbook che utilizzerai per invocare la condizione when all’interno dell’attività Ansible.
3. Nel tuo editor di codice preferito, crea un file YAML nella directory ~/ansible_when_condition_demo. In questo esempio, il file si chiama my_playbook.yml. Copia e incolla il contenuto del playbook YAML qui sotto nel file my_playbook.yml.
In entrambe le attività seguenti (Task-1
e Task-2
), le condizioni when
verificano su quale sistema operativo si trova ogni host remoto. Il risultato viene quindi passato alla variabile segnaposto ansible_os_family
su ogni attività.
Se il valore del segnaposto ansible_os_family
è uguale a RedHat
o Debian
, allora Ansible esegue una delle attività per installare Apache.
4. Ora esegui il comando ansible-playbook
di seguito per eseguire le attività definite nel playbook (my_playbook.yml) sull’host remoto, definito nel tuo file di inventario esistente.
Nella schermata sottostante, puoi vedere che:
- La prima ATTIVITÀ ha restituito uno stato OK, il che indica che l’attività non richiede alcuna modifica.
- La seconda ATTIVITÀ ha restituito uno stato di skipping. Quando la condizione non viene soddisfatta, l’attività viene saltata.
- La terza ATTIVITÀ ha restituito uno stato di changed, il che indica che l’host remoto non era nello stato corretto (ossia Apache non è presente) ed è stato modificato per installare Apache.

5. Apri una sessione SSH verso l’host remoto, che era l’obiettivo del playbook Ansible, utilizzando il tuo client SSH preferito per verificare che Apache sia installato e in esecuzione.
6. Infine, esegui il comando service
di seguito per verificare se Apache è installato (status apache2
) sull’host remoto.
Come puoi vedere di seguito, hai installato il servizio Apache sulla macchina remota.

Lavorando con Ansible when
e cicli
In precedenza hai eseguito compiti Ansible in base a un parametro di Ansible when
per un parametro specifico come ansible_os_family
. Ma forse è necessario controllare una condizione con più parametri definiti in una lista. In tal caso, prova ad aggiungere un loop
in un compito.
Apri il file my_playbook.yml che hai creato in precedenza (passaggio tre sotto “Lavorare con Ansible when
con molteplici attività nel playbook”). Sostituisci il contenuto del file my_playbook.yml con il codice seguente.
La attività nel codice seguente (Task-1
) esegue un loop
in cui la condizione when
controlla se il valore dell’elemento è maggiore di cinque e restituisce il risultato.
Ora esegui il comando di seguito per eseguire il playbook come hai fatto in precedenza.
Di seguito, è possibile vedere lo stato restituito skipping quando la condizione è falsa e lo stato changed quando la condizione è vera.

when
condition for multiple parameters Lavorando con Ansible when
e i facts
di Ansible
Forse vuoi aggiungere più condizioni per eseguire un’attività. In tal caso, impara come utilizzare i facts di Ansible all’interno della condizione when
. I facts di Ansible ti consentono di aggiungere una dichiarazione condizionale per eseguire attività basate su facts raccolti, come il tuo sistema operativo, gli indirizzi IP, i file system collegati e altro ancora.
Sostituisci il contenuto del file my_playbook.yml con il seguente codice.
Nel codice sottostante, entrambe le attività (Task-1
e Task-2
) vengono eseguite (arresto del sistema) solo quando una delle condizioni seguenti è vera:
- Sia il valore
distribution
che il valoredistribtion_major_version
restituiscono un valore vero. - Il valore di
os_family
è uguale aCentOS
.
Esegui il playbook come hai fatto in precedenza con il comando seguente.
Nota che entrambe le attività mostrano lo stato skipping poiché si è in Ubuntu. L’attività viene eseguita solo se si è in CentOS.

Lavorare con Ansible when
basato su valori registrati
A volte si desidera eseguire o saltare un’attività in base all’esito di un’attività precedente in un playbook. Ad esempio, si potrebbe voler configurare un servizio dopo un aggiornamento dell’attività precedente. In questo caso, utilizzare una variabile registrata. Una variabile registrata consente di registrare l’esito dell’attività precedente come variabile e utilizzarla per la prossima attività come input.
1. Creare una directory vuota chiamata /home/ubuntu/hello.
2. Sostituire il contenuto del file my_playbook.yml con il codice seguente, che esegue quanto segue:
La prima attività (Task-1
) elenca i contenuti (file e sottodirectory) della directory /etc/hosts
in memoria e salva quel risultato nella variabile contents1
tramite il comando register
.
La seconda attività (Task-2
) elenca i contenuti (attualmente vuoti) della directory /home/ubuntu/hello in memoria e salva quel elenco nella variabile contents2
.
La terza attività (Task-3
) controlla e stampa un messaggio “La directory è vuota” se sia il risultato registrato per la variabile contents1
che contents2
è vuoto.
La proprietà
stdout
delle variabilicontents1
econtents2
è l’output della shell salvato dal risultato dell’esecuzione dei comandi di attività.
3. Infine, eseguire il playbook con il comando ansible-playbook
di seguito.
Come mostrato di seguito, poiché il risultato registrato per la variabile contents2
è vuoto, il terzo task restituisce il messaggio La directory è vuota.

Ansible when
based on registered values Lavorare con il when
di Ansible nelle Roles di Ansible
In questo ultimo esempio, imparerai come funziona il when
di Ansible all’interno delle Roles di Ansible. Le roles
di Ansible ti permettono di riutilizzare configurazioni standard e di effettuare un deploy più rapido. Continua a leggere per scoprire come un task invoca le roles
di Ansible solo se la condizione when
di Ansible è vera.
1. Esegui i comandi seguenti per creare una directory chiamata ~/ansible_role_when_demo nella tua directory home e cambia a quella cartella come directory di lavoro. La directory ~/ansible_role_when_demo conterrà i file di esempio di questo esempio.
2. Successivamente, esegui i comandi seguenti per creare una directory ~/ansible_role_when_demo/roles e una directory ~/ansible_role_when_demo/roles/java/tasks.
Di seguito è riportato ciò che conterrà ogni directory:
- La directory ~/ansible_role_when_demo/roles conterrà il ruolo che devi distribuire.
Per impostazione predefinita, Ansible cerca i ruoli in due posizioni: in una directory chiamata roles/ all’interno della directory in cui si trova il playbook o in /etc/ansible/roles. Se desideri archiviare i ruoli in percorsi diversi, dichiara i percorsi usando il parametro
- role:
nel playbook.
- La cartella ~/ansible_role_when_demo/roles/java/tasks conterrà un file main.yml che sarà necessario per distribuire un ruolo.
Ora, crea un file chiamato main.yml nella directory ~/ansible_role_when_demo/roles/java/tasks, quindi copia e incolla il codice di playbook di seguito nel file main.yml.
Il playbook di seguito installa Java sul nodo remoto in cui viene eseguito con il modulo apt.
4. Crea un altro file YAML con un nome a tua scelta e copia/incolla il codice di seguito. Per questo esempio, il file è chiamato ~/ansible_role_when_demo/java-setup.yml.
Il codice di seguito distribuisce il ruolo Ansible (java) all’utente remoto (ubuntu) che ha accesso amministrativo solo quando l’utente remoto è su Debian OS.
5. Esegui il comando tree
per verificare che tutte le cartelle e i file richiesti esistano nella directory ~/ansible_role_when_demo.

6. Infine, esegui il playbook con il comando ansible-playbook
di seguito. ansible-playbook java-setup.yml
Di seguito, il compito ha restituito uno stato changed, indicando che Java è stato installato con successo poiché il nodo remoto è un sistema Debian. Esecuzione del playbook Ansible utilizzando
Ansible when
con i ruoli di Ansible

Ansible when
with Ansible roles Conclusione
In questo tutorial, hai imparato diversi modi per utilizzare Ansible when
e altre condizioni. Hai anche imparato come applicare le condizioni di Ansible when
, dalle attività di base che sfruttano i fatti
di Ansible alla distribuzione di ruoli
di Ansible.
Ora come potresti ampliare questa nuova conoscenza? Forse risparmiare tempo configurando più server con i modelli di Ansible applicando le condizioni di Ansible when
?