Búsqueda de sitios web

Cómo utilizar los módulos de Ansible para tareas de administración del sistema - Parte 6


En esta Parte 6 de la serie Ansible, cubrimos algunos módulos de Ansible en temas anteriores, ahora profundizaremos y descubriremos módulos adicionales que son útiles para realizar una serie de tareas de administración del sistema.

Obtendrá una idea básica de cada módulo y verá las opciones disponibles para realizar ciertas tareas.

En esta página:
  1. Gestión de paquetes de software y repositorios en Ansible
  2. Administrar servicios usando Ansible
  3. Administrar el firewall con Ansible
  4. Archivar archivos o carpetas con Ansible
  5. Programar tareas con Ansible
  6. Administrar usuarios y grupos con Ansible
  7. Crear archivos y directorios con Ansible
  8. Gestión del almacenamiento con Ansible
  9. Gestión de sistemas de archivos con Ansible

1. Gestión de paquetes y repositorios de software en Ansible

Al instalar paquetes en sistemas Linux, las diferentes distribuciones vienen con diferentes administradores de paquetes. Para las distribuciones RedHat, tenemos yum y dnf, mientras que para las versiones Debian, está apt.

Ansible viene con un módulo llamado paquete, que elimina la necesidad de utilizar diferentes administradores de paquetes para diferentes sistemas. Utiliza automáticamente el administrador de paquetes correspondiente del sistema host, lo que facilita el trabajo.

Instalar paquetes de software

Por ejemplo, para instalar htop en un grupo de hosts que comprende las distribuciones Debian y RedHat, utilice el módulo paquete como se muestra en el manual de estrategias install_htop.yml a continuación.

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

- package:
         name: htop
         state: installed

NOTA: Los nombres de los paquetes pueden diferir de un sistema operativo a otro. Por ejemplo, tenemos httpd en distribuciones Redhat y Apache2 para sistemas Debian/Ubuntu, todos los cuales denotan el nombre Apache. Servidor web. Por lo tanto, se debe tener especial precaución al pasar estos paquetes. Normalmente, es mejor utilizar variables o declaraciones condicionales.

2. Gestión de servicios mediante Ansible

A continuación, tenemos un módulo servicio, que se utiliza para administrar servicios en sistemas Linux. Se utiliza para iniciar, detener o reiniciar un servicio. También puede usarlo para habilitar un servicio de modo que cuando se inicie un sistema, inicie automáticamente el servicio.

Iniciar y habilitar un servicio

Por ejemplo, para iniciar y habilitar el servidor web Apache en RHEL 8, utilice el servicio como se muestra.

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

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

Detener un servicio

Para detener el servicio httpd, pase el atributo detenido.

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

- service:
         name: httpd
         state: stopped

Reiniciar un servicio

Para reiniciar el servicio httpd, pase el atributo restarted.

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

- service:
         name: httpd
         state: restarted

3. Administrar el firewall con Ansible

Otra tarea importante que realizan los administradores de sistemas es la gestión del firewall. En los manuales de Ansible, esto se ha hecho mucho más fácil con los módulos firewalld y ufw. Puede configurar el firewall para permitir o bloquear un puerto o servicio o incluso una dirección de origen.

Entremos y echemos un vistazo a algunos ejemplos:

Abrir/bloquear el puerto 80 en firewalld

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

En el manual anterior, se permite el puerto 80 a través del firewall.

La opción permanente: sí aplica la regla del firewall y la hace persistente durante los reinicios. Sin embargo, esta regla no se aplica de inmediato. Sólo entra en vigor después de reiniciar. Para aplicar la regla inmediatamente, utilice la opción inmediato: sí.

Para especificar las direcciones permitidas, utilice la declaración source:0.0.0.0/0.

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

Para especificar un rango de puertos a los que se les permitirá utilizar la opción de puerto de la siguiente manera:

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

Para bloquear el puerto, cambie la opción de estado a deshabilitado como se muestra:

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

Agregar/Bloquear un Servicio en firewalld

Además de agregar/bloquear un puerto, también puedes aplicar las mismas reglas a un servicio. Y es bastante simple. Simplemente use el módulo servicio y agregue el servicio que se agregará y asegúrese de que la opción de estado esté configurada en habilitado.

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

Para bloquear el servicio, establezca la opción estado en deshabilitado.

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

4. Archivar archivos o carpetas con Ansible

Archivar se refiere a la compresión de un archivo o carpeta a un formato que sea fácilmente portátil y de menor tamaño. Ansible se envía con un módulo llamado archivo. Comprimir un archivo es tan fácil como parece. Todo lo que se requiere es especificar la ruta de origen del archivo y el destino del archivo comprimido.

