Il costo della complessità: Ansible AWX
5 Maggio 2024
Ansible Navigator
Ansible Navigator è una interfaccia testuale, basata su container, che permette di gestire una serie di componenti di Ansible. In un certo senso è una sorta di wrapper, di interfaccia unificata verso l’ecosistema Ansible. Inizialmente l’uso che faremo di Ansible Navigator non richiede l’uso di container: useremo quindi il parametro --ee=false
.
Tra i moduli di Ansible Navigator, troviamo:
run
: esegue un playbook.replay
: mostra il risultato di un playbook eseguito precedentemente.inventory
: mostra uno specifico inventario di Ansible, descrivendone host, gruppi, variabili.config
: mostra la configurazione di Ansible, descrivendone i singoli parametri.settings
: mostra la configurazione corrente di Ansible Navigator, descrivendone i singoli parametri.lint
: formatta in modo corretto (linting) playbook e ruoli.
Vediamo quindi nella pratica come usare Ansible Navigator.
Run: esecuzione di un playbook Ansible
Un playbook Ansible può essere eseguito tramite Ansible Navigator nel seguente modo:
ansible-navigator --ee=false run playbook-print_all_vars.yml -i inventory.yml
Rispetto all’output di Ansible, Ansible Navigator ci offre una leggibilità decisamente migliore:
Play name Ok Changed Unreachable Failed Skipped Ignored In progress Task count Progress
0│PRINT DEBUG VARIABLES 6 0 0 0 0 0 0 6 Complete
Possiamo ottenere i dettagli del playbook utilizzando il numero di riga (0
nel nostro caso), o :
con il numero di riga (:0
nel nostro caso).
Possiamo quindi vedere l’elenco dei task:
Result Host Number Changed Task Task action Duration
0│Ok localhost 0 False Gathering Facts gather_facts 1s
1│Ok localhost 1 False PRINT MODULE VARIABLES (vars) ansible.builtin.debug 0s
2│Ok localhost 2 False PRINT ENVIRONMENT VARIABLES (environmeansible.builtin.debug 0s
3│Ok localhost 3 False PRINT GROUP NAMES VARIABLES (group_namansible.builtin.debug 0s
4│Ok localhost 4 False PRINT GROUPS VARIABLES (groups) ansible.builtin.debug 0s
5│Ok localhost 5 False PRINT HOST VARIABLES (hostvars) ansible.builtin.debug 0s
In modo simile possiamo vedere il dettaglio di ciascun task:
Play name: PRINT DEBUG VARIABLES:1
Task name: PRINT MODULE VARIABLES (vars)
Ok: localhost ['-------------------------------------------------------------------------', '{', ' "a
0│--- ▒
1│duration: 0.042759
2│end: '2023-10-06T11:39:11.611558'
3│event_loop: null
4│host: localhost
5│play: PRINT DEBUG VARIABLES
6│play_pattern: all
7│playbook: /Users/dainese/src/patreon/ansible/Recipes/playbook-print_all_vars.yml
8│remote_addr: localhost
9│res:
10│ _ansible_no_log: null
11│ _ansible_verbose_always: true
12│ changed: false
13│ msg:
[...]
Replay: review di una passata esecuzione
Ad ogni esecuzione (run
), Ansible Navigator crea un file JSON chiamato artifact. Questo permette di analizzare a posteriori i dettagli dell’esecuzione di un playbook.
Possiamo ricaricare i dati di un playbook precedentemente eseguito con:
ansible-navigator --ee=false replay playbook-print_all_vars-artifact-2023-10-06T11\:39\:11.912452+00\:00.json
L’interfaccia ci presenta la stessa schermata mostrata nel paragrafo precedente. (run
).
Inventory: analisi di un inventario
L’inventario di Ansible è il punto centrale nell’esecuzione dei playbook. Molte variabili sono definite a livello di inventario, poiché, come vedremo, l’inventario può leggere parametri esterni ( Dynamic Inventory ). Ansible Navigator ci da quindi uno strumento per poter visualizzare in modo semplice la struttura di un inventario, i gruppi e le variabili definite a livello di gruppo e a livello di host:
ansible-navigator --ee=false inventory -i inventory.yml
Config: analisi della configurazione di Ansible
Ansible può essere configurato agendo su un altissimo numero di parametri. Mi è capitato di non essere certo che uno specifico parametro fosse configurato nel posto corretto e quindi venisse ignorato.
Possiamo visualizzare la configurazione di Ansible verificando i parametri configurati, il loro valore e dove possono essere configurati:
ansible-navigator --ee=false config
L’output relativo al parametro host_key_checking
è il seguente:
Host key checking (current: False) (default: True)
0│---
1│current_config_file: None
2│current_value: false
3│default: false
4│default_value: true
5│description: Set this to "False" if you want to avoid host key checking by the underlying
6│ tools Ansible uses to connect to the host
7│env:
8│- name: ANSIBLE_HOST_KEY_CHECKING
9│ini:
10│- key: host_key_checking
11│ section: defaults
12│name: Host key checking
13│option: HOST_KEY_CHECKING
14│source: env
15│type: boolean
16│via: ANSIBLE_HOST_KEY_CHECKING
Settings: analisi della configurazione di Ansible Navigator
In modo simile a quanto descritto nel paragrafo precedente, è possibile analizzare la configurazione di Ansible Navigator:
ansible-navigator --ee=false settings
Lint: formattazione di playbook e ruoli
Quando scriviamo codice, qualunque sia il linguaggio, ci troviamo difronte al problema di usare degli standard: spazi, nomi delle variabili, commenti… Linting è quel processo che in modo automatico, semi-automatico o manuale, ci permette di adeguarci ad uno standard riconosciuto.
Ansible Navigator ci permette di standardizzare i nostri playbook eseguendo la funzione di linting:
ansible-navigator --ee=false lint *yml roles
Consiglio tuttavia di accoppiare Ansible Navigator i seguenti linter:
yamllint *yml roles
yamlfmt *yml roles
ansible-lint