Ansible è uno strumento di automazione ampiamente utilizzato che può gestire centinaia di nodi in una sola operazione. Ansible ha molte caratteristiche eccellenti, e una di esse è la sua capacità di gestire una singola linea all’interno di un file su nodi remoti utilizzando il modulo lineinfile di Ansible.
Il modulo lineinfile di Ansible è un modulo che esegue varie azioni su una singola linea in un file, come la sostituzione di una linea, l’aggiornamento di una linea o l’aggiunta di una particolare linea.
In questo tutorial, imparerai cos’è il modulo lineinfile di Ansible, come funziona e come usarlo per gestire file di testo.
Prerequisiti
Questo post sarà un tutorial passo dopo passo sul modulo lineinfile di Ansible. Se desideri seguirci, assicurati di avere quanto segue:
- Un host controller Ansible – Questo tutorial utilizzerà Ansible v2.9.24 su una macchina Ubuntu 18.04.5 LTS.
- A remote computer to run commands. You’ll need an inventory file set up and one or more hosts already configured to run Ansible command and playbooks on. The remote Linux computer will be called myserver, and the tutorial will use an inventory group called web.
- Apache dovrebbe già essere installato sul computer remoto se vuoi seguire il tutorial esattamente.
Modificare un file di testo con il modulo lineinfile di Ansible.
Cominciamo questo tutorial eseguendo il modulo lineinfile di Ansible utilizzando i comandi ad hoc. I comandi ad hoc sono un modo rapido per testare o eseguire un singolo comando su un host remoto.
Accedi al tuo controller Ansible ed esegui il seguente comando. Questo comando utilizza il modulo lineinfile (-m
) per connettersi alla macchina web e passare un argomento (-a
) che è il comando da eseguire.
In questo caso, il modulo lineinfile aggiorna l’entry localhost mappando l’indirizzo IP 127.0.0.1
con myapache
nel file /etc/hosts. Mappando il 127.0.0.1
con myapache
ti permette di navigare localmente sulla pagina di test di Apache su HTTP://myapache:80
path
indica la posizione del file.regexp
trova l’espressione regolare, se presente, nel file e aggiorna con127.0.0.1 myapache
specificato nel parametroline
.- –diventa flag ti permette di eseguire il comando come utente privilegiato.
- Il
web
è il gruppo di inventario che è una collezione di tutti i server. ansible.builtin.lineinfile
o semplicemente lineinfile è il nome del modulo.
Dopo aver eseguito il comando, dovresti vedere un messaggio CAMBIATO che conferma che la riga è stata aggiornata con successo sull’host remoto.

Accedi al nodo remoto utilizzando un client SSH e verifica se il file /etc/hosts è stato aggiornato con il nuovo valore utilizzando il comando cat
.
Come puoi vedere di seguito, l’entry di localhost è stata aggiornata con successo con 127.0.0.1 myapache
sulla macchina remota.

Modificare più file di testo all’interno di un playbook
Lavorare con un singolo comando ad hoc per gestire le righe su una macchina remota può andare bene, ma sarà difficile se hai righe in più file o più righe in un file da gestire. Invece di utilizzare comandi ad hoc, considera l’utilizzo del modulo lineinfile di Ansible all’interno del playbook utilizzando il comando ansible-playbook.
Ora, impariamo come utilizzare il modulo lineinfile di Ansible all’interno del playbook e modificare alcune righe.
Assumendo che tu sia già connesso all’host del controller di Ansible:
1. Crea una directory chiamata ansible_lineinfile_module_demo nella tua directory home. Questa directory conterrà il playbook che utilizzerai per invocare il modulo lineinfile.
2. Crea un altro file chiamato my_playbook.yml nella directory ~/ansible_lineinfile_module_demo e incolla il seguente contenuto del playbook YAML. Questo playbook ha più task che utilizzano il modulo Ansible lineinfile
per gestire le righe di diversi file di configurazione per Apache sulla macchina remota.
Il playbook qui di seguito contiene i seguenti task:
1. Verifica se ADMIN
è presente nel file /etc/sudoers; se non lo trova, il task lo aggiunge.
2. Assicura che l’Apache predefinito stia ascoltando sulla porta 8080 nel file /etc/apache2/ports.conf; se trova un’altra riga di porta, il modulo lineinfile la aggiorna alla porta 8080
. Allo stesso modo, nel file /etc/apache2/apache2.conf, aggiorna MaxKeepAliveRequests
a 1000 e KeepAliveTimeout
a 100.
3. Aggiunge la riga con il testo “Hello This is my Apache Page” alla fine della pagina index.html
sul server remoto nella directory /var/www/html.
I playbook di Ansible sono scritti in formato YAML. Per saperne di più su YAML, clicca qui
3. Ora, invoca il playbook ed esegui i compiti utilizzando il comando ansible-playbook
per aggiungere o aggiornare tutte le righe definite nel playbook sull’host remoto.

Di seguito, puoi vedere che il TASK ha uno stato di changed, il che significa che l’host remoto non era nello stato corretto e è stato modificato per eseguire il comando. Per quel TASK che ha lo stato OK, indica che non richiede modifiche.
4. Successivamente, effettua l’accesso SSH all’host remoto utilizzando il tuo client SSH preferito.
5. Infine, verifica se tutte le righe definite nel my_playbook.yml sono state aggiornate o aggiunte sull’host remoto utilizzando il comando cat
.
Lo screenshot sottostante conferma che l’admin
è già stato aggiunto nel file sudoers.

Ancora una volta, lo screenshot sottostante conferma che Apache è in ascolto sulla Porta 8080
per impostazione predefinita.

Infine, verifica se MaxKeepAliveRequests
e KeepAliveTimeout
sono stati aggiornati rispettivamente a 1000 e 100.

MaxKeepAliveRequests
and KeepAliveTimeout
in the config file Conclusioni
Il modulo lineinfile di Ansible è un ottimo modo per modificare file di testo su host remoti. Il modulo fornisce un ottimo modo per aggiungere, rimuovere e modificare righe in file di testo all’interno dei tuoi playbook.
Quali altri casi d’uso ritieni possano beneficiare dal modulo lineinfile di Ansible?