feat: pipelines Metabase — add ops db, create ops dashboard, fix permissions

Tres pipelines Python para gestionar operations.db en Metabase:
- metabase_add_ops_db: registra la operations.db de una app como database SQLite
- metabase_create_ops_dashboard: genera dashboard operativo con 14 cards (KPIs,
  distribución, executions, assertions) para cualquier app
- metabase_fix_permissions: arregla SQLITE_READONLY_DIRECTORY haciendo chmod
  777/666 sin chown (que se propaga al host via bind mount)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-29 00:54:24 +01:00
parent 95bba767bc
commit 6a05abff03
7 changed files with 744 additions and 0 deletions
@@ -0,0 +1,58 @@
---
name: metabase_fix_permissions
kind: pipeline
lang: py
domain: pipelines
version: "1.0.0"
purity: impure
signature: "metabase_fix_permissions() -> None"
description: "Arregla permisos SQLITE_READONLY_DIRECTORY en el contenedor Metabase. Hace chmod 777/666 en directorios y archivos .db bajo /data/ para que el usuario metabase (UID 2000) pueda crear journal files."
tags: [metabase, sqlite, permissions, docker, pipeline, infra, launcher]
uses_functions:
- metabase_auth_py_infra
- metabase_list_databases_py_infra
uses_types: []
returns: []
returns_optional: false
error_type: "error_go_core"
imports: []
tested: false
tests: []
test_file_path: ""
file_path: "python/functions/pipelines/metabase_fix_permissions.py"
---
## Ejemplo
```bash
# Fix permisos (usa contenedor por defecto: fn_registry-metabase)
python python/functions/pipelines/metabase_fix_permissions.py
# Contenedor custom
python python/functions/pipelines/metabase_fix_permissions.py --container mi-metabase
```
## Problema
Metabase corre Java como UID 2000 (usuario `metabase`). SQLite necesita crear
journal/WAL files en el mismo directorio que la BD. Si el directorio no es
escribible por UID 2000, Metabase devuelve:
```
SQLITE_READONLY_DIRECTORY: Process does not have permission to create a
journal file in the same directory as the database
```
## Solucion
El pipeline ejecuta dentro del contenedor (como root):
- `chmod 777` en cada directorio que contiene un `.db`
- `chmod 666` en cada archivo `.db`, `-wal`, `-shm`, `-journal`
Esto NO cambia ownership (evita que `chown` se propague al host via bind mount).
## Cuando ejecutar
- Despues de recrear el contenedor Metabase
- Despues de añadir una nueva database con `metabase_add_ops_db`
- Cuando Metabase muestra error SQLITE_READONLY_DIRECTORY