feat: pipeline init_metabase para desplegar Metabase + Postgres
Pipeline ejecutable que orquesta: crear red Docker, pull de imágenes, iniciar Postgres con volume persistente, health check con retry exponencial (pg_isready), e iniciar Metabase conectado via red interna. Configurable con flags: --project, --metabase-port, --pg-user, etc. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
---
|
||||
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]
|
||||
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
|
||||
```
|
||||
Reference in New Issue
Block a user