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.
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
puerto
o debug
; solo sobrescribimos lo que cambia en cada entorno.
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
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
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:
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
&config_base
, &service_base
).<<: *alias
) para sobrescribir únicamente lo necesario.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.