Ricerca nel sito web

Come utilizzare i moduli Ansible per le attività di amministrazione del sistema - Parte 6


In questa Parte 6 della serie Ansible, abbiamo trattato alcuni moduli Ansible negli argomenti precedenti, ora andremo più in profondità e scopriremo moduli aggiuntivi utili per eseguire una serie di attività di amministrazione del sistema.

Avrai un'idea di base di ciascun modulo e esaminerai le opzioni disponibili per eseguire determinate attività.

Su questa pagina:
  1. Gestione di pacchetti software e repository in Ansible
  2. Gestione dei servizi tramite Ansible
  3. Gestire il firewall con Ansible
  4. Archiviazione di file o cartelle con Ansible
  5. Pianifica attività con Ansible
  6. Gestisci utenti e gruppi con Ansible
  7. Crea file e directory con Ansible
  8. Gestire lo spazio di archiviazione con Ansible
  9. Gestire i file system con Ansible

1. Gestione di pacchetti software e repository in Ansible

Quando si installano pacchetti su sistemi Linux, diverse distribuzioni vengono fornite con gestori di pacchetti diversi. Per le distribuzioni RedHat abbiamo yum e dnf mentre per le versioni Debian c'è apt.

Ansible viene fornito con un modulo chiamato pacchetto, che elimina la necessità di utilizzare gestori di pacchetti diversi per sistemi diversi. Utilizza automaticamente il corrispondente gestore pacchetti del sistema host, facilitando così il lavoro.

Installa pacchetti software

Ad esempio, per installare htop in un gruppo di host comprendente sia le distribuzioni Debian che RedHat, utilizzare il modulo pacchetto come mostrato nel playbook install_htop.yml di seguito.

---
- name: Install htop on Ubuntu and CentOS
  hosts: all
  tasks:

- package:
         name: htop
         state: installed

NOTA: i nomi dei pacchetti possono differire da un sistema operativo all'altro. Ad esempio, abbiamo httpd nelle distribuzioni Redhat e Apache2 per i sistemi Debian/Ubuntu, che denotano tutti la versione Apache server web. Pertanto, è necessario prestare particolare attenzione quando si passano questi pacchetti. Di solito, è meglio utilizzare variabili o istruzioni condizionali.

2. Gestione dei servizi utilizzando Ansible

Successivamente abbiamo un modulo servizio, che viene utilizzato per gestire i servizi sui sistemi Linux. Viene utilizzato per avviare, interrompere o riavviare un servizio. Puoi anche usarlo per abilitare un servizio in modo che all'avvio di un sistema, avvii automaticamente il servizio.

Avvia e abilita un servizio

Ad esempio, per avviare e abilitare il server web Apache su RHEL 8, utilizza il servizio come mostrato.

---
- name: Start and enable httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: started
	    enabled: yes

Arresta un servizio

Per interrompere il servizio httpd, passa l'attributo stopped.

---
- name: Stop httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: stopped

Riavviare un servizio

Per riavviare il servizio httpd, passa l'attributo restarted.

---
- name: Restart httpd service
  hosts: webservers
  tasks:

- service:
         name: httpd
         state: restarted

3. Gestione del firewall con Ansible

Un altro compito importante svolto dagli amministratori di sistema è la gestione del firewall. Nei playbook Ansible, questo è stato reso molto più semplice con i moduli firewalld e ufw. È possibile configurare il firewall per consentire o bloccare una porta, un servizio o anche un indirizzo di origine.

Facciamo un salto e diamo un'occhiata ad alcuni esempi:

Apri/blocca la porta 80 nel firewalld

---
- name: Allow port 80 
  hosts: webservers
  tasks: 
   
   -firewalld:
	port: 80/tcp
     permanent: yes
     state: enabled

Nella guida qui sopra, la porta 80 è consentita attraverso il firewall.

L'opzione permanent: yes applica la regola del firewall e la rende persistente dopo i riavvii. Tuttavia, questa regola non si applica immediatamente. Entra in vigore solo dopo un riavvio. Per applicare immediatamente la regola, utilizza l'opzione immediato: sì.

Per specificare gli indirizzi consentiti, utilizzare l'istruzione source:0.0.0.0/0.

