Internal Metabase Deploy Controller¶
Контроллер: tech.ujin.api.InternalMetabaseDeployController
Swagger Links¶
Эндпоинт¶
- POST /api/internal/metabase/deploy
- Внутренний endpoint для применения snapshot из GitLab в текущий Metabase.
- Используется для controlled deploy без LDAP или TokenAuth.
- Может принимать пустой body, тогда deploy выполняется с HEAD ветки gitlab.target-branch.
Тело запроса:
{
"ref": "main",
"commitSha": "abcdef1234567890"
}
Поля body опциональны и используются так же, как в admin deploy flow.
Security¶
Эндпоинт не использует:
TokenAuthBasicAuth
Защита строится на отдельном shared secret header:
- endpoint должен быть включён через
metabase.deploy.enabled=true; - ожидаемый header name берётся из
metabase.deploy.token-header-name; - ожидаемое значение токена берётся из
metabase.deploy.token.
Если endpoint выключен, токен не настроен или токен не совпадает, запрос отклоняется ошибкой доступа.
Бизнес-логика¶
- контроллер валидирует internal deploy token;
- после успешной проверки вызывает
MetabaseSqlDeployService.deployFromGit(request); - deploy синхронизирует collections, questions/cards и dashboards по стабильному
entityId; - полный archive/delete отсутствующих сущностей пока не выполняется.
По смыслу это тот же deploy engine, что и у POST /api/metabase/settings/admin/sql/deploy,
но с другой моделью авторизации и с расчётом на CI/webhook/internal automation.
Тот же deploy token может использоваться и для POST /api/metabase/settings/admin/sql/deploy
как fallback, если нет LDAP-admin доступа.
Коды ошибок¶
403— endpoint выключен, токен не настроен или токен не совпадает400— невалидный request body502— ошибка GitLab или Metabase интеграции500— внутренняя ошибка