Перейти к содержанию

Internal Metabase Deploy Controller

Контроллер: tech.ujin.api.InternalMetabaseDeployController

Эндпоинт

- 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

Эндпоинт не использует:

  • TokenAuth
  • BasicAuth

Защита строится на отдельном 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 body
  • 502 — ошибка GitLab или Metabase интеграции
  • 500 — внутренняя ошибка