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.

  1. 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.

  1. 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:

ansible-galaxy init nom_del_rol

Per exemple, per crear un rol anomenat webserver:

ansible-galaxy init 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:

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

Pas 5: Definir Variables

Edita el fitxer vars/main.yml per definir variables específiques del rol:

---
nginx_port: 80

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

  1. Implementar un Rol en un Playbook

Per utilitzar el rol en un playbook, simplement afegeix-lo a la secció roles del playbook:

---
- hosts: webservers
  roles:
    - webserver

Exercici Pràctic

Objectiu

Crear un rol que instal·li i configuri Apache.

Passos

  1. Crea un nou rol anomenat apache utilitzant ansible-galaxy init apache.
  2. Defineix les tasques per instal·lar Apache en tasks/main.yml.
  3. Defineix un handler per reiniciar Apache en handlers/main.yml.
  4. Crea una plantilla per a la configuració d'Apache en templates/.
  5. Utilitza el rol en un playbook.

Solució

  1. Crear el rol:
ansible-galaxy init apache
  1. 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
  1. Definir el handler en handlers/main.yml:
---
- name: Reiniciar Apache
  service:
    name: apache2
    state: restarted
  1. Crear una plantilla apache.conf.j2 en templates/:
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
  1. 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
  1. Utilitzar el rol en un playbook:
---
- hosts: webservers
  roles:
    - apache

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.

© Copyright 2024. Tots els drets reservats