--- 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: [] 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/lucas/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/lucas/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/lucas/fn_registry:/fn_registry:ro ``` Y usar `--registry-db-path /fn_registry/registry.db`.