Com utilitzar els mòduls Ansible per a tasques d'administració del sistema - Part 6


En aquesta part 6 d'alguns mòduls d'Ansible dels temes anteriors, ara aprofundirem i descobrirem mòduls addicionals que són útils per dur a terme una sèrie de tasques d'administració del sistema.

Tindreu una idea bàsica de cada mòdul i veureu les opcions disponibles per realitzar determinades tasques.

  1. Gestió de paquets de programari i repositoris a Ansible
  2. Gestió de serveis mitjançant Ansible
  3. Gestió del tallafoc amb Ansible
  4. Arxivant fitxers o carpetes amb Ansible
  5. Programar tasques amb Ansible
  6. Gestiona usuaris i grups amb Ansible
  7. Creeu fitxers i directoris amb Ansible
  8. Gestió de l'emmagatzematge amb Ansible
  9. Gestió de sistemes de fitxers amb Ansible

Quan instal·leu paquets en sistemes Linux, les diferents distribucions vénen amb diferents gestors de paquets. Per a les distribucions de RedHat, tenim apt.

Ansible inclou un mòdul anomenat package, que elimina la necessitat d'utilitzar diferents gestors de paquets per a diferents sistemes. Utilitza automàticament el gestor de paquets corresponent del sistema amfitrió, facilitant així la feina.

Per exemple, per instal·lar htop en un grup d'amfitrions que incloguin les distribucions de Debian i RedHat, utilitzeu el mòdul de paquets tal com es mostra al manual install_htop.yml a continuació.

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

- package:
         name: htop
         state: installed

NOTA: Els noms dels paquets poden diferir d'un sistema operatiu a un altre. Per exemple, tenim httpd a les distribucions Redhat i Apache2 per als sistemes Debian/Ubuntu, tots els quals denoten el servidor web Apache. Per tant, s'ha de tenir molta precaució en passar aquests paquets. Normalment, el millor és utilitzar variables o declaracions condicionals.

A continuació, tenim un mòdul de serveis, que s'utilitza per gestionar serveis en sistemes Linux. S'utilitza per iniciar, aturar o reiniciar un servei. També podeu utilitzar-lo per habilitar un servei de manera que quan s'iniciï un sistema, s'iniciï automàticament.

Per exemple, per iniciar i habilitar el servidor web Apache a RHEL 8, utilitzeu el servei tal com es mostra.

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

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

Per aturar el servei httpd, passeu l'atribut stopped.

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

- service:
         name: httpd
         state: stopped

Per reiniciar el servei httpd, passeu l'atribut reiniciat.

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

- service:
         name: httpd
         state: restarted

Una altra tasca important que duen a terme els administradors del sistema és la gestió del tallafoc. Als llibres de jugades d'Ansible, això s'ha fet molt més fàcil amb els mòduls firewalld i ufw. Podeu configurar el tallafoc per permetre o bloquejar un port o servei o fins i tot una adreça d'origen.

Entrem i donem un cop d'ull a alguns exemples:

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

Al llibre de jugades anterior, el port 80 està permès a través del tallafoc.

L'opció permanent: sí fa complir la regla del tallafoc i la fa persistent durant els reinicis. Tanmateix, aquesta regla no s'aplica immediatament. Només entra en vigor després d'un reinici. Per fer complir la regla immediatament, utilitzeu l'opció immediat: yes.

Per especificar les adreces permeses, utilitzeu la instrucció source:0.0.0.0/0.

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

Per especificar un rang de ports als quals es permetrà utilitzar l'opció de port de la manera següent:

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

Per bloquejar el port, canvieu l'opció d'estat a desactivat com es mostra:

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

A part d'afegir/bloquejar un port, també podeu aplicar les mateixes regles a un servei. I és ben senzill. Només cal que utilitzeu el mòdul de servei i afegiu el servei que voleu afegir i assegureu-vos que l'opció d'estat estigui activada.

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

Per bloquejar el servei, configureu l'opció d'estat com a desactivada.

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

