Patrones de reutilización con YAML

La reutilización es una de las mayores ventajas de YAML. Con anclas (&), alias (*) y el operador de merge (<<) evitamos duplicaciones, simplificamos configuraciones y mantenemos la coherencia en archivos extensos.

7.1 Reutilización de configuraciones base

Definimos una configuración común y la adaptamos para cada entorno.

config_base: &config_base
  puerto: 8080
  host: localhost
  debug: true

config_test:
  <<: *config_base
  host: test.miapp.com

config_prod:
  <<: *config_base
  host: miapp.com
  debug: false
Beneficio: no repetimos claves como puerto o debug; solo sobrescribimos lo que cambia en cada entorno.

7.2 Reutilización en listas

Los alias también sirven para listas cuyos elementos comparten valores por defecto.

usuario_base: &usuario_base
  rol: editor
  activo: true

usuarios:
  - nombre: Ana
    <<: *usuario_base
  - nombre: Marcos
    <<: *usuario_base
  - nombre: Laura
    <<: *usuario_base
    rol: admin

7.3 Reutilización de metadatos

En ecosistemas como Kubernetes es común compartir etiquetas y namespaces.

metadata_base: &metadata_base
  labels:
    app: mi-app
  namespace: produccion

---
apiVersion: v1
kind: ConfigMap
metadata:
  <<: *metadata_base
  name: mi-config

---
apiVersion: v1
kind: Service
metadata:
  <<: *metadata_base
  name: mi-service

7.4 Reutilización en Docker Compose

En Docker Compose podemos centralizar políticas y redes.

version: "3.9"

x-service-base: &service_base
  restart: always
  networks:
    - backend

services:
  app1:
    <<: *service_base
    image: miapp:1.0
    ports:
      - "8080:8080"

  app2:
    <<: *service_base
    image: miapp:2.0
    ports:
      - "9090:8080"

networks:
  backend:

7.5 Patrón de valores por defecto

Definimos un bloque &defaults con parámetros comunes y lo extendemos según necesidad.

defaults: &defaults
  timeout: 30
  retries: 3

servicio_a:
  <<: *defaults
  endpoint: /api/v1/usuarios

servicio_b:
  <<: *defaults
  endpoint: /api/v1/productos
  timeout: 60

7.6 Buenas prácticas al reutilizar

  • Define bloques claros y con nombres expresivos (&config_base, &service_base).
  • Usa merge keys (<<: *alias) para sobrescribir únicamente lo necesario.
  • No abuses de las referencias; demasiadas pueden complicar la lectura.
  • Añade comentarios que indiquen dónde se encuentran los bloques base.

7.7 Ventajas de estos patrones

  • Evitan la duplicación de datos.
  • Permiten modificar configuraciones globales en un único lugar.
  • Facilitan la gestión de entornos (dev, test, prod).
  • Son especialmente útiles en flujos DevOps como Docker Compose, Kubernetes y CI/CD.

En conclusión, aprovechar las anclas y alias para definir patrones de reutilización convierte a YAML en una herramienta más limpia, mantenible y escalable.