4.2 KiB
Playbook
Un playbook Ansible è un file testuale, scritto in formato YAML, che definisce una sequenza di operazioni (task) da eseguire su uno o più nodi.
Un playbook può contenere uno o più Play. Ogni Play è composto da una serie di task, che a loro volta possono richiamare uno o più moduli.
Struttura di un playbook
Di seguito è riportato un esempio di playbook:
---
- name: install and start httpd
hosts: databases
tasks:
- name: install httpd
apt:
name: httpd
state: latest
become: true
- name: start httpd
service:
name: httpd
state: started
become: true
name: specifica il nome del play, che descrive l'azione da eseguirehosts: indica i nodi sui quali il play sarà eseguitotasks: contiene un elenco di operazioni da eseguire
In questo esempio:
- il playbook contiene un unico play
- il play ha il compito di installare e avviare il servizio httpd su un gruppo di host denominato databases
- sono definiti due task: il primo installa il pacchetto httpd tramite il modulo apt, mentre il secondo avvia il servizio httpd utilizzando il modulo service
- l’opzione
become: trueindica che i task devono essere eseguite con privilegi elevati, tipicamente utilizzando sudo
Un esempio di playbook con due play:
---
- name: install and start apache
hosts: webservers
tasks:
- name: install apache
apt:
name: apache2
state: latest
become: true
- name: start apache
service:
name: apache2
state: started
become: true
- name: install and start mysql
hosts: databases
tasks:
- name: install mysql
apt:
name: mysql-server
state: latest
become: true
- name: start mysql
service:
name: mysql
state: started
become: true
Esecuzione di un playbook
Per eseguire un playbook, è necessario utilizzare il comando ansible-playbook, specificando:
- l’inventory file, se custom, con l'opzione
-i - il percorso del playbook
- eventuali opzioni aggiuntive, come
-ask-vault-pass, che richiede la password per decifrare i file crittografati conansible-vault
ansible-playbook -i inventory playbook/my-playbook.yml -K --ask-vault-pass
Conditionals
Le istruzioni condizionali consentono di modificare il comportamento di un playbook in base a specifiche condizioni.
L'istruzione condizionale più semplice si applica a un singolo task, utilizzando la parola chiave when. In questo caso, il task verrà eseguito solo sui nodi in cui la condizione specificata è soddisfatta.
Tipologie di condizioni
Le condizioni possono basarsi su diversi tipi di dati:
ansible_facts: attributi specifici di ogni host, messi a disposizione da Ansible. Questi fanno riferimento a caratteristiche del nodo, come il tipo sistema operativo, le caratteristiche hardware e altre proprietà rilevanti. Sono utili per adattare il comportamento del playbook in base alle caratteristiche del nodo targetregistered variables: variabili che contengono il risultato di task precedenti. È possibile condizionare in questo modo l’esecuzione di un task in base all’esito di un task già eseguitovariabilidefinite nel playbook o nell'inventory
Un semplice esempio di condizione when:
---
- name: playbooks with conditions
hosts: db
become: true
tasks:
- name: install postgres
yum:
name: postgresql
state: latest
when: ansible_distribution == 'Ubuntu'
Un esempio di registered variables:
---
- name: Install and Start HTTPD Service
hosts: webservers
become: true
tasks:
- name: Install the httpd package
yum:
name: httpd
state: present
register: httpd_installation
- name: Start the httpd service
service:
name: httpd
state: started
when: httpd_installation.changed == true
Questo task utilizza il modulo yum per installare il pacchetto httpd. Durante l'esecuzione, il risultato dell'installazione viene registrato nella variabile httpd_installation. Avvia infine il servizio httpd, ma solo se l'installazione del pacchetto è stata completata con successo.