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


En esta Parte 6 de algunos módulos de Ansible en los 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.

  1. Gestión de repositorios y paquetes de software en Ansible
  2. Administrar servicios con Ansible
  3. Administrar el firewall con Ansible
  4. Archivar archivos o carpetas con Ansible
  5. Programe tareas con Ansible
  6. Administre usuarios y grupos con Ansible
  7. Cree archivos y directorios con Ansible
  8. Administrar el almacenamiento con Ansible
  9. Administrar sistemas de archivos con Ansible

Al instalar paquetes en sistemas Linux, las diferentes distribuciones vienen con diferentes administradores de paquetes. Para las distribuciones de RedHat, tenemos apt.

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

Por ejemplo, para instalar htop en un grupo de hosts que comprenden las distribuciones Debian y RedHat, use el módulo de paquete como se muestra en el libro de jugadas 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 las distribuciones de Redhat y Apache2 para los sistemas Debian/Ubuntu, todos los cuales denotan el servidor web Apache. Por lo tanto, se debe tener especial cuidado al pasar estos paquetes. Por lo general, es mejor usar variables o declaraciones condicionales.

A continuación, tenemos un módulo de 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, lo inicie automáticamente.

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

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

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

Para detener el servicio httpd, pase el atributo detenido.

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

- service:
         name: httpd
         state: stopped

Para reiniciar el servicio httpd, pase el atributo reiniciado.

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

- service:
         name: httpd
         state: restarted

Otra tarea importante que realizan los administradores del sistema es la gestión del cortafuegos. En los libros de jugadas 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:

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

En el libro de jugadas anterior, el puerto 80 está permitido a través del firewall.

La opción permanente: yes aplica la regla del cortafuegos y la hace persistente en los reinicios. Sin embargo, esta regla no se aplica de inmediato. Solo entra en vigor después de reiniciar. Para hacer cumplir la regla de inmediato, use la opción inmediato: sí .

Para especificar las direcciones permitidas, utilice la sentencia source: 0.0.0.0/0.

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

Para especificar un rango de puertos que se les permitirá usar 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

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

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

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

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

El archivo 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.

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

---
- hosts: webservers
  tasks:

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

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

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

---
- hosts: webservers
  Tasks:

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

El libro de jugadas anterior comprime el directorio/opt/data/web en /tmp/web.zip.

También puede descomprimir un archivo comprimido usando el atributo unarchive. Considere el libro de jugadas a continuación.

---
- hosts: webservers
  tasks:

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

El libro de jugadas anterior descomprime el archivo /opt/data/web.gz en/opt en el controlador Ansible.

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

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

Considere el libro de jugadas a continuación.

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

Si desea programar este script para que se ejecute solo si el día 5 de abril es lunes, utilice el atributo weekday: 1. 0 denota domingo y 6 denota 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.

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

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

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

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

Para ejecutar el trabajo cron todos los días a las 5:00 pm, establezca la configuración de hora como se muestra:

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

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

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

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

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

---
- hosts: webservers
  tasks:

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

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

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

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

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

Para crear un nuevo grupo, use el módulo de grupo.

- name: Create a group
  group:
    name: developers

Para crear archivos de directorios, use el módulo de archivos.

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

Para crear un archivo, use 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

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

Considere el libro de jugadas a continuación:

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

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

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

---
    - hosts: webservers
      tasks: 

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

Para crear un sistema de archivos en un dispositivo de bloque, use el módulo del sistema de archivos.

El siguiente libro de jugadas crea el tipo de sistema de archivos de xfs en el volumen del bloque.

---
    - hosts: webservers
      tasks: 

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

A continuación, puede proceder a montar el volumen del bloque utilizando el módulo de montaje como se muestra en el libro de jugadas a continuación:

---
    - hosts: webservers
      tasks: 

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

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.