Arxivar es refereix a la compressió d'un fitxer o carpeta a un format que sigui fàcilment portàtil i de mida més petita. Ansible s'envia amb un mòdul anomenat arxiu. Comprimir un fitxer és tan fàcil com es fa. Tot el que cal és especificar la ruta d'origen del fitxer i la destinació del fitxer comprimit.

Penseu en un llibre de jocs compress.yml a continuació.

---
- hosts: webservers
  tasks:

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

El llibre de jocs anterior comprimeix el directori /opt/data/web i el desa a /tmp/web.gz.

El format de compressió per defecte és .gz, però, això es pot especificar mitjançant l'atribut format. Fes una mostra del següent llibre de jugades.

---
- hosts: webservers
  Tasks:

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

El llibre de jugades anterior comprimeix el directori /opt/data/web a /tmp/web.zip.

També podeu descomprimir un fitxer comprimit mitjançant l'atribut unarchive. Considereu el llibre de jugades a continuació.

---
- hosts: webservers
  tasks:

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

El llibre de jugades anterior descomprimeix el fitxer /opt/data/web.gz a /opt al controlador Ansible.

Per especificar el sistema font remot, utilitzeu l'opció 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 

El llibre de jugades anterior descomprimeix el fitxer /tmp/web.bz2 del node remot al directori /opt/.

El mòdul cron ajuda a programar treballs a Ansible Playbooks.

Considereu el llibre de jugades a continuació.

---
- 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

El llibre de jocs executa el guió d'assistència el 5 d'abril a les 17:00.

Si voleu programar aquest script perquè s'executi només si el dia 5 d'abril és dilluns, feu servir l'atribut dia laborable: 1. 0 indica diumenge i 6 indica dissabte segons la notació cron.

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

Un asterisc (*) en qualsevol d'aquests camps indica qualsevol valor.

Per executar la tasca el 5 d'abril a les 17:00, sigui quin sigui el dia laborable, utilitzeu els paràmetres d'hora tal com es mostra.

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

Per executar el treball cron el 5è dia de cada mes a les 17:00, utilitzeu la configuració següent.

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

Per executar el treball cron diàriament a les 5:00 pm, configureu la configuració de l'hora tal com es mostra:

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

Per executar el treball cron cada 5 hores, utilitzeu el valor del pas */5 tal com es mostra.

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

També podeu gestionar usuaris i grups dins dels llibres de jugades d'Ansible sense esforç.

Per crear un usuari nou, utilitzeu el mòdul d'usuari tal com es mostra.

---
- hosts: webservers
  tasks:

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

També podeu afegir opcions addicionals com ara UID, grups.

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

Per eliminar l'usuari, utilitzeu la instrucció remove: yes.

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

Per crear un grup nou, utilitzeu el mòdul de grup.

- name: Create a group
  group:
    name: developers

Per crear fitxers de directoris, utilitzeu el mòdul de fitxers.

Per exemple, per crear un directori nou.

---
- hosts: webservers
  tasks:

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

Podeu afegir altres atributs com ara permisos de propietari, grup i fitxer.

- hosts: webservers
  tasks:

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

A més, podeu crear directoris de manera recursiva utilitzant la instrucció 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

Per crear un fitxer, utilitzeu l'opció estat: toc.

---
- hosts: webservers
  tasks:

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

El mòdul lvg s'utilitza per configurar volums i grups LVM.

Considereu el llibre de jugades següent:

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

Això crea un grup de volums a la part superior de la partició /dev/sda1 amb una mida d'extensió física de 32 MB.

Un cop creat, utilitzeu el mòdul lvol per crear un volum lògic tal com es mostra

---
    - hosts: webservers
      tasks: 

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

Per crear un sistema de fitxers en un dispositiu de blocs, utilitzeu el mòdul del sistema de fitxers.

El llibre de jocs següent crea el tipus de sistema de fitxers xfs al volum del bloc.

---
    - hosts: webservers
      tasks: 

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

A continuació, podeu procedir a muntar el volum del bloc mitjançant el mòdul de muntatge, tal com es mostra al llibre de jocs següent:

---
    - hosts: webservers
      tasks: 

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

Això conclou el tema. Hem cobert diverses tasques d'administració del sistema que es poden realitzar mitjançant mòduls integrats específics a Ansible Playbooks.