mirror of
https://github.com/Dvorinka/Containr.git
synced 2026-10-28 07:41:27 +00:00
feat: external databases — register, probe, encrypted credentials
Databases hosted outside Containr can now be registered alongside
managed ones. The connection is probed before storing (protocol-level
for postgres/redis-family via real drivers, TCP dial for the rest),
credentials are encrypted at rest and never returned, and external rows
skip managed lifecycle actions, backups, and Docker metrics.
- POST /databases/register-external — probe + create
- POST /databases/test-connection — ad-hoc probe (ok/latency_ms/error)
- POST /databases/{id}/test-connection — re-probe stored credentials
- provider/external fields on database services; privileged reads get a
composed connection URL with loopback hosts rewritten to the caller's
- CLI: databases register + test-connection; MCP: 3 new tools
- UI: managed/external toggle in the create modal, external badge and
host display, per-row test button, backups section hidden
- Migration widens the plan CHECK to admit 'external'
Generated with [Devin](https://devin.ai)
Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
3664eaed1a
commit
5dc9b5f115
19 files changed
+1274
-48
No files matched your search
@@ -0,0 +1,33 @@
|
||||
-- +goose Up
|
||||
-- +goose StatementBegin
|
||||
ALTER TABLE database_services
|
||||
ADD COLUMN IF NOT EXISTS provider VARCHAR(20) NOT NULL DEFAULT 'managed',
|
||||
ADD COLUMN IF NOT EXISTS external_host VARCHAR(255),
|
||||
ADD COLUMN IF NOT EXISTS external_port INTEGER,
|
||||
ADD COLUMN IF NOT EXISTS external_name VARCHAR(255),
|
||||
ADD COLUMN IF NOT EXISTS external_username VARCHAR(255),
|
||||
ADD COLUMN IF NOT EXISTS external_password TEXT NOT NULL DEFAULT '',
|
||||
ADD COLUMN IF NOT EXISTS external_ssl BOOLEAN NOT NULL DEFAULT false;
|
||||
|
||||
ALTER TABLE database_services
|
||||
DROP CONSTRAINT IF EXISTS database_services_plan_check,
|
||||
ADD CONSTRAINT database_services_plan_check
|
||||
CHECK (plan IN ('hobby', 'starter', 'standard', 'business', 'external'));
|
||||
-- +goose StatementEnd
|
||||
|
||||
-- +goose Down
|
||||
-- +goose StatementBegin
|
||||
ALTER TABLE database_services
|
||||
DROP CONSTRAINT IF EXISTS database_services_plan_check,
|
||||
ADD CONSTRAINT database_services_plan_check
|
||||
CHECK (plan IN ('hobby', 'starter', 'standard', 'business'));
|
||||
|
||||
ALTER TABLE database_services
|
||||
DROP COLUMN IF EXISTS provider,
|
||||
DROP COLUMN IF EXISTS external_host,
|
||||
DROP COLUMN IF EXISTS external_port,
|
||||
DROP COLUMN IF EXISTS external_name,
|
||||
DROP COLUMN IF EXISTS external_username,
|
||||
DROP COLUMN IF EXISTS external_password,
|
||||
DROP COLUMN IF EXISTS external_ssl;
|
||||
-- +goose StatementEnd
|
||||
Reference in new issue
Block a user