--- name: init_metabase kind: pipeline lang: go domain: infra version: "1.0.0" purity: impure signature: "func main() — Despliega stack Metabase + Postgres en Docker" description: "Pipeline que inicializa un contenedor Metabase con su base de datos Postgres. Crea red Docker, pull de imágenes, inicia Postgres con volume persistente, espera health check y lanza Metabase conectado." tags: [docker, metabase, postgres, pipeline, infra, analytics, launcher] uses_functions: - docker_create_network_go_infra - docker_pull_image_go_infra - docker_run_container_go_infra - docker_inspect_container_go_infra - retry_with_backoff_go_core uses_types: - container_info_go_infra - network_go_docker returns: [] returns_optional: false error_type: "error_go_core" imports: [os/exec, encoding/json] tested: false tests: [] test_file_path: "" file_path: "functions/pipelines/init_metabase/main.go" --- ## Ejemplo ```bash # Básico go run functions/pipelines/init_metabase/main.go \ --project analytics \ --metabase-port 3000 \ --pg-user metabase \ --pg-password metabase # Con volume para registry.db (detecta cambios en vivo) go run functions/pipelines/init_metabase/main.go \ --project fn_registry \ --mb-volumes "/home/lucas/fn_registry/registry.db:/data/registry.db" ``` Salida JSON: ```json { "network_id": "abc123...", "postgres_id": "def456...", "metabase_id": "ghi789...", "network_name": "analytics-net", "postgres_name": "analytics-postgres", "metabase_name": "analytics-metabase", "metabase_url": "http://localhost:3000" } ``` ## Notas El pipeline orquesta 5 pasos secuenciales: 1. **Red Docker** — crea `{project}-net` con driver bridge 2. **Pull** — descarga `postgres:16` y `metabase/metabase:latest` 3. **Postgres** — inicia con volume persistente (named volume por defecto o bind mount con `--pg-volume`) 4. **Health check** — retry exponencial (hasta ~34 min) con `pg_isready` dentro del contenedor 5. **Metabase** — conecta a Postgres via red interna, expone en puerto configurable. Con `--mb-volumes` monta volumes adicionales (ej: registry.db para SQLite) 6. **Permisos** — ajusta ownership de directorios montados para el usuario `metabase` (UID 2000) dentro del contenedor Reutiliza conceptualmente `docker_create_network`, `docker_pull_image`, `docker_run_container`, `docker_inspect_container` y `retry_with_backoff`, reimplementadas inline por ser un ejecutable independiente. Para destruir el stack: ```bash docker stop analytics-metabase analytics-postgres docker rm analytics-metabase analytics-postgres docker network rm analytics-net ```