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.
-
Utilizzo della parola chiave
rolesa 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 chiamataQuesto metodo viene usato per chiamare ruoli che verranno eseguiti sequenzialmente su tutti gli host definiti nella sezione
hosts. -
Utilizzo del modulo
include_rolenell'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 ruoloIl modulo
include_roleesegue 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. -
Utilizzo del modulo
import_rolenell'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 variabiliIl modulo
import_roleviene processato nella fase di parsing del playbook, prima della sua esecuzione effettiva. Ciò significa che tutte le direttive, comewhen, verranno applicate a tutte le task all'interno del ruolo, e non solo alla chiamata del ruolo stesso. Le variabili passate tramitevarssaranno 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 |
Sì | No |
Uso di loop per chiamare |
Sì | No |
| Possibilità di usare variabili definite in precedenza nel play | Sì | 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.