- firewalld:
    source: 192.168.0.0/24
    zone: public
    state: enabled

Per specificare un intervallo di porte a cui consentire di utilizzare l'opzione porta come segue:

- firewalld:
    port: 213-567/udp
    permanent: yes
    state: enabled

Per bloccare la porta, modifica l'opzione di stato su disabilitata come mostrato:

-firewalld:
	port: 80/tcp
     permanent: yes
     state: disabled

Aggiungi/Blocca un servizio in firewalld

Oltre ad aggiungere/bloccare una porta, puoi anche applicare le stesse regole a un servizio. Ed è abbastanza semplice. Basta utilizzare il modulo servizio e aggiungere il servizio da aggiungere e assicurarsi che l'opzione dello stato sia impostata su abilitato.

- firewalld:
    service: https
    permanent: true
    state: enabled

Per bloccare il servizio imposta l'opzione stato su disabilitato.

- firewalld:
    service: https
    permanent: true
    state: disabled

4. Archiviazione di file o cartelle con Ansible

L'archiviazione si riferisce alla compressione di un file o di una cartella in un formato facilmente trasportabile e di dimensioni più ridotte. Ansible viene fornito con un modulo chiamato archivio. Comprimere un file è facilissimo. Tutto ciò che serve è specificare il percorso di origine del file e la destinazione del file compresso.

Comprimere una directory

Prendi in considerazione il playbook compress.yml riportato di seguito.

---
- hosts: webservers
  tasks:

    • name: Compress a folder
archive:
        path: /opt/data/web
        dest: /tmp/web.gz

Il playbook riportato sopra comprime la directory /opt/data/web e la salva in /tmp/web.gz.

Comprimi una directory con Format

Il formato di compressione predefinito è .gz, tuttavia è possibile specificarlo utilizzando l'attributo format. Prova il prossimo Playbook.

---
- hosts: webservers
  Tasks:

  - name: Create a zip archive 
    archive:
     path: /opt/data/web
     dest: /tmp/web
     format: zip

Il playbook qui sopra comprime la directory /opt/data/web in /tmp/web.zip.

Decomprimere un file

Puoi anche decomprimere un file compresso utilizzando l'attributo unarchive. Considera il playbook qui sotto.

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.gz to/opt directory  on Ansible controller
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/

Il playbook sopra decomprime il file /opt/data/web.gz in /opt sul controller Ansible.

Decomprimere un file sul nodo remoto

Per specificare il sistema di origine remoto utilizzare l'opzione remote_src=yes.

---
- hosts: webservers
  tasks:

 - name:Uncompress /tmp/web.bz2 to/opt on remote host
   unarchive:
     src: /tmp/web.bz2
     dest: /opt/
     remote_src=yes 

Il playbook qui sopra decomprime il file /tmp/web.bz2 sul nodo remoto nella directory /opt/.

5. Pianifica attività con Ansible

Il modulo cron aiuta a pianificare i lavori in Ansible Playbooks.

Crea un'attività pianificata

Considera il playbook qui sotto.

---
- hosts: webservers
  tasks:

 - name: Create a scheduled task
   cron:
     name: Run employee attendance
     job: sh /opt/scripts/attendace.sh
      
     month: 4
     day: 5
     hour: 17
     minute: 00

Il playbook esegue il copione delle presenze il 5 aprile alle 17:00.

Pianifica uno script in una data specifica

Se desideri pianificare l'esecuzione di questo script solo se il 5 aprile è un lunedì, utilizza l'attributo weekday: 1. 0 indica domenica e 6 indica sabato secondo la notazione cron.

month: 4
day: 5
hour: 17
minute: 00
weekday: 1

Un asterisco (*) in uno qualsiasi di questi campi indica qualsiasi valore.

Esegui un lavoro in una data

Per eseguire il lavoro il 5 aprile alle 17:00, indipendentemente dal giorno della settimana, utilizzare i parametri temporali come mostrato.

month: 4
day: 5
hour: 17
minute: 00
weekday: *

Esegui un lavoro in un giorno specifico ogni mese

Per eseguire il processo cron il 5° giorno di ogni mese alle 17:00, utilizzare le impostazioni seguenti.

