Referencias y anclas (& y *)

Una de las características más poderosas de YAML es la posibilidad de reutilizar bloques mediante anclas (&) y referencias o alias (*). Esto evita duplicación y mantiene la coherencia en configuraciones grandes.

6.1 Anclas (&)

Un ancla se define con el símbolo & seguido de un nombre y marca un bloque reutilizable.

base: &valores_base
  memoria: 4GB
  cpu: 2
  disco: 50GB

6.2 Referencias o alias (*)

Una referencia utiliza * con el nombre del ancla para copiar el bloque. Con el operador de merge (<<) se fusiona en el diccionario actual.

servidor1:
  <<: *valores_base
  nombre: servidor-app

servidor2:
  <<: *valores_base
  nombre: servidor-db

Resultado expandido:

servidor1:
  memoria: 4GB
  cpu: 2
  disco: 50GB
  nombre: servidor-app

servidor2:
  memoria: 4GB
  cpu: 2
  disco: 50GB
  nombre: servidor-db

6.3 Uso con listas

Los alias también funcionan sobre listas completas.

usuarios: &usuarios_base
  - nombre: Ana
    rol: admin
  - nombre: Marcos
    rol: editor

equipoA:
  miembros: *usuarios_base

equipoB:
  miembros: *usuarios_base

6.4 Sobrescritura de valores

Podemos partir de un ancla y sobrescribir campos específicos en cada alias.

config_base: &config_base
  puerto: 8080
  modo: desarrollo
  debug: true

config_prod:
  <<: *config_base
  modo: produccion
  debug: false

Resultado:

config_prod:
  puerto: 8080
  modo: produccion
  debug: false

6.5 Caso práctico: Docker Compose

En Docker Compose es habitual reutilizar bloques de configuración.

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:

6.6 Buenas prácticas

  • Nombre anclas con intención (&config_base, &valores_base) para claridad.
  • Usa merge keys (<<: *alias) para modificar solo algunas claves.
  • Evita un exceso de anclas y referencias para no dificultar la lectura.
  • Resultan especialmente útiles en configuraciones de Kubernetes, Docker Compose y pipelines de CI/CD.

Con anclas y referencias, YAML permite reutilizar estructuras, reducir duplicación y mantener archivos más ordenados.