Introducción
Ansible, la potente herramienta de automatización de TI, ofrece una forma conveniente de gestionar las tareas cron (tareas programadas) dentro de su infraestructura. En este tutorial, exploraremos el módulo cron de Ansible, guiándole a través del proceso de definición, programación y gestión avanzada de sus tareas periódicas.
Introducción a Ansible Cron
Ansible es una potente herramienta de automatización de infraestructura que simplifica la gestión de entornos de TI complejos. Una de las características clave de Ansible es su capacidad para gestionar las tareas cron (tareas programadas), que son tareas programadas para ejecutarse en intervalos específicos. El módulo cron de Ansible ofrece una forma sencilla de crear, modificar y eliminar tareas cron en hosts remotos.
¿Qué es Cron?
Cron es un programador de tareas basado en el tiempo en sistemas operativos similares a Unix. Permite a los usuarios programar comandos o scripts para que se ejecuten en intervalos específicos, como cada minuto, hora, día o mes. Las tareas cron se utilizan comúnmente para tareas como el mantenimiento del sistema, las copias de seguridad de datos y los informes automatizados.
Beneficios de utilizar Ansible para la gestión de tareas cron
Ansible simplifica la gestión de tareas cron de varias maneras:
- Gestión centralizada: Con Ansible, puede definir y gestionar tareas cron en múltiples hosts desde un solo nodo de control, lo que facilita el mantenimiento de la coherencia y el seguimiento de los cambios.
- Idempotencia: La naturaleza idempotente de Ansible garantiza que las configuraciones de las tareas cron se apliquen de manera consistente, independientemente del estado actual del host remoto.
- Control de versiones: Al almacenar sus playbooks de Ansible en un sistema de control de versiones, puede realizar un seguimiento y gestionar fácilmente los cambios en las configuraciones de sus tareas cron con el tiempo.
- Escalabilidad: La arquitectura sin agente de Ansible le permite gestionar tareas cron en un gran número de hosts sin necesidad de infraestructura adicional.
Requisitos previos
Para utilizar el módulo cron de Ansible, necesitará lo siguiente:
- Ansible instalado en su nodo de control
- Acceso a los hosts remotos que desea gestionar
- Familiaridad con los conceptos básicos de Ansible, como los playbooks y los módulos
Definiendo tareas cron con Ansible
El módulo cron de Ansible ofrece una forma sencilla y efectiva de gestionar las tareas cron en hosts remotos. A continuación, se explica cómo puede utilizarlo para definir tareas cron en sus playbooks de Ansible.
Usando el módulo cron
El módulo cron en Ansible le permite crear, modificar y eliminar tareas cron. Aquí hay un ejemplo de cómo definir una tarea cron que ejecuta un script cada minuto:
- hosts: all
tasks:
- name: Ensure a cron job is present
cron:
name: Run backup script
minute: "*/1"
job: /opt/scripts/backup.sh
En este ejemplo, el módulo cron se utiliza para crear una tarea cron con los siguientes parámetros:
name: Un nombre descriptivo para la tarea cronminute: El o los minutos en los que se debe ejecutar la tarea (en este caso, cada minuto)job: El comando o script que se debe ejecutar
Parámetros de las tareas cron
El módulo cron admite una variedad de parámetros para personalizar sus tareas cron, entre ellos:
| Parámetro | Descripción |
|---|---|
name |
Un nombre descriptivo para la tarea cron |
minute, hour, day, month, weekday |
La hora en la que se debe ejecutar la tarea |
job |
El comando o script que se debe ejecutar |
user |
La cuenta de usuario bajo la cual se debe ejecutar la tarea |
state |
Asegura que la tarea esté present (existente) o absent (ausente) |
cron_file |
El nombre del archivo cron en el directorio /etc/cron.d |
special_time |
Opciones de programación predefinidas, como reboot, yearly, monthly, etc. |
Manejo de la salida de las tareas cron
De forma predeterminada, las tareas cron envían su salida al correo del sistema, lo cual puede ser inconveniente. Para manejar la salida, puede redirigirla a un archivo de registro o enviarla a una dirección de correo electrónico específica:
- hosts: all
tasks:
- name: Ensure a cron job is present
cron:
name: Run backup script
minute: "*/1"
job: /opt/scripts/backup.sh / /var/log/backup.log 2>&1
En este ejemplo, la salida del script de copia de seguridad se redirige al archivo /var/log/backup.log.
Gestión avanzada de tareas cron
Si bien el uso básico del módulo cron de Ansible es sencillo, existen varias técnicas y características avanzadas que pueden ayudarlo a gestionar las tareas cron de manera más efectiva.
Ejecución condicional de tareas cron
A veces, es posible que desee ejecutar una tarea cron solo cuando se cumplan ciertas condiciones. Puede lograr esto utilizando las declaraciones condicionales de Ansible, como las cláusulas when:
- hosts: all
tasks:
- name: Run backup script if disk usage is above 80%
cron:
name: Run backup script
minute: "*/1"
job: /opt/scripts/backup.sh
when: ansible_facts['ansible_devices']['sda']['percent_used'] > 80
En este ejemplo, la tarea cron solo se creará si el uso del disco en el dispositivo sda es superior al 80%.
Plantillas de tareas cron
Si tiene múltiples tareas cron que comparten configuraciones similares, puede utilizar plantillas Jinja2 para hacer que sus playbooks de Ansible sean más mantenibles. Aquí hay un ejemplo:
- hosts: all
tasks:
- name: Create cron job from template
cron:
name: "{{ item.name }}"
minute: "{{ item.minute }}"
job: "{{ item.job }}"
loop:
- {
name: "Run backup script",
minute: "*/1",
job: "/opt/scripts/backup.sh"
}
- {
name: "Generate reports",
minute: "0 3",
job: "/opt/scripts/generate_reports.sh"
}
loop_control:
loop_var: outer_item
En este ejemplo, las configuraciones de las tareas cron se definen como una lista de diccionarios, que luego se recorren en un bucle y se aplican a los hosts remotos.
Validación de tareas cron
Para asegurarse de que sus tareas cron estén configuradas correctamente, puede utilizar el plugin de búsqueda cron_job para validar las tareas cron existentes en los hosts remotos:
- hosts: all
tasks:
- name: Validate cron jobs
assert:
that:
- "'Run backup script' in cron_job"
- "'Generate reports' in cron_job"
vars:
cron_job: "{{ lookup('cron_job') }}"
Esta tarea utiliza el plugin de búsqueda cron_job para recuperar la lista de tareas cron en los hosts remotos y luego afirma que las tareas cron esperadas están presentes.
Al incorporar estas técnicas avanzadas, puede crear soluciones de gestión de tareas cron más robustas y flexibles con Ansible.
Resumen
Al final de este tutorial, tendrá una comprensión sólida de cómo aprovechar el módulo cron de Ansible para simplificar la gestión de sus tareas cron. Podrá definir, programar y monitorear sus tareas periódicas, asegurando una infraestructura más eficiente y confiable impulsada por Ansible.


