7913116a8e
- .claude/agents/fn-analizador/SKILL.md - .claude/agents/fn-constructor/SKILL.md - .claude/agents/fn-executor/SKILL.md - .claude/agents/fn-mejorador/SKILL.md - .claude/agents/fn-orquestador/SKILL.md - .claude/agents/fn-recopilador/SKILL.md - .claude/commands/app.md - .claude/commands/compile.md - .claude/commands/cpp-app.md - .claude/commands/create_functions.md - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
80 lines
2.6 KiB
Markdown
80 lines
2.6 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]
|
|
params: []
|
|
output: "stdout: JSON con IDs de red, contenedores (postgres, metabase) y URL de acceso"
|
|
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/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
|
|
```
|