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:
- Gestión de paquetes de software y repositorios en Ansible
- Administrar servicios usando Ansible
- Administrar el firewall con Ansible
- Archivar archivos o carpetas con Ansible
- Programar tareas con Ansible
- Administrar usuarios y grupos con Ansible
- Crear archivos y directorios con Ansible
- Gestión del almacenamiento con Ansible
- 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.