Comprimir un directorio

Considere un libro de estrategias compress.yml a continuación.

---
- hosts: webservers
  tasks:

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

El manual anterior comprime el directorio /opt/data/web y lo guarda en /tmp/web.gz.

Comprimir un directorio con formato

El formato de compresión predeterminado es .gz; sin embargo, esto se puede especificar usando el atributo de formato. Pruebe el próximo libro de jugadas.

---
- hosts: webservers
  Tasks:

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

El manual anterior comprime el directorio /opt/data/web en /tmp/web.zip.

Descomprimir un archivo

También puedes descomprimir un archivo comprimido usando el atributo unarchive. Considere el siguiente manual.

---
- hosts: webservers
  tasks:

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

El manual anterior descomprime el archivo /opt/data/web.gz en /opt en el controlador Ansible.

Descomprimir un archivo en un nodo remoto

Para especificar el sistema de origen remoto, utilice la opción 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 manual anterior descomprime el archivo /tmp/web.bz2 en el nodo remoto en el directorio /opt/.

5. Programe tareas con Ansible

El módulo cron ayuda a programar trabajos en Ansible Playbooks.

Crear una tarea programada

Considere el siguiente manual.

---
- 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 libro de jugadas ejecuta el guión de asistencia el 5 de abril a las 5:00 p.m.

Programe un guión en una fecha específica

Si desea programar este script para que se ejecute solo si el día 5 de abril es lunes, utilice el atributo de día laborable: 1. 0 indica domingo y 6 indica sábado según la notación cron.

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

Un asterisco (*) en cualquiera de estos campos indica cualquier valor.

Ejecutar un trabajo en una fecha

Para ejecutar el trabajo el 5 de abril a las 5:00 p. m., sin importar el día de la semana, use los parámetros de tiempo como se muestran.

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

Ejecutar un trabajo en un día específico cada mes

Para ejecutar el trabajo cron el día 5 de cada mes a las 5:00 p. m., utilice la configuración siguiente.

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

Ejecutar un trabajo diariamente

Para ejecutar el trabajo cron diariamente a las 5:00 p. m., establezca la configuración de hora como se muestra:

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

Ejecutar un trabajo cada 5 horas

Para ejecutar el trabajo cron cada 5 horas, utilice el valor del paso */5 como se muestra.

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

6. Administrar usuarios y grupos con Ansible

También puede administrar usuarios y grupos dentro de los manuales de Ansible sin esfuerzo.

Crear un nuevo usuario

Para crear un nuevo usuario, utilice el módulo usuario como se muestra.

---
- hosts: webservers
  tasks:

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

También puedes agregar opciones adicionales como UID, grupos.

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

Eliminar un usuario

Para eliminar al usuario, utilice la instrucción remove: yes.

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

Crear un nuevo grupo

Para crear un nuevo grupo, utilice el módulo grupo.

- name: Create a group
  group:
    name: developers

7. Cree archivos y directorios con Ansible

Para crear archivos de directorios, utilice el módulo file.

Crear un nuevo directorio

Por ejemplo, para crear un nuevo directorio.

---
- hosts: webservers
  tasks:

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

Puede agregar otros atributos, como permisos de propietario, grupo y archivo.

- hosts: webservers
  tasks:

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

Además, puede crear directorios de forma recursiva utilizando la instrucción 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

Crear un archivo

Para crear un archivo, utilice la opción 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. Gestión del almacenamiento con Ansible

El módulo lvg se utiliza para configurar volúmenes y grupos LVM.

Crear un grupo de volúmenes LVM

Considere el siguiente libro de jugadas:

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

Esto crea un grupo de volúmenes encima de la partición /dev/sda1 con un tamaño de extensión física de 32 MB.

Una vez creado, utilice el módulo lvol para crear un volumen lógico como se muestra

Crear un volumen lógico

---
    - hosts: webservers
      tasks: 

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

9. Gestión de sistemas de archivos con Ansible

Para crear un sistema de archivos en un dispositivo de bloque, utilice el módulo filesystem.

Crear un sistema de archivos

El siguiente manual crea el tipo de sistema de archivos xfs en el volumen en bloque.

---
    - hosts: webservers
      tasks: 

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

Montar un sistema de archivos

A continuación, puede proceder a montar el volumen en bloque utilizando el módulo mount como se muestra en el siguiente manual:

---
    - hosts: webservers
      tasks: 

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

Con esto concluye el tema. Hemos cubierto varias tareas de administración del sistema que se pueden realizar mediante módulos integrados específicos en Ansible Playbooks.