GNU/Linux >> Linux Esercitazione >  >> Linux

10 moduli Ansible per l'automazione del sistema Linux

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.


Linux
  1. Come utilizzo Ansible e anacron per l'automazione

  2. 8 suggerimenti per un'automazione affidabile del sistema Linux

  3. 3 passaggi per identificare i candidati all'automazione del sistema Linux

  4. 3 utili comandi Linux per gli amministratori di sistema

  5. Lo sviluppo/test di un modulo Linux è sicuro utilizzando una macchina virtuale?

Guida rapida ad Ansible per amministratori di sistema Linux

I 15 migliori emulatori Linux per sistemi Windows

I 20 migliori strumenti di bioinformatica per il sistema Linux

I 10 migliori software di geometria per sistemi Linux

I 15 migliori strumenti di biologia per il sistema Linux

15 migliori software di editing video per sistema Linux