Sobes.tech
Middle

¿Por qué en el rol de DevOps se necesitan dos carpetas con variables y cuáles son?

sobes.tech AI

Respuesta de la IA

En el rol de DevOps, generalmente se utilizan dos carpetas con variables para separar configuraciones comunes y específicas del entorno (entorno). Esto aumenta la flexibilidad, la reutilización y la seguridad de las configuraciones.

Las dos carpetas principales:

  1. group_vars: Contiene variables que se aplican a todos los hosts en un grupo de inventario determinado. Las variables de estos archivos se aplican a los hosts incluidos en el grupo cuyo nombre coincide con el nombre del archivo (por ejemplo, group_vars/web_servers.yaml) o en el archivo group_vars/all.yaml (que se aplica a todos los hosts). Esto es útil para definir configuraciones comunes para un grupo de servidores (por ejemplo, configuraciones de red, rutas de instalación).
  2. host_vars: Contiene variables específicas para hosts individuales. Las variables de estos archivos solo se aplican a un host en particular, cuyo nombre coincide con el nombre del archivo (por ejemplo, host_vars/server1.example.com.yaml). Se usa para configuraciones únicas de hosts (por ejemplo, direcciones IP de interfaces específicas, versiones de software, accesos específicos).

Ejemplo de estructura de directorios al usar Ansible:

# Estructura de directorios con variables
.
├── inventory  # Archivo o directorio de inventario
│   └── hosts.yaml
├── group_vars
│   ├── all.yaml       # Variables para todos los hosts
│   └── web_servers.yaml # Variables para el grupo web_servers
└── host_vars
    ├── server1.example.com.yaml # Variables para el host server1
    └── server2.example.com.yaml # Variables para el host server2

Ejemplo de contenido de archivos:

// group_vars/all.yaml
---
# Variables generales para todos los hosts
tz: "Europe/Moscow"
ntp_servers:
  - 0.pool.ntp.org
  - 1.pool.ntp.org
// group_vars/web_servers.yaml
---
# Variables para el grupo web_servers
http_port: 80
https_port: 443
document_root: "/var/www/html"
// host_vars/server1.example.com.yaml
---
# Variables específicas para server1
external_ip: "192.168.1.100"
database_server: "db.example.com"

Ventajas de esta separación:

  • Jerarquía y prioridad: Se garantiza una jerarquía clara en la aplicación de variables (host_vars tiene mayor prioridad que group_vars, y group_vars para un grupo específico tiene mayor prioridad que group_vars/all).
  • Reutilización: Las configuraciones comunes pueden definirse una vez en group_vars y aplicarse a múltiples hosts.
  • Legibilidad y gestionabilidad: La configuración se vuelve más comprensible y fácil de mantener, ya que las configuraciones específicas y generales están separadas.
  • Seguridad: Los datos sensibles específicos (por ejemplo, contraseñas o claves para un host en particular) pueden almacenarse en host_vars y cifrarse por separado si es necesario.

En el contexto de otras herramientas (por ejemplo, Terraform con archivos .tfvars o archivos de configuración de aplicaciones), el principio de separación en variables comunes y específicas del entorno/instancia se mantiene, aunque los nombres de los directorios pueden variar. Por ejemplo, en Terraform, a menudo se usan archivos como terraform.tfvars (para valores predeterminados comunes) y archivos específicos para entornos como dev.tfvars, stage.tfvars, prod.tfvars.

La idea principal es separar los parámetros "comunes" inmutables de los "entorno" o "host" variables que cambian, para facilitar la gestión de la configuración.