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.mdDescripció 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.mdContingut 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: yeshandlers/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.mdtasks/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: yeshandlers/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 combinedvars/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
