Sobes.tech
Junior

¿Qué es el enfoque declarativo en DevOps?

sobes.tech AI

Respuesta de la IA

El enfoque declarativo en DevOps se centra en describir el estado final deseado del sistema, en lugar de en la secuencia de pasos para alcanzarlo. Las herramientas que utilizan este enfoque son responsables de definir y ejecutar las operaciones necesarias para llevar el sistema a ese estado.

Diferencias principales respecto al enfoque imperativo:

  • Imperativo: Describe cómo alcanzar la meta (secuencia de comandos).
  • Declarativo: Describe qué debe haber al final (estado final).

Ejemplos de herramientas que utilizan el enfoque declarativo:

  • Kubernetes: Descripción del número deseado de réplicas del pod, configuración del servicio, etc., en archivos YAML. Kubernetes mantiene ese estado.
  • Terraform: Infraestructura como código. Descripción de la infraestructura deseada (máquinas virtuales, redes, balanceadores) en archivos .tf. Terraform crea o modifica recursos según esa descripción.
  • Ansible (parcialmente, en playbooks): En tareas (tasks) a menudo se describe el estado final (por ejemplo, "asegurarse de que el paquete esté instalado", "asegurarse de que el archivo exista con contenido específico").

Ventajas:

  • Idempotencia: La aplicación repetida de la misma descripción declarativa no provocará cambios imprevistos si el sistema ya está en el estado deseado.
  • Resiliencia: Las herramientas intentan restaurar el estado deseado en caso de desviaciones.
  • Facilidad de comprensión: La descripción del estado suele ser más intuitiva que un script detallado.
  • Mejora en escalabilidad: Es más fácil gestionar sistemas grandes y complejos, centrados en el resultado final.
  • Reducción del desplazamiento de la configuración: El sistema se mantiene activamente en el estado descrito.

Ejemplo (comparación de enfoques):

Crear el archivo /etc/myapp.conf con contenido "data=value".

Imperativo:

# Verificar si el archivo existe
if [ ! -f /etc/myapp.conf ]; then
  # Crear directorio si no existe
  mkdir -p /etc
  # Crear archivo
  echo "data=value" > /etc/myapp.conf
fi
# O simplemente:
# echo "data=value" > /etc/myapp.conf

Declarativo (principio, no sintaxis real):

file: /etc/myapp.conf
state: present # El archivo debe existir
content: "data=value" # Con ese contenido

La herramienta que utiliza el enfoque declarativo determinará si necesita crear el archivo, modificar su contenido o simplemente asegurarse de que exista.