Què són els Rols en Ansible?
Els rols en Ansible són una manera d'organitzar i reutilitzar el codi de manera estructurada i modular. Els rols permeten dividir les tasques en components més petits i manejables, facilitant la seva reutilització en diferents playbooks i projectes. Això ajuda a mantenir el codi net, organitzat i fàcil de mantenir.
Beneficis dels Rols
- Reutilització del Codi: Els rols permeten reutilitzar el codi en diferents playbooks i projectes.
- Organització: Faciliten l'organització del codi en components lògics.
- Mantenibilitat: Fan que el codi sigui més fàcil de mantenir i actualitzar.
- Col·laboració: Faciliten la col·laboració entre diferents membres de l'equip, ja que cada rol pot ser desenvolupat i mantingut de manera independent.
Estructura d'un Rol
Un rol en Ansible té una estructura de directori específica que facilita l'organització del codi. A continuació es mostra l'estructura bàsica d'un rol:
roles/ └── example_role/ ├── tasks/ │ └── main.yml ├── handlers/ │ └── main.yml ├── templates/ ├── files/ ├── vars/ │ └── main.yml ├── defaults/ │ └── main.yml ├── meta/ │ └── main.yml └── README.md
Descripció dels Directori i Fitxers
- tasks/main.yml: Conté les tasques que s'executaran quan s'inclogui el rol en un playbook.
- handlers/main.yml: Conté els handlers que es poden cridar des de les tasques.
- templates/: Conté plantilles Jinja2 que es poden utilitzar per generar fitxers de configuració dinàmics.
- files/: Conté fitxers estàtics que es poden copiar als hosts de destinació.
- vars/main.yml: Conté variables que es poden utilitzar dins del rol.
- defaults/main.yml: Conté valors per defecte de les variables del rol.
- meta/main.yml: Conté informació sobre el rol, com ara les seves dependències.
- README.md: Documentació del rol.
Exemple Pràctic
A continuació es mostra un exemple pràctic d'un rol senzill que instal·la i configura el servidor web Nginx.
Estructura del Rol
roles/ └── nginx/ ├── tasks/ │ └── main.yml ├── handlers/ │ └── main.yml ├── templates/ │ └── nginx.conf.j2 ├── files/ ├── vars/ │ └── main.yml ├── defaults/ │ └── main.yml ├── meta/ │ └── main.yml └── README.md
Contingut dels Fitxers
tasks/main.yml
--- - name: Instal·lar Nginx apt: name: nginx state: present notify: Reiniciar Nginx - name: Copiar la configuració de Nginx template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf notify: Reiniciar Nginx - name: Assegurar-se que Nginx està en funcionament service: name: nginx state: started enabled: yes
handlers/main.yml
templates/nginx.conf.j2
user www-data; worker_processes auto; pid /run/nginx.pid; events { worker_connections 768; } http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; gzip on; gzip_disable "msie6"; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
vars/main.yml
--- nginx_user: www-data nginx_worker_processes: auto nginx_worker_connections: 768 nginx_keepalive_timeout: 65
defaults/main.yml
--- nginx_user: www-data nginx_worker_processes: auto nginx_worker_connections: 768 nginx_keepalive_timeout: 65
meta/main.yml
Exercici Pràctic
Objectiu
Crea un rol anomenat apache
que instal·li i configuri el servidor web Apache.
Passos
- Crea l'estructura del directori per al rol
apache
. - Escriu les tasques necessàries per instal·lar Apache i assegurar-se que està en funcionament.
- Crea un fitxer de plantilla per a la configuració d'Apache.
- Defineix un handler per reiniciar Apache quan la configuració canviï.
- Defineix variables per a la configuració d'Apache.
Solució
Estructura del Directori
roles/ └── apache/ ├── tasks/ │ └── main.yml ├── handlers/ │ └── main.yml ├── templates/ │ └── apache.conf.j2 ├── files/ ├── vars/ │ └── main.yml ├── defaults/ │ └── main.yml ├── meta/ │ └── main.yml └── README.md
tasks/main.yml
--- - name: Instal·lar Apache apt: name: apache2 state: present notify: Reiniciar Apache - name: Copiar la configuració d'Apache template: src: apache.conf.j2 dest: /etc/apache2/apache2.conf notify: Reiniciar Apache - name: Assegurar-se que Apache està en funcionament service: name: apache2 state: started enabled: yes
handlers/main.yml
templates/apache.conf.j2
ServerRoot "/etc/apache2" Listen 80 <Directory /> AllowOverride none Require all denied </Directory> <Directory /usr/share> AllowOverride none Require all granted </Directory> <Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
vars/main.yml
defaults/main.yml
meta/main.yml
Conclusió
Els rols en Ansible són una eina poderosa per organitzar i reutilitzar el codi de manera eficient. En aquest tema, hem après què són els rols, com estan estructurats i com crear un rol bàsic per instal·lar i configurar un servidor web. A mesura que avancem en el curs, veurem com utilitzar rols en playbooks i com crear rols més complexos per a diferents necessitats.
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