Sobes.tech
Junior

Come chiamare i ruoli in un playbook di Ansible?

sobes.tech AI

Risposta dell'AI

I ruoli in Ansible possono essere chiamati in diversi modi all'interno di un playbook.

  1. Utilizzo della parola chiave roles a livello di playbook:

    # playbooks/my_playbook.yml
    - name: Applicare ruoli ai server
      hosts: webservers
      become: yes
      roles:
        - role: common  # Chiamata del ruolo 'common'
        - role: nginx   # Chiamata del ruolo 'nginx'
          vars:         # Passaggio di variabili al ruolo
            nginx_port: 8080
        - another_role # Forma abbreviata di chiamata
    

    Questo metodo viene usato per chiamare ruoli che verranno eseguiti sequenzialmente su tutti gli host definiti nella sezione hosts.

  2. Utilizzo del modulo include_role nell'elenco delle task:

    # playbooks/my_playbook.yml
    - name: Applicare ruoli con condizioni
      hosts: appservers
      tasks:
        - name: Includere il ruolo del database (solo per dev)
          include_role:
            name: database
          when: env == 'dev' # Chiamata condizionale del ruolo
    
        - name: Includere il ruolo dell'applicazione
          include_role:
            name: app
          vars:
            app_version: 1.2.0 # Passaggio di variabili al ruolo
    

    Il modulo include_role esegue il ruolo come se fosse una lista di task inclusa nel play corrente. Permette di usare condizioni (when) e cicli (loop) per controllare l'esecuzione del ruolo.

  3. Utilizzo del modulo import_role nell'elenco delle task:

    # playbooks/my_playbook.yml
    - name: Importare il ruolo dell'applicazione
      hosts: appservers
      tasks:
        - name: Importare il ruolo dell'applicazione per tutti gli host
          import_role:
            name: app
          vars:
            app_config_file: /etc/app/config.conf # Passaggio di variabili
    

    Il modulo import_role viene processato nella fase di parsing del playbook, prima della sua esecuzione effettiva. Ciò significa che tutte le direttive, come when, verranno applicate a tutte le task all'interno del ruolo, e non solo alla chiamata del ruolo stesso. Le variabili passate tramite vars saranno disponibili all'interno del ruolo.

La differenza principale tra include_role e import_role risiede nel momento di elaborazione: import_role viene processato staticamente nella fase di parsing, mentre include_role viene processato dinamicamente durante l'esecuzione del playbook. Questo influisce sulla possibilità di usare condizioni e cicli:

Funzione include_role import_role
Elaborazione Dinamica Statica
Uso di when per chiamare No
Uso di loop per chiamare No
Possibilità di usare variabili definite in precedenza nel play No

La scelta tra questi metodi dipende dalla flessibilità richiesta e dal momento di elaborazione. Per l'inclusione semplice di ruoli, di solito basta la parola chiave roles o import_role. Per scenari più complessi con condizioni e cicli, si utilizza include_role.