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

---
- name: Reiniciar Nginx
  service:
    name: nginx
    state: restarted

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

---
dependencies: []

Exercici Pràctic

Objectiu

Crea un rol anomenat apache que instal·li i configuri el servidor web Apache.

Passos

  1. Crea l'estructura del directori per al rol apache.
  2. Escriu les tasques necessàries per instal·lar Apache i assegurar-se que està en funcionament.
  3. Crea un fitxer de plantilla per a la configuració d'Apache.
  4. Defineix un handler per reiniciar Apache quan la configuració canviï.
  5. 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

---
- name: Reiniciar Apache
  service:
    name: apache2
    state: restarted

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

---
apache_listen_port: 80

defaults/main.yml

---
apache_listen_port: 80

meta/main.yml

---
dependencies: []

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.

© Copyright 2024. Tots els drets reservats