¿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:
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 archivogroup_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).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_varsy 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_varsy 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.