diff --git a/ansible/003-playbook.md b/ansible/003-playbook.md new file mode 100644 index 0000000..affbd72 --- /dev/null +++ b/ansible/003-playbook.md @@ -0,0 +1,88 @@ +# 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: + +```yaml +--- +- 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 eseguire +- `hosts`: indica i nodi sui quali il play sarà eseguito +- `tasks`: 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: true` indica che i task devono essere eseguite con privilegi elevati, tipicamente utilizzando sudo + +Un esempio di playbook con due play: + +```yaml +--- +- 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 con `ansible-vault` + +```bash +ansible-playbook -i inventory playbook/my-playbook.yml -K --ask-vault-pass +```