# 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 ```