En aquest tema, explorarem l'estructura del directori de rols en Ansible. Els rols són una manera d'organitzar els playbooks i altres fitxers relacionats per facilitar la reutilització i la compartició del codi. Una estructura de directori ben definida és essencial per mantenir els rols nets i fàcils de gestionar.

Objectius d'Aprenentatge

Al final d'aquest tema, hauràs après:

  • La importància d'una estructura de directori ben definida per als rols.
  • Els components principals d'un directori de rols.
  • Com crear i organitzar aquests components.

Estructura Bàsica del Directori de Rols

Un directori de rols típic en Ansible té la següent estructura:

roles/
└── nom_del_rol/
    ├── tasks/
    │   └── main.yml
    ├── handlers/
    │   └── main.yml
    ├── templates/
    ├── files/
    ├── vars/
    │   └── main.yml
    ├── defaults/
    │   └── main.yml
    ├── meta/
    │   └── main.yml
    ├── tests/
    │   ├── inventory
    │   └── test.yml
    └── README.md

Components del Directori de Rols

  1. tasks/: Aquest directori conté els fitxers de tasques que defineixen les accions que el rol ha de realitzar. El fitxer main.yml és el punt d'entrada principal per a les tasques del rol.

    # roles/nom_del_rol/tasks/main.yml
    - name: Instal·lar Apache
      apt:
        name: apache2
        state: present
    
  2. handlers/: Aquest directori conté els fitxers de handlers, que són tasques que es poden notificar des d'altres tasques. El fitxer main.yml és el punt d'entrada principal per als handlers del rol.

    # roles/nom_del_rol/handlers/main.yml
    - name: Reiniciar Apache
      service:
        name: apache2
        state: restarted
    
  3. templates/: Aquest directori conté plantilles Jinja2 que es poden utilitzar per generar fitxers de configuració dinàmics.

  4. files/: Aquest directori conté fitxers estàtics que es poden copiar directament als hosts de destinació.

  5. vars/: Aquest directori conté fitxers de variables que defineixen valors que es poden utilitzar dins del rol. El fitxer main.yml és el punt d'entrada principal per a les variables del rol.

    # roles/nom_del_rol/vars/main.yml
    apache_port: 80
    
  6. defaults/: Aquest directori conté fitxers de variables per defecte que defineixen valors predeterminats per al rol. El fitxer main.yml és el punt d'entrada principal per a les variables per defecte del rol.

    # roles/nom_del_rol/defaults/main.yml
    apache_port: 8080
    
  7. meta/: Aquest directori conté metadades sobre el rol, com ara les seves dependències. El fitxer main.yml és el punt d'entrada principal per a les metadades del rol.

    # roles/nom_del_rol/meta/main.yml
    dependencies:
      - { role: common, some_parameter: 3 }
    
  8. tests/: Aquest directori conté fitxers de proves per assegurar-se que el rol funciona correctament. Inclou un fitxer d'inventari i un playbook de prova.

    # roles/nom_del_rol/tests/test.yml
    - hosts: localhost
      roles:
        - nom_del_rol
    
  9. README.md: Aquest fitxer conté documentació sobre el rol, incloent-hi una descripció, com utilitzar-lo i qualsevol altra informació rellevant.

Exercici Pràctic

Objectiu

Crea un rol anomenat webserver amb l'estructura de directori adequada i afegeix una tasca per instal·lar Nginx.

Passos

  1. Crea l'estructura de directori per al rol webserver.

    mkdir -p roles/webserver/{tasks,handlers,templates,files,vars,defaults,meta,tests}
    touch roles/webserver/{tasks/main.yml,handlers/main.yml,vars/main.yml,defaults/main.yml,meta/main.yml,tests/test.yml,README.md}
    
  2. Afegeix una tasca per instal·lar Nginx al fitxer tasks/main.yml.

    # roles/webserver/tasks/main.yml
    - name: Instal·lar Nginx
      apt:
        name: nginx
        state: present
    
  3. Afegeix un handler per reiniciar Nginx al fitxer handlers/main.yml.

    # roles/webserver/handlers/main.yml
    - name: Reiniciar Nginx
      service:
        name: nginx
        state: restarted
    
  4. Afegeix una variable per definir el port de Nginx al fitxer vars/main.yml.

    # roles/webserver/vars/main.yml
    nginx_port: 80
    
  5. Afegeix una variable per defecte per definir el port de Nginx al fitxer defaults/main.yml.

    # roles/webserver/defaults/main.yml
    nginx_port: 8080
    
  6. Afegeix metadades sobre el rol al fitxer meta/main.yml.

    # roles/webserver/meta/main.yml
    dependencies: []
    
  7. Afegeix un playbook de prova al fitxer tests/test.yml.

    # roles/webserver/tests/test.yml
    - hosts: localhost
      roles:
        - webserver
    
  8. Afegeix documentació al fitxer README.md.

    # Webserver Role
    
    Aquest rol instal·la i configura Nginx.
    
    ## Variables
    
    - `nginx_port`: El port en el qual Nginx escoltarà (per defecte: 8080).
    
    ## Ús
    
    ```yaml
    - hosts: all
      roles:
        - webserver
    

Conclusió

En aquest tema, hem après la importància d'una estructura de directori ben definida per als rols en Ansible. Hem explorat els components principals d'un directori de rols i hem creat un rol bàsic anomenat webserver amb l'estructura adequada. Aquesta organització facilita la reutilització i la compartició del codi, així com el manteniment dels rols a llarg termini.

En el següent tema, aprendrem com utilitzar els rols en els playbooks per aprofitar al màxim aquesta estructura organitzada.

© Copyright 2024. Tots els drets reservats