Automatizza il tuo stack IT con Ansible
L’automazione delle operazioni IT è diventata una priorità sempre più importante per le organizzazioni. In questo articolo, esploreremo le funzionalità di Ansible e come può aiutare a semplificare la gestione dei sistemi IT o di un semplice homelab casalingo.
Cosa è Ansible
Ansible è uno strumento di automazione IT open source che consente di automatizzare le operazioni di configurazione, gestione e distribuzione dei sistemi IT. Basato su Python e utilizza una sintassi YAML per definire le configurazioni dei sistemi. Ansible utilizza un approccio “agentless” che significa che non è necessario installare alcun software aggiuntivo sui nodi di destinazione. (Utile anche per automatizzare processi su appliance dove non è possibile magari installare alcun componente esterno es. su router, switch etc.)
Come funziona Ansible
Funziona utilizzando un’architettura client-server. Il server Ansible è chiamato “control node” e il client è chiamato “managed node”. Il control node esegue i playbook, dove vengono definite le operazioni che devono essere eseguite sui managed node. Utilizza un sistema di inventario per definire i nodi gestiti e i gruppi di nodi. Utilizza anche dei moduli che eseguono le operazioni specifiche sui nodi gestiti.
Inventories
Un inventory è un elenco di managed node su cui Ansible eseguirà le operazioni di automazione. Gli inventory possono essere specificati in un file di testo o in un database dinamico. Gli inventory possono anche essere organizzati in gruppi, ad esempio per tipo di server o per località geografica.
Playbooks
I playbook sono file di testo che contengono un insieme di attività e configurazioni da eseguire sui managed node. Le attività sono eseguite in ordine, e Ansible si assicura che lo stato desiderato sia raggiunto su ogni managed node.
Moduli
I moduli sono script Python che eseguono le attività di automazione su un managed node. Ansible include molti moduli predefiniti, come ad esempio il modulo di copia dei file o il modulo di installazione dei pacchetti. È anche possibile scrivere moduli personalizzati per estendere le funzionalità di Ansible.
Come utilizzare Ansible
Per utilizzarlo, è necessario definire gli inventory degli host e i playbook che eseguiranno le operazioni sui nodi. Una volta definiti, i playbook possono essere eseguiti sul control node utilizzando il comando ansible-playbook
. Ansible offre anche un’interfaccia grafica utente chiamata Ansible Tower
che può semplificare la definizione degli inventory e dei playbook.
Installazione
Può essere installato su una vasta gamma di sistemi operativi, tra cui Linux, macOS e Windows. La documentazione ufficiale di Ansible fornisce istruzioni dettagliate sull’installazione per ogni piattaforma.
Utilizzo degli inventory
Gli inventory sono specificati in un file di testo che può essere creato manualmente o generato dinamicamente. Ad esempio, il seguente inventory specifica un singolo managed node:
1
2
[hosts]
192.168.1.100
È possibile specificare più gruppi di managed node utilizzando la stessa sintassi. Ad esempio, il seguente inventory specifica due gruppi di managed node, webserver e database:
1
2
3
4
5
[hosts]
192.168.1.100
[database]
192.168.1.200
Ecco esempi di playbook che si può utilizzare per automatizzare delle operazioni abbastanza comuni nella gestione di un server:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- name: Aggiornamento dei pacchetti su hosts
hosts: all
become: true
tasks:
- name: Aggiornamento dei pacchetti
apt:
upgrade: 'yes'
update_cache: 'yes'
register: update_result
- name: Verifica dell'aggiornamento dei pacchetti su hosts
hosts: all
tasks:
- name: Verifica dell'aggiornamento dei pacchetti
assert:
that:
- "'0' == "
fail_msg: "L'aggiornamento dei pacchetti non è stato completato correttamente."
when: update_result is defined and update_result.rc == 0
Questo playbook esegue l’aggiornamento dei pacchetti sulle macchine e poi verifica che l’aggiornamento sia stato eseguito correttamente utilizzando il modulo assert
di Ansible. Utilizza il gestore dei pacchetti APT
per aggiornare i pacchetti sulle macchine e registra il risultato dell’aggiornamento in una variabile chiamata update_result
. In seguito, esegue una verifica utilizzando il modulo assert. verifica che l’aggiornamento dei pacchetti abbia avuto successo confrontando il primo elemento della variabile stdout_lines
con il valore 0.
Per utilizzare questo playbook, salva il codice in un file con estensione .yml (ad esempio update.yml
) e poi esegui il playbook utilizzando il comando ansible-playbook update.yml
.
Esempi di Playbook
Di seguito mostrerò alcuni casi comuni di automazioni che è possibile effettuare con un semplice playbook ad esempio creare un nuovo utente sulle macchine specificate:
Creazione user
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- name: Creare un nuovo user
hosts: all
become: true
vars:
username: newuser
password: password
tasks:
- name: Aggiunta user
user:
name: ""
password: ""
state: present
notify:
- restart sshd
handlers:
- name: restart sshd
service:
name: sshd
state: restarted
Installazione pacchetto specifico
oppure installare un pacchetto specifico (nel nostro esempio nginx) su determinate macchine:
1
2
3
4
5
6
7
8
9
10
11
12
- name: Installazione di un pacchetto
hosts: all
become: true
vars:
package_name: nginx
tasks:
- name: Installazione pacchetto
apt:
name: ""
state: present
Copiare un file
copiare un file specifico su tutte le macchine specificate nell’inventory hosts:
:
1
2
3
4
5
6
7
8
9
10
11
12
13
- name: Copiare un file
hosts: all
become: true
vars:
source_file: /path/to/source_file
destination_file: /path/to/destination_file
tasks:
- name: Copia del file
copy:
src: ""
dest: ""
Esecuzione comando
poter eseguire un comando specifico:
1
2
3
4
5
6
7
8
9
10
- name: Esecuzione di un comando
hosts: all
become: true
vars:
command: ls -la
tasks:
- name: Esecuzione del comando
shell: ""
Questi sono solo alcuni esempi di playbook per operazioni comuni su un server. È possibile automatizzare molte altre operazioni, come la gestione dei servizi, la configurazione del firewall, la gestione dei certificati SSL, e molto altro ancora.
Conclusione
Ansible è uno strumento di automazione IT potente ed estremamente flessibile. Consente di semplificare la gestione dei sistemi IT e di automatizzare le operazioni di configurazione, gestione e distribuzione dei sistemi. Facile da utilizzare e consente anche di gestire in modo trasparente determinate configurazioni oltre ad offrire una vasta gamma di funzionalità che lo rendono uno strumento ideale per le organizzazioni di qualsiasi dimensione. Se stai cercando di automatizzare le operazioni IT, Ansible è sicuramente uno strumento da considerare.