Capitolo 4 – Inventory: Struttura e Gestione Professionale
L’inventory è il punto di partenza di qualsiasi operazione con Ansible.
Definisce:
- Quali host devono essere gestiti
- Come connettersi agli host
- Come raggrupparli logicamente
- Quali variabili applicare
Una gestione corretta dell’inventory è fondamentale in ambienti sysadmin.
4.1 Inventory Statico (Formato INI)
È il formato più semplice e immediato.
Esempio file inventory/production:
[web]
web01 ansible_host=192.168.10.10
web02 ansible_host=192.168.10.11
[db]
db01 ansible_host=192.168.10.20
[all:vars]
ansible_user=ansible
ansible_python_interpreter=/usr/bin/python3
Spiegazione
[web]→ gruppo logico di serverweb01→ alias hostansible_host→ IP reale o FQDN[all:vars]→ variabili applicate a tutti gli host
Test di connettività:
ansible all -m ping
4.2 Parametri Host Specifici
È possibile definire parametri direttamente sull’host:
web01 ansible_host=192.168.10.10 ansible_port=2222 ansible_user=deploy
Parametri comuni:
- ansible_host
- ansible_user
- ansible_port
- ansible_ssh_private_key_file
- ansible_python_interpreter
Questo permette di gestire ambienti eterogenei.
4.3 Inventory in YAML
Alternativa più leggibile in ambienti complessi.
Esempio:
all:
vars:
ansible_user: ansible
ansible_python_interpreter: /usr/bin/python3
children:
web:
hosts:
web01:
ansible_host: 192.168.10.10
web02:
ansible_host: 192.168.10.11
db:
hosts:
db01:
ansible_host: 192.168.10.20
Vantaggi:
- Struttura gerarchica chiara
- Migliore gestione di ambienti complessi
- Più coerente con il resto dell’ecosistema YAML di Ansible
4.4 Gruppi e Sottogruppi
È possibile creare gruppi annidati.
Esempio:
[web]
web01
web02
[frontend]
web01
[backend]
web02
[production:children]
web
db
Questo permette di:
- Applicare playbook a gruppi specifici
- Creare logiche di infrastruttura multilivello
Esempio esecuzione su gruppo specifico:
ansible web -m command -a "uptime"
4.5 File group_vars e host_vars
Separare le variabili dall’inventory è una best practice.
Struttura:
group_vars/
├── web.yml
├── db.yml
host_vars/
├── web01.yml
Esempio group_vars/web.yml:
http_port: 80
max_clients: 200
Esempio host_vars/web01.yml:
http_port: 8080
Regola importante:
Le variabili host specifiche hanno priorità su quelle di gruppo.
4.6 Separazione Ambienti
Non utilizzare mai un unico inventory per tutto.
Struttura consigliata:
inventory/
├── production
├── staging
└── dev
Esecuzione su ambiente specifico:
ansible-playbook -i inventory/staging playbooks/site.yml
Questo evita errori critici su produzione.
4.7 Best Practice Sysadmin
- Non inserire password in chiaro nell’inventory
- Utilizzare ansible-vault per credenziali
- Separare ambienti in file distinti
- Usare alias host leggibili
- Definire sempre ansible_python_interpreter
- Versionare l’inventory con Git (con attenzione ai segreti)
4.8 Verifica Inventory
Comandi utili:
Visualizzare host:
ansible-inventory -i inventory/production --list
Visualizzare struttura grafica:
ansible-inventory -i inventory/production --graph
Questi strumenti aiutano nel troubleshooting.
Conclusione
L’inventory non è solo un elenco di server.
È la rappresentazione logica della tua infrastruttura.
Una progettazione corretta permette:
- Scalabilità
- Chiarezza operativa
- Riduzione errori
- Maggiore controllo sugli ambienti
Nel prossimo capitolo entreremo nei Comandi Ad-Hoc e nell’operatività quotidiana da sysadmin.
No comments to display
No comments to display