Files
fn_registry/functions/pipelines/init_metabase.md
T
egutierrez ba6436ae2f chore: ajustar tags de pipelines según regla tag_launcher
Añade tag 'launcher' a init_metabase para que aparezca en la TUI. Elimina tag 'launcher' de pipeline_launcher ya que es una TUI interactiva, no un subproceso lanzable.
2026-03-28 19:15:01 +01:00

73 lines
2.2 KiB
Markdown

---
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
go run functions/pipelines/init_metabase/main.go \
--project analytics \
--metabase-port 3000 \
--pg-port 5432 \
--pg-user metabase \
--pg-password metabase \
--pg-database metabase
```
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
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
```