En aquest tema, explorarem l'estructura d'un playbook d'Ansible. Els playbooks són el cor d'Ansible, ja que defineixen les tasques que es volen executar en els nodes gestionats. Comprendre l'estructura d'un playbook és fonamental per escriure playbooks eficients i mantenibles.

Components d'un Playbook

Un playbook d'Ansible està format per una o més "plays". Cada play aplica un conjunt de tasques a un grup de nodes. A continuació, desglossem els components principals d'un playbook:

  1. Hosts: Defineix els nodes on s'executaran les tasques.
  2. Vars: Variables que es poden utilitzar dins del playbook.
  3. Tasks: Llista de tasques que es volen executar.
  4. Handlers: Tasques especials que s'executen en resposta a notificacions.
  5. Roles: Agrupacions de tasques, variables, fitxers, plantilles, etc.

Exemple d'un Playbook Bàsic

---
- name: Exemple de Playbook
  hosts: webservers
  vars:
    http_port: 80
  tasks:
    - name: Instal·lar Apache
      apt:
        name: apache2
        state: present
      become: yes

    - name: Copiar fitxer de configuració
      template:
        src: /path/to/httpd.conf.j2
        dest: /etc/apache2/sites-available/000-default.conf
      notify:
        - Restart Apache

  handlers:
    - name: Restart Apache
      service:
        name: apache2
        state: restarted

Descripció dels Components

  1. Hosts:

    hosts: webservers
    

    Aquest camp especifica els nodes on s'executaran les tasques. En aquest cas, el grup de nodes es diu webservers.

  2. Vars:

    vars:
      http_port: 80
    

    Aquí es defineixen variables que es poden utilitzar dins del playbook. En aquest exemple, http_port és una variable que conté el valor 80.

  3. Tasks:

    tasks:
      - name: Instal·lar Apache
        apt:
          name: apache2
          state: present
        become: yes
    

    Les tasques són les accions que es volen executar en els nodes. Cada tasca té un nom descriptiu i utilitza un mòdul d'Ansible (en aquest cas, apt) per realitzar una acció. El paràmetre become: yes indica que la tasca s'executarà amb privilegis d'administrador.

  4. Handlers:

    handlers:
      - name: Restart Apache
        service:
          name: apache2
          state: restarted
    

    Els handlers són tasques especials que s'executen quan són notificades per altres tasques. En aquest exemple, el handler Restart Apache s'executa quan la tasca Copiar fitxer de configuració el notifica.

Estructura Detallada d'un Playbook

A continuació, es presenta una estructura més detallada d'un playbook amb més components:

---
- name: Exemple Avançat de Playbook
  hosts: webservers
  vars:
    http_port: 80
    max_clients: 200
  pre_tasks:
    - name: Actualitzar el cache d'apt
      apt:
        update_cache: yes
  tasks:
    - name: Instal·lar Apache
      apt:
        name: apache2
        state: present
      become: yes

    - name: Copiar fitxer de configuració
      template:
        src: /path/to/httpd.conf.j2
        dest: /etc/apache2/sites-available/000-default.conf
      notify:
        - Restart Apache

    - name: Assegurar-se que Apache està en funcionament
      service:
        name: apache2
        state: started

  post_tasks:
    - name: Verificar que Apache està escoltant al port 80
      command: netstat -tuln | grep :80

  handlers:
    - name: Restart Apache
      service:
        name: apache2
        state: restarted

Components Addicionals

  1. pre_tasks:

    pre_tasks:
      - name: Actualitzar el cache d'apt
        apt:
          update_cache: yes
    

    Les pre-tasques són tasques que s'executen abans de les tasques principals. En aquest exemple, s'actualitza el cache d'apt abans d'instal·lar Apache.

  2. post_tasks:

    post_tasks:
      - name: Verificar que Apache està escoltant al port 80
        command: netstat -tuln | grep :80
    

    Les post-tasques són tasques que s'executen després de les tasques principals. En aquest exemple, es verifica que Apache està escoltant al port 80.

Exercici Pràctic

Objectiu

Escriure un playbook que faci el següent:

  1. Instal·li Nginx en els nodes del grup webservers.
  2. Copiï un fitxer de configuració personalitzat.
  3. Reiniciï Nginx si el fitxer de configuració ha canviat.
  4. Verifiqui que Nginx està en funcionament.

Solució

---
- name: Instal·lar i Configurar Nginx
  hosts: webservers
  tasks:
    - name: Instal·lar Nginx
      apt:
        name: nginx
        state: present
      become: yes

    - name: Copiar fitxer de configuració de Nginx
      template:
        src: /path/to/nginx.conf.j2
        dest: /etc/nginx/nginx.conf
      notify:
        - Restart Nginx

    - name: Assegurar-se que Nginx està en funcionament
      service:
        name: nginx
        state: started

  handlers:
    - name: Restart Nginx
      service:
        name: nginx
        state: restarted

Explicació

  1. Instal·lar Nginx: Utilitza el mòdul apt per instal·lar Nginx.
  2. Copiar fitxer de configuració de Nginx: Utilitza el mòdul template per copiar un fitxer de configuració personalitzat.
  3. Assegurar-se que Nginx està en funcionament: Utilitza el mòdul service per assegurar-se que Nginx està en funcionament.
  4. Restart Nginx: Handler que reinicia Nginx si el fitxer de configuració ha canviat.

Conclusió

En aquest tema, hem après sobre l'estructura d'un playbook d'Ansible i els seus components principals. Hem vist exemples pràctics i hem realitzat un exercici per reforçar els conceptes apresos. Amb aquesta base, estem preparats per aprofundir en altres aspectes dels playbooks en els següents temes.

© Copyright 2024. Tots els drets reservats