From 16b64645fa65fbaeb43608008463dff80d705c8e Mon Sep 17 00:00:00 2001 From: dado Date: Sat, 30 Aug 2025 21:04:10 +0200 Subject: [PATCH] blocchi, sezioni rescue e always --- ansible/003-playbook.md | 61 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/ansible/003-playbook.md b/ansible/003-playbook.md index 0bab77d..0a4bdd4 100644 --- a/ansible/003-playbook.md +++ b/ansible/003-playbook.md @@ -190,3 +190,64 @@ Per i loop di liste di hash, si utilizza la medesima parola chiave loop, ma la l - { name: 'userOne', uid: 1001, shell: '/bin/bash' } - { name: 'userTwo', uid: 1002, shell: '/bin/zsh' } ``` + +## Blocks + +I blocchi in Ansible vengono impiegati per due finalità principali: + +- *raggruppare task* correlati tra loro, in modo da applicare direttive comuni a un insieme di operazioni +- *gestire gli errori* che possono verificarsi durante l’esecuzione dei task, consentendo di definire azioni specifiche in caso di fallimento o di successo + +Tutte le direttive associate a un blocco vengono automaticamente ereditate da tutti i task contenuti al suo interno. + +I blocchi offrono due sezioni dedicate alla gestione degli errori: + +- `rescue`: contiene i task che vengono eseguiti immediatamente nel caso in cui almeno uno dei task all'interno del blocco generi un errore +- `always`: contiene i task che vengono eseguiti indipendentemente dall’esito dei task nel blocco, sia in caso di successo che di fallimento + +Un esempio di **raggruppamento**: + +```yaml +--- +- name: block + hosts: db + tasks: + - block: + - name: list user + command: ls -l /usr/ + - name: list root + command: ls -l /root/ + - name: list bin + command: ls -l /bin/ + - name: list home + command: ls -l ~/ + become: yes + - name: list home + command: "ls -l ~/" +``` + +La direttiva `become: yes` è associata al blocco e viene applicata a tutti i task al suo interno, semplificando la gestione delle operazioni correlate. + +Un esempio di **gestione di errori**: + +```yaml +--- +- name: Error handling example + hosts: db + tasks: + - block: + - name: Execute a command that fail + command: /bin/false + + rescue: + - name: Handle the error + debug: + msg: "The command failed, executing an alternative action." + + always: + - name: Always execute this command + debug: + msg: "This action is executed regardless of the block's result." +``` + +In questo caso, il task nella sezione `rescue` viene eseguito solo se il comando /bin/false fallisce, mentre il task nella sezione `always` viene eseguito in ogni circostanza.