blocchi, sezioni rescue e always

This commit is contained in:
dado
2025-08-30 21:04:10 +02:00
parent 0d74ab3199
commit 16b64645fa

View File

@@ -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: 'userOne', uid: 1001, shell: '/bin/bash' }
- { name: 'userTwo', uid: 1002, shell: '/bin/zsh' } - { 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 lesecuzione 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 dallesito 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.