En aquest tema, aprendrem com crear rols en Ansible. Els rols són una manera d'organitzar i reutilitzar el codi d'Ansible, facilitant la gestió de configuracions complexes. Un rol és una col·lecció de tasques, fitxers, plantilles, variables i altres recursos que es poden aplicar a un sistema.
Objectius
- Entendre la importància dels rols en Ansible.
- Aprendre a crear un rol des de zero.
- Conèixer l'estructura d'un rol.
- Implementar un rol en un playbook.
- Importància dels Rols
Els rols permeten:
- Reutilització del codi: Pots reutilitzar el mateix rol en diferents playbooks.
- Organització: Faciliten l'organització del codi en projectes grans.
- Mantenibilitat: Fan que el codi sigui més fàcil de mantenir i actualitzar.
- Creant un Rol des de Zero
Pas 1: Crear l'Estructura del Rol
Ansible proporciona una eina per crear l'estructura bàsica d'un rol. Utilitza la comanda següent:
Per exemple, per crear un rol anomenat webserver
:
Això crearà una estructura de directoris com la següent:
webserver/ ├── README.md ├── defaults/ │ └── main.yml ├── files/ ├── handlers/ │ └── main.yml ├── meta/ │ └── main.yml ├── tasks/ │ └── main.yml ├── templates/ ├── tests/ │ ├── inventory │ └── test.yml └── vars/ └── main.yml
Pas 2: Entendre l'Estructura del Rol
- defaults/main.yml: Variables per defecte del rol.
- files/: Fitxers que es copien directament al sistema remot.
- handlers/main.yml: Handlers que es poden cridar des de les tasques.
- meta/main.yml: Metadades del rol, com dependències.
- tasks/main.yml: Tasques que defineixen el que fa el rol.
- templates/: Plantilles Jinja2 que es renderitzen i es copien al sistema remot.
- vars/main.yml: Variables del rol.
Pas 3: Definir les Tasques del Rol
Edita el fitxer tasks/main.yml
per definir les tasques que el rol ha de realitzar. Per exemple, per instal·lar un servidor web Nginx:
--- - name: Instal·lar Nginx apt: name: nginx state: present - name: Assegurar-se que Nginx està en funcionament service: name: nginx state: started enabled: true
Pas 4: Definir Handlers
Els handlers són tasques que es criden quan es notifiquen. Edita el fitxer handlers/main.yml
:
Pas 5: Definir Variables
Edita el fitxer vars/main.yml
per definir variables específiques del rol:
Pas 6: Utilitzar Plantilles
Si necessites utilitzar plantilles, col·loca-les al directori templates/
i utilitza el mòdul template
en les tasques. Per exemple, crea una plantilla nginx.conf.j2
:
server { listen {{ nginx_port }}; server_name localhost; location / { root /var/www/html; index index.html index.htm; } }
I afegeix una tasca per copiar aquesta plantilla:
--- - name: Copiar la configuració de Nginx template: src: nginx.conf.j2 dest: /etc/nginx/sites-available/default notify: Reiniciar Nginx
- Implementar un Rol en un Playbook
Per utilitzar el rol en un playbook, simplement afegeix-lo a la secció roles
del playbook:
Exercici Pràctic
Objectiu
Crear un rol que instal·li i configuri Apache.
Passos
- Crea un nou rol anomenat
apache
utilitzantansible-galaxy init apache
. - Defineix les tasques per instal·lar Apache en
tasks/main.yml
. - Defineix un handler per reiniciar Apache en
handlers/main.yml
. - Crea una plantilla per a la configuració d'Apache en
templates/
. - Utilitza el rol en un playbook.
Solució
- Crear el rol:
- Definir les tasques en
tasks/main.yml
:
--- - name: Instal·lar Apache apt: name: apache2 state: present - name: Assegurar-se que Apache està en funcionament service: name: apache2 state: started enabled: true
- Definir el handler en
handlers/main.yml
:
- Crear una plantilla
apache.conf.j2
entemplates/
:
<VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
- Afegir una tasca per copiar la plantilla:
--- - name: Copiar la configuració d'Apache template: src: apache.conf.j2 dest: /etc/apache2/sites-available/000-default.conf notify: Reiniciar Apache
- Utilitzar el rol en un playbook:
Conclusió
En aquest tema, hem après com crear un rol en Ansible, entendre la seva estructura i utilitzar-lo en un playbook. Els rols són una eina poderosa per organitzar i reutilitzar el codi, facilitant la gestió de configuracions complexes. Amb aquesta base, estàs preparat per crear i gestionar rols en els teus projectes d'Ansible.
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