# Roles

I playbook possono diventare complessi quando sono responsabili della configurazione di numerosi sistemi diversi, ciascuno con più attività da gestire. Per affrontare questa complessità, Ansible offre la possibilità di organizzare le attività in una struttura di directory denominata `roles`.

In questa configurazione, i playbook richiamano i ruoli anziché i singoli task. Questo approccio consente di raggruppare le attività in unità logiche, facilitando il riutilizzo dei ruoli in altri playbook.

```yaml
---
# Tools for terminal
- name: TERMINAL - Kitty, Tmux, Fish
  ansible.builtin.apt:
    pkg:
      - kitty
      - tmux
      - fish
    state: present
```

## Inclusione di un ruolo in un playbook

Per utilizzare un ruolo all’interno di un playbook, è necessario richiamarlo tramite la keyword `roles`, seguita dall’elenco dei ruoli da eseguire:

```yaml
- hosts: server
  roles:
    - test-role
```

## Struttura

Il comando per la creazione di un ruolo è `ansible-galaxy init test-role`. Questo comando non solo consente di inizializzare un nuovo ruolo, ma offre anche la possibilità di cercare e installare ruoli definiti da altri utenti disponibili online.

Al termine dell’esecuzione del comando, viene generata una directory denominata come il ruolo stesso, con la seguente struttura:

- `Tasks`: la directory Tasks contiene l'elenco dei task eseguiti dal ruolo, specificati nel file `main.yml`
- `Handlers`: raccoglie gli handlers che possono essere utilizzati all'interno di questo ruolo. Si tratta di task speciali che vengono eseguiti solo quando sono stati notificati da altri task
- `Defaults`: include le variabili predefinite utilizzate all’interno del ruolo
- `Vars`: contiene ulteriori variabili
- `Files`: memorizza i file che devono essere distribuiti sui vari host nel corso dell’esecuzione del ruolo
- `Meta`: conserva i metadati relativi al ruolo

![ansible-role](asset/img/ansible-role.png)
