Ansible è una soluzione di automazione completa per il tuo ambiente IT. Puoi utilizzare Ansible per automatizzare la configurazione dei server Linux e Windows, orchestrare il provisioning dei servizi, distribuire ambienti cloud e persino configurare i dispositivi di rete.
I moduli Ansible astraggono le azioni sul tuo sistema, quindi non devi preoccuparti dei dettagli di implementazione. Descrivi semplicemente lo stato desiderato e Ansible si assicura che il sistema di destinazione lo corrisponda.
La disponibilità di questo modulo è uno dei principali vantaggi di Ansible e viene spesso definito Ansible con "batterie incluse". In effetti, puoi trovare moduli per un gran numero di attività e, sebbene sia fantastico, sento spesso dai principianti che non sanno da dove iniziare.
Sebbene la scelta dei moduli dipenda esclusivamente dalle tue esigenze e da ciò che stai cercando di automatizzare con Ansible, ecco i primi dieci moduli di cui hai bisogno per iniziare con Ansible per l'automazione dei sistemi Linux.
1. copia
Il modulo di copia consente di copiare un file dal nodo di controllo Ansible agli host di destinazione. Oltre a copiare il file, consente di impostare la proprietà, i permessi e le etichette SELinux sul file di destinazione. Ecco un esempio di utilizzo del modulo di copia per copiare un file di configurazione del "messaggio del giorno" negli host di destinazione:
- name: Ensure MOTD file is in place
copy:
src: files/motd
dest: /etc/motd
owner: root
group: root
mode: 0644
Per contenuti meno complessi, puoi copiare il contenuto direttamente nel file di destinazione senza avere un file locale, come questo:
- name: Ensure MOTD file is in place
copy:
content: "Welcome to this system."
dest: /etc/motd
owner: root
group: root
mode: 0644
Questo modulo funziona in modo idempotente, il che significa che copierà il file solo se lo stesso file non è già presente con lo stesso contenuto e autorizzazioni.
Il modulo di copia è un'ottima opzione per copiare un numero limitato di file con contenuto statico. Se devi copiare un numero elevato di file, dai un'occhiata al modulo di sincronizzazione. Per copiare file con contenuto dinamico, dai un'occhiata al template
modulo successivo.
2. modello
Il modulo modello funziona in modo simile a copy
modulo, ma elabora il contenuto in modo dinamico utilizzando il linguaggio di template Jinja2 prima di copiarlo negli host di destinazione.
Ad esempio, definisci un modello di "messaggio del giorno" che visualizzi il nome del sistema di destinazione, in questo modo:
$ vi templates/motd.j2
Welcome to {{ inventory_hostname }}.
Quindi, crea un'istanza di questo modello utilizzando il template
modulo, in questo modo:
- name: Ensure MOTD file is in place
template:
src: templates/motd.j2
dest: /etc/motd
owner: root
group: root
mode: 0644
Prima di copiare il file, Ansible elabora il modello e interpola la variabile, sostituendola con il nome del sistema host di destinazione. Ad esempio, se il nome del sistema di destinazione è rh8-vm03
, il file dei risultati è:
Welcome to rh8-vm03.
Mentre il copy
module può anche interpolare variabili quando si usa il content
parametro, il template
Il modulo consente ulteriore flessibilità creando file modello, che consentono di definire contenuti più complessi, incluso for
loop, if
condizioni e altro ancora. Per un riferimento completo, controlla la documentazione di Jinja2.
Anche questo modulo è idempotente e non copierà il file se il contenuto sul sistema di destinazione corrisponde già al contenuto del modello.
3. utente
Il modulo utente consente di creare e gestire utenti Linux nel sistema di destinazione. Questo modulo ha molti parametri diversi, ma nella sua forma più semplice puoi usarlo per creare un nuovo utente.
Ad esempio, per creare l'utente ricardo
con UID 2001, parte dei gruppi users
e wheel
e password mypassword
, applica l'user
modulo con questi parametri:
- name: Ensure user ricardo exists
user:
name: ricardo
group: users
groups: wheel
uid: 2001
password: "{{ 'mypassword' | password_hash('sha512') }}"
state: present
Nota che questo modulo cerca di essere idempotente, ma non può garantirlo per tutte le sue opzioni. Ad esempio, se si esegue nuovamente l'esempio del modulo precedente, verrà ripristinata la password al valore definito, cambiando l'utente nel sistema ad ogni esecuzione. Per rendere questo esempio idempotente, usa il parametro update_password: on_create
, assicurandoti che Ansible imposti la password solo durante la creazione dell'utente e non nelle esecuzioni successive.
Puoi anche utilizzare questo modulo per eliminare un utente impostando il parametro state: absent
.
L'user
modulo ha molte opzioni per gestire più aspetti dell'utente. Assicurati di dare un'occhiata alla documentazione del modulo per ulteriori informazioni.
4. pacchetto
Il modulo pacchetto consente di installare, aggiornare o rimuovere pacchetti software dal sistema di destinazione utilizzando il gestore di pacchetti standard del sistema operativo.
Ad esempio, per installare il server web Apache su una macchina Red Hat Linux, applica il modulo in questo modo:
- name: Ensure Apache package is installed
package:
name: httpd
state: present
Altro su Ansible
- Una guida rapida ad Ansible
- Cheat sheet di Ansible
- Corso online gratuito:Ansible essentials
- Scarica e installa Ansible
- eBook:l'impresa automatizzata
- eBook:Ansible for DevOps
- Ebook Ansible gratuiti
- Ultimi articoli Ansible
Questo modulo è indipendente dalla distribuzione e funziona utilizzando il gestore di pacchetti sottostante, come yum/dnf
per le distribuzioni basate su Red Hat e apt
per Debian. Per questo motivo, esegue solo attività di base come installare e rimuovere pacchetti. Se hai bisogno di un maggiore controllo sulle opzioni del gestore di pacchetti, usa il modulo specifico per la distribuzione di destinazione.
Inoltre, tieni presente che, anche se il modulo stesso funziona su distribuzioni diverse, il nome del pacchetto per ciascuna può essere diverso. Ad esempio, nella distribuzione basata su Red Hat, il nome del pacchetto del server Web Apache è httpd
, mentre in Debian è apache2
. Assicurati che i tuoi playbook se ne occupino.
Questo modulo è idempotente e non funzionerà se lo stato attuale del sistema corrisponde allo stato desiderato.
5. servizio
Utilizzare il modulo di servizio per gestire i servizi del sistema di destinazione utilizzando il sistema init richiesto; ad esempio, systemd.
Nella sua forma più semplice, tutto ciò che devi fare è fornire il nome del servizio e lo stato desiderato. Ad esempio, per avviare sshd
servizio, usa il modulo in questo modo:
- name: Ensure SSHD is started
service:
name: sshd
state: started
Puoi anche assicurarti che il servizio si avvii automaticamente all'avvio del sistema di destinazione fornendo il parametro enabled: yes
.
Come con il package
modulo, il service
modulo è flessibile e funziona su diverse distribuzioni. Se hai bisogno di una messa a punto del sistema di inizializzazione di destinazione specifico, usa il modulo corrispondente; ad esempio, il modulo systemd
.
Simile agli altri moduli che hai visto finora, il service
anche il modulo è idempotente.
6. firewalld
Usa il modulo firewalld per controllare il firewall di sistema con il firewalld
demone su sistemi che lo supportano, come le distribuzioni basate su Red Hat.
Ad esempio, per aprire il servizio HTTP sulla porta 80, utilizzalo in questo modo:
- name: Ensure port 80 (http) is open
firewalld:
service: http
state: enabled
permanent: yes
immediate: yes
Puoi anche specificare le porte personalizzate invece dei nomi dei servizi con il port
parametro. In questo caso, assicurati di specificare anche il protocollo. Ad esempio, per aprire la porta TCP 3000, utilizzare questo:
- name: Ensure port 3000/TCP is open
firewalld:
port: 3000/tcp
state: enabled
permanent: yes
immediate: yes
Puoi anche usare questo modulo per controllare altri firewalld
aspetti come zone o regole complesse. Assicurati di controllare la documentazione del modulo per un elenco completo di opzioni.
7. file
Il modulo file ti consente di controllare lo stato di file e directory, impostando i permessi, la proprietà e le etichette di SELinux.
Ad esempio, usa il file
modulo per creare una directory /app
di proprietà dell'utente ricardo
, con autorizzazioni di lettura, scrittura ed esecuzione per il proprietario e il gruppo users
:
- name: Ensure directory /app exists
file:
path: /app
state: directory
owner: ricardo
group: users
mode: 0770
Puoi anche usare questo modulo per impostare le proprietà dei file sulle directory in modo ricorsivo usando il parametro recurse: yes
oppure eliminare file e directory con il parametro state: absent
.
Questo modulo funziona con idempotency per la maggior parte dei suoi parametri, ma alcuni di essi possono far cambiare il percorso di destinazione ogni volta. Consulta la documentazione per maggiori dettagli.
8. fileinline
Il modulo lineinfile permette di gestire singole righe su file esistenti. È utile aggiornare la configurazione mirata sui file esistenti senza modificare il resto del file o copiare l'intero file di configurazione.
Ad esempio, aggiungi una nuova voce al tuo file hosts come questa:
- name: Ensure host rh8-vm03 in hosts file
lineinfile:
path: /etc/hosts
line: 192.168.122.236 rh8-vm03
state: present
Puoi anche utilizzare questo modulo per modificare una riga esistente applicando il parametro regexp
per cercare una linea esistente da sostituire. Ad esempio, aggiorna sshd_config
per impedire l'accesso come root modificando la riga PermitRootLogin yes
a PermitRootLogin no
:
- name: Ensure root cannot login via ssh
lineinfile:
path: /etc/ssh/sshd_config
regexp: '^PermitRootLogin'
line: PermitRootLogin no
state: present
Nota:utilizzare il modulo di servizio per riavviare il servizio SSHD per abilitare questa modifica.
Anche questo modulo è idempotente, ma, in caso di modifica della riga, assicurati che l'espressione regolare corrisponda allo stato originale e aggiornato per evitare modifiche non necessarie.
9. disarchivia
Usa il modulo unarchive per estrarre il contenuto dei file di archivio come tar
o zip
File. Per impostazione predefinita, copia il file di archivio dal nodo di controllo alla macchina di destinazione prima di estrarlo. Modifica questo comportamento fornendo il parametro remote_src: yes
.
Ad esempio, estrai il contenuto di un .tar.gz
file che è già stato scaricato nell'host di destinazione con questa sintassi:
- name: Extract contents of app.tar.gz
unarchive:
src: /tmp/app.tar.gz
dest: /app
remote_src: yes
Alcune tecnologie di archiviazione richiedono la disponibilità di pacchetti aggiuntivi sul sistema di destinazione; ad esempio, il pacchetto unzip
per estrarre .zip
file.
A seconda del formato di archivio utilizzato, questo modulo potrebbe funzionare o meno in modo idempotente. Per evitare modifiche non necessarie, puoi utilizzare il parametro creates
per specificare un file o una directory che questo modulo creerebbe durante l'estrazione del contenuto dell'archivio. Se questo file o directory esiste già, il modulo non estrae nuovamente il contenuto.
10. comando
Il modulo di comando è flessibile che consente di eseguire comandi arbitrari sul sistema di destinazione. Usando questo modulo, puoi fare quasi qualsiasi cosa sul sistema di destinazione, purché ci sia un comando per esso.
Anche se il command
modulo è flessibile e potente, dovrebbe essere usato con cautela. Evitare di utilizzare il modulo di comando per eseguire un'attività se è disponibile un altro modulo appropriato. Ad esempio, potresti creare utenti utilizzando il command
modulo per eseguire useradd
comando, ma tu dovresti usa l'user
modulo invece, poiché ti sottrae molti dettagli, occupandosi dei casi d'angolo e assicurando che la configurazione cambi solo quando necessario.
Per i casi in cui non sono disponibili moduli o per eseguire script o programmi personalizzati, il command
il modulo è ancora una grande risorsa. Ad esempio, usa questo modulo per eseguire uno script che è già presente nella macchina di destinazione:
- name: Run the app installer
command: "/app/install.sh"
Per impostazione predefinita, questo modulo non è idempotente, poiché Ansible esegue il comando ogni volta. Per eseguire il command
modulo idempotente, puoi usare when
condizioni per eseguire il comando solo se esiste la condizione appropriata o creates
argomento, in modo simile all'esempio del modulo unarchive.
Cosa c'è dopo?
Utilizzando questi moduli, puoi configurare interi sistemi Linux copiando, creando modelli o modificando file di configurazione, creando utenti, installando pacchetti, avviando servizi di sistema, aggiornando il firewall e altro ancora.
Se non conosci Ansible, assicurati di controllare la documentazione su come creare playbook per combinare questi moduli per automatizzare il tuo sistema. Alcune di queste attività richiedono l'esecuzione con privilegi elevati per funzionare. Per maggiori dettagli, controlla la documentazione sull'escalation dei privilegi.
A partire da Ansible 2.10, i moduli sono organizzati in raccolte. La maggior parte dei moduli in questo elenco fa parte di ansible.builtin
raccolta e sono disponibili per impostazione predefinita con Ansible, ma alcuni di essi fanno parte di altre raccolte. Per un elenco delle raccolte, controlla la documentazione di Ansible.