---
name: setup_metabase_volume
kind: pipeline
lang: bash
domain: pipelines
version: "1.0.0"
purity: impure
signature: "setup_metabase_volume([registry_db_path: string], [container_name: string], [dest_path: string]) -> void"
description: "Copia registry.db al contenedor Docker de Metabase verificando existencia del archivo, disponibilidad de docker, estado del contenedor y coincidencia de tamaños. Todos los argumentos son opcionales con defaults razonables."
tags: [metabase, docker, setup, launcher, pipeline, bash, infra]
uses_functions:
  - assert_file_exists_bash_shell
  - assert_command_exists_bash_shell
  - assert_docker_container_running_bash_infra
  - docker_cp_file_bash_infra
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
params:
  - name: registry_db_path
    desc: "ruta a registry.db local (default: $HOME/fn_registry/registry.db)"
  - name: container_name
    desc: "nombre del contenedor Metabase (default: metabase)"
  - name: dest_path
    desc: "ruta destino dentro del contenedor (default: /registry.db)"
output: "sin salida directa; verifica transferencia con coincidencia de tamaños"
tested: false
tests: []
test_file_path: ""
file_path: "bash/functions/pipelines/setup_metabase_volume.sh"
---

## Ejemplo

```bash
# Con defaults
./functions/pipelines/setup_metabase_volume.sh

# Con argumentos explícitos
./functions/pipelines/setup_metabase_volume.sh \
  $HOME/fn_registry/registry.db \
  metabase \
  /registry.db
```

## Flujo

1. `assert_file_exists` — verifica que `registry.db` existe localmente y obtiene su tamaño
2. `assert_command_exists` — verifica que `docker` está disponible en PATH
3. `assert_docker_container_running` — verifica que el contenedor destino está activo; si falla, muestra lista de contenedores activos
4. `docker_cp_file` — ejecuta `docker cp` y verifica que los tamaños local y remoto coinciden

## Notas

El pipeline usa `set -euo pipefail` — cualquier fallo en una función individual detiene la ejecución.

Las funciones individuales se sourcean desde sus rutas en el registry, relativas a `REGISTRY_ROOT` detectado automáticamente desde la ubicación del script.

Defaults:
- `REGISTRY_DB_PATH`: `$HOME/fn_registry/registry.db`
- `CONTAINER_NAME`: `metabase`
- `DEST_PATH`: `/registry.db`

Nota de persistencia: `docker cp` copia al contenedor en ejecución. Si el contenedor se reinicia, el archivo se pierde. Para persistencia real, montar el directorio como volumen en docker-compose:

```yaml
volumes:
  - $HOME/fn_registry:/fn_registry:ro
```

Y usar `--registry-db-path /fn_registry/registry.db`.
