En aquest tema, aprendrem com crear rols en Ansible i com compartir-los amb la comunitat mitjançant Ansible Galaxy. Els rols són una manera d'organitzar i reutilitzar el codi d'Ansible, facilitant la gestió de configuracions complexes.

  1. Introducció als Rols

Què és un Rol?

Un rol en Ansible és una col·lecció d'elements que poden ser utilitzats per configurar un sistema. Aquests elements inclouen:

  • Tasques: Accions que Ansible ha de realitzar.
  • Fitxers: Fitxers que han de ser copiats al sistema remot.
  • Plantilles: Fitxers Jinja2 que poden ser renderitzats amb variables.
  • Variables: Valors que poden ser utilitzats dins de les tasques i plantilles.
  • Handlers: Tasques que s'executen en resposta a notificacions.
  • Meta: Informació sobre el rol, com ara les seves dependències.

  1. Creant un Rol

Estructura del Directori de Rols

La creació d'un rol implica seguir una estructura de directori específica. Aquesta estructura ajuda a mantenir el codi organitzat i fàcil de gestionar.

my_role/
├── defaults/
│   └── main.yml
├── files/
├── handlers/
│   └── main.yml
├── meta/
│   └── main.yml
├── tasks/
│   └── main.yml
├── templates/
├── tests/
│   ├── inventory
│   └── test.yml
└── vars/
    └── main.yml

Creant el Rol Pas a Pas

  1. Crear el Directori del Rol:

    ansible-galaxy init my_role
    
  2. Definir les Tasques: Editem tasks/main.yml per definir les tasques que el rol ha de realitzar.

    ---
    - name: Instal·lar Apache
      apt:
        name: apache2
        state: present
    
  3. Definir les Variables: Editem vars/main.yml per definir les variables que seran utilitzades en el rol.

    ---
    apache_port: 80
    
  4. Definir els Handlers: Editem handlers/main.yml per definir els handlers que seran notificats per les tasques.

    ---
    - name: Reiniciar Apache
      service:
        name: apache2
        state: restarted
    
  5. Definir les Plantilles: Creem una plantilla a templates/apache.conf.j2 que serà utilitzada per configurar Apache.

    Listen {{ apache_port }}
    
  6. Definir els Fitxers: Copiem qualsevol fitxer necessari a files/.

  7. Definir la Meta: Editem meta/main.yml per definir les metadades del rol, com ara les seves dependències.

    ---
    dependencies: []
    

  1. Compartint Rols amb Ansible Galaxy

Què és Ansible Galaxy?

Ansible Galaxy és una plataforma per compartir rols d'Ansible amb la comunitat. Permet als usuaris trobar, descarregar i utilitzar rols creats per altres.

Publicant un Rol a Ansible Galaxy

  1. Crear un Compte a Ansible Galaxy: Registra't a Ansible Galaxy.

  2. Configurar el Fitxer meta/main.yml: Assegura't que el fitxer meta/main.yml conté tota la informació necessària, incloent-hi el nom del rol, l'autor, la descripció, etc.

    ---
    galaxy_info:
      author: "El teu Nom"
      description: "Un rol per instal·lar i configurar Apache"
      company: "La teva Empresa"
      license: "MIT"
      min_ansible_version: 2.9
      platforms:
        - name: Ubuntu
          versions:
            - bionic
            - focal
    
  3. Publicar el Rol: Utilitza la comanda ansible-galaxy per publicar el rol.

    ansible-galaxy role import <el_teu_usuari> my_role
    
  4. Utilitzar el Rol: Un cop publicat, altres usuaris poden instal·lar el rol utilitzant la comanda següent:

    ansible-galaxy install <el_teu_usuari>.my_role
    

  1. Exercici Pràctic

Objectiu

Crea un rol que instal·li i configuri Nginx en un servidor Ubuntu.

Passos

  1. Crear el Directori del Rol:

    ansible-galaxy init nginx_role
    
  2. Definir les Tasques: Editem tasks/main.yml per instal·lar Nginx.

    ---
    - name: Instal·lar Nginx
      apt:
        name: nginx
        state: present
    
  3. Definir les Variables: Editem vars/main.yml per definir el port de Nginx.

    ---
    nginx_port: 80
    
  4. Definir els Handlers: Editem handlers/main.yml per reiniciar Nginx.

    ---
    - name: Reiniciar Nginx
      service:
        name: nginx
        state: restarted
    
  5. Definir les Plantilles: Creem una plantilla a templates/nginx.conf.j2 per configurar Nginx.

    server {
        listen {{ nginx_port }};
        server_name localhost;
        location / {
            root /var/www/html;
            index index.html index.htm;
        }
    }
    
  6. Provar el Rol: Crea un fitxer de prova a tests/test.yml i executa'l per assegurar-te que el rol funciona correctament.

    ---
    - hosts: localhost
      roles:
        - nginx_role
    

Solució

---
- name: Instal·lar Nginx
  apt:
    name: nginx
    state: present

- name: Copiar la configuració de Nginx
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/sites-available/default
  notify:
    - Reiniciar Nginx

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

  1. Conclusió

En aquest tema, hem après com crear rols en Ansible i com compartir-los amb la comunitat mitjançant Ansible Galaxy. Els rols són una eina poderosa per organitzar i reutilitzar el codi d'Ansible, facilitant la gestió de configuracions complexes. Practica creant i compartint els teus propis rols per millorar les teves habilitats amb Ansible.

© Copyright 2024. Tots els drets reservats