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:
- Gestione di pacchetti software e repository in Ansible
- Gestione dei servizi tramite Ansible
- Gestire il firewall con Ansible
- Archiviazione di file o cartelle con Ansible
- Pianifica attività con Ansible
- Gestisci utenti e gruppi con Ansible
- Crea file e directory con Ansible
- Gestire lo spazio di archiviazione con Ansible
- 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.