Introducció
Els Handlers són una característica poderosa en Ansible que permeten executar tasques només quan hi ha canvis en altres tasques. Això és especialment útil per a operacions que només necessiten ser realitzades quan hi ha hagut una modificació, com ara reiniciar un servei després d'una actualització de configuració.
Conceptes Clau
- Handler: Una tasca que s'executa només quan és notificada per una altra tasca.
- Notify: Una directiva que s'utilitza en una tasca per notificar un handler.
- Listen: Una directiva que permet que múltiples notificacions es combinin en una sola execució del handler.
Estructura d'un Handler
Un handler es defineix de manera similar a una tasca normal, però es col·loca sota la secció handlers. Aquí teniu un exemple bàsic:
---
- name: Exemple de Playbook amb Handlers
hosts: all
tasks:
- name: Actualitzar el fitxer de configuració
copy:
src: /path/to/source/file
dest: /path/to/destination/file
notify: Reiniciar el servei
handlers:
- name: Reiniciar el servei
service:
name: my_service
state: restartedExplicació del Codi
- Definició del Playbook: El playbook comença amb la definició del nom i els hosts.
- Tasques:
- La tasca
Actualitzar el fitxer de configuracióutilitza el mòdulcopyper copiar un fitxer des d'una ubicació font a una destinació. - La directiva
notifys'utilitza per notificar el handlerReiniciar el serveisi aquesta tasca fa algun canvi.
- La tasca
- Handlers:
- El handler
Reiniciar el serveiutilitza el mòdulserviceper reiniciar un servei anomenatmy_service.
- El handler
Exemples Pràctics
Exemple 1: Reiniciar un Servei
---
- name: Reiniciar un servei si el fitxer de configuració canvia
hosts: webservers
tasks:
- name: Copiar el fitxer de configuració
copy:
src: /etc/myapp/config.cfg
dest: /etc/myapp/config.cfg
notify: Reiniciar myapp
handlers:
- name: Reiniciar myapp
service:
name: myapp
state: restartedExemple 2: Notificar Múltiples Handlers
---
- name: Notificar múltiples handlers
hosts: webservers
tasks:
- name: Actualitzar el fitxer de configuració
copy:
src: /etc/myapp/config.cfg
dest: /etc/myapp/config.cfg
notify:
- Reiniciar myapp
- Enviar notificació
handlers:
- name: Reiniciar myapp
service:
name: myapp
state: restarted
- name: Enviar notificació
command: /usr/bin/send_notificationExercicis Pràctics
Exercici 1: Crear un Handler per Reiniciar un Servei
Objectiu: Crear un playbook que copiï un fitxer de configuració i reiniciï un servei només si el fitxer ha canviat.
Instruccions:
- Crea un fitxer de playbook anomenat
reiniciar_servei.yml. - Defineix una tasca que copiï un fitxer de configuració.
- Afegeix un handler que reiniciï un servei.
Solució:
---
- name: Reiniciar un servei si el fitxer de configuració canvia
hosts: all
tasks:
- name: Copiar el fitxer de configuració
copy:
src: /path/to/source/config.cfg
dest: /etc/myapp/config.cfg
notify: Reiniciar myapp
handlers:
- name: Reiniciar myapp
service:
name: myapp
state: restartedExercici 2: Utilitzar la Directiva listen
Objectiu: Crear un playbook que utilitzi la directiva listen per combinar múltiples notificacions en una sola execució del handler.
Instruccions:
- Crea un fitxer de playbook anomenat
utilitzar_listen.yml. - Defineix dues tasques que notifiquin el mateix handler.
- Utilitza la directiva
listenen el handler.
Solució:
---
- name: Utilitzar la directiva listen
hosts: all
tasks:
- name: Copiar el fitxer de configuració 1
copy:
src: /path/to/source/config1.cfg
dest: /etc/myapp/config1.cfg
notify: Reiniciar myapp
- name: Copiar el fitxer de configuració 2
copy:
src: /path/to/source/config2.cfg
dest: /etc/myapp/config2.cfg
notify: Reiniciar myapp
handlers:
- name: Reiniciar myapp
listen: "Reiniciar myapp"
service:
name: myapp
state: restartedErrors Comuns i Consells
- No Notificar el Handler: Assegura't d'utilitzar la directiva
notifyen les tasques que han de notificar el handler. - Handler No Definit: Si notifiques un handler que no està definit, Ansible generarà un error. Assegura't que tots els handlers notificats estiguin definits.
- Execució Innecessària: Utilitza handlers per evitar l'execució innecessària de tasques, com ara reiniciar serveis que no necessiten ser reiniciats.
Conclusió
Els handlers són una eina essencial en Ansible per gestionar tasques que només necessiten ser executades quan hi ha canvis. Utilitzant handlers, pots optimitzar els teus playbooks i assegurar-te que les operacions crítiques només es realitzen quan és necessari. Amb la pràctica, aprendràs a utilitzar handlers de manera efectiva per millorar l'eficiència i la gestió dels teus sistemes.
Ansible: De Principiant a Avançat
Mòdul 1: Introducció a Ansible
Mòdul 2: Conceptes bàsics d'Ansible
Mòdul 3: Playbooks
- Introducció als Playbooks
- Escrivint el teu primer Playbook
- Estructura del Playbook
- Variables i Fets
- Condicionals i Bucles
Mòdul 4: Rols
Mòdul 5: Tècniques Avançades de Playbook
Mòdul 6: Ansible Galaxy
Mòdul 7: Ansible Tower
- Introducció a Ansible Tower
- Instal·lant Ansible Tower
- Utilitzant Ansible Tower
- Gestionant Projectes i Inventaris