month: *
day: 5
hour: 17
minute: 00
weekday: *

Esegui un lavoro ogni giorno

Per eseguire il lavoro cron ogni giorno alle 17:00, imposta le impostazioni dell'ora come mostrato:

month: *
day: *
hour: 17
minute: 00
weekday: *

Esegui un lavoro ogni 5 ore

Per eseguire il processo cron ogni 5 ore, utilizzare il valore del passo */5 come mostrato.

month: *
day: *
hour: */5
minute: *
weekday: *

6. Gestisci utenti e gruppi con Ansible

Puoi anche gestire utenti e gruppi all'interno dei playbook Ansible senza alcuno sforzo.

Crea un nuovo utente

Per creare un nuovo utente, utilizza il modulo utente come mostrato.

---
- hosts: webservers
  tasks:

 - name: Create a new user
   user: 
     name: Jack

Puoi anche aggiungere ulteriori opzioni come UID, gruppi.

- name: Create a new user
   user: 
      name: Jack
      comment: Jack Peters
          uid:   1002
      group: administrators
      shell:  /bin/bash

Rimuovere un utente

Per rimuovere l'utente, utilizzare l'istruzione remove: yes.

- name: Remove the user 'Jack'
  user:
    name: Jack
    state: absent
    remove: yes

Crea un nuovo gruppo

Per creare un nuovo gruppo, utilizza il modulo gruppo.

- name: Create a group
  group:
    name: developers

7. Crea file e directory con Ansible

Per creare file di directory, utilizza il modulo file.

Crea una nuova directory

Ad esempio, per creare una nuova directory.

---
- hosts: webservers
  tasks:

  - name: Create a new directory
    file: 
     path: /opt/app
     state: directory

Puoi aggiungere altri attributi come proprietario, gruppo e autorizzazioni sui file.

- hosts: webservers
  tasks:

  - name: Create a new directory
    file: 
     path: /opt/web
     state: directory
     owner: www-data
     group: www-data
     mode: 0644

Inoltre, puoi creare directory in modo ricorsivo utilizzando l'istruzione recurse: yes.

---
- hosts: webservers
  tasks:

  - name: Create directories recursively
    file: 
     path: /opt/web/app
     state: directory
     owner: www-data
     group: www-data
     mode: 0644
recurse: yes

Crea un file

Per creare un file, utilizza l'opzione state: touch.

---
- hosts: webservers
  tasks:

  - name: Create a new file
    file: 
     path: /opt/web/index.html
     state: touch
owner: www-data
     group: www-data
     mode: 0644

8. Gestione dello spazio di archiviazione con Ansible

Il modulo lvg viene utilizzato per configurare volumi e gruppi LVM.

Crea un gruppo di volumi LVM

Considera il playbook di seguito:

---
- hosts: webservers
  tasks: 
    • name: Create lVM volume group
lvg: 
 vg: vg1
 pvs: /dev/sda1
 pesize: 32

Ciò crea un gruppo di volumi sopra la partizione /dev/sda1 con una dimensione fisica di 32 MB.

Una volta creato, utilizza il modulo lvol per creare un volume logico come mostrato

Creare un volume logico

---
    - hosts: webservers
      tasks: 

       - name: Create lVM volume
    lvol: 
    vg: vg1
    lv: lvol1
    pvs: /dev/sda1

9. Gestione dei file system con Ansible

Per creare un file system su un dispositivo a blocchi, utilizza il modulo filesystem.

Creare un file system

Il playbook seguente crea il tipo di file system xfs sul volume del blocco.

---
    - hosts: webservers
      tasks: 

       - name: Create a filesystem
         filesystem:
         
           fstype: xfs
           dev: /dev/vg1/lvol1

Montare un filesystem

Successivamente puoi procedere al montaggio del volume del blocco utilizzando il modulo mount come mostrato nel playbook di seguito:

---
    - hosts: webservers
      tasks: 

       - name: Mount a filesystem
         mount:
         
           fstype: xfs
           src: /dev/vg1/lvol1
           path: /opt/web
           state: mounted
Conclusione

Questo conclude l'argomento. Abbiamo trattato varie attività di amministrazione del sistema che possono essere eseguite da specifici moduli integrati in Ansible Playbooks.