--- 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