---
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: []
output: "Void - arregla permisos SQLITE_READONLY_DIRECTORY en contenedor Metabase vía chmod 777/666"
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
