Create a standalone managed service
Needs `team.managed_services` (every team member). Checks the request against the provider's definition: the provider is offered to the team and available on the cluster (409 `provider-unavailable`), the plan exists, `resources` override only parameters that are not read-only and stay within their bounds, `config` and `secrets` validate against `fields.config` and `fields.secrets` (defaults applied; 422 with pointers `/config/<k>`, `/secrets/<k>`, `/resources/<k>`, `/plan`). 409 `name-taken` when a standalone instance of the team that is not deleted has the name, `one-per-team`, `quota-exceeded` (the plan's CPU and memory against the team quota). The instance starts in `creating`; follow `managed_service.updated`. Secret values are write-only: the console generates passwords in the browser and shows them once. `public` (1.4): as for `PATCH /managed-services/{ms}` (422 at `/public`, 409 `public-hosts-disabled`).
openapi/harthelm.yaml at v1.5.0__Host-harthelm_session<token>Browser session of the UI (12 h idle, 7 days absolute). State-changing requests also need the header
Harthelm-CSRF: 1 and a matching Origin.
team*integerNumeric resource id.
int641 <= valueIdempotency-Key?stringClient-chosen key (at most 255 characters); a repeated key returns the first result for 24 h.
1 <= length <= 255application/json- body
name*ServiceNameValueUnique among the team's standalone instances; its objects are ms-<name> in the team's namespace.
^[a-z]([-a-z0-9]{0,30}[a-z0-9])?$provider*ProviderNameValue^[a-z][a-z0-9-]{0,62}$provider_version?ProviderVersionValueAbsent takes the newest enabled version.
^[1-9][0-9]{0,5}$plan?stringA plan id of the provider; absent takes its default plan.
resources?Overrides of the plan's values for parameters that are not read-only.
config?secrets?The secret values; every required one of fields.secrets.
backups?booleanDump it nightly; default true for providers that can.
public?booleanA public browser host (S3 only, 1.4); default false.
The managed service, creating.
application/json- response
id*stringuuidteam_id*IDNumeric resource id.
int641 <= valueworkspace_id?IDNumeric resource id.
int641 <= valuename*ServiceNameValue^[a-z]([-a-z0-9]{0,30}[a-z0-9])?$provider*ProviderNameValue^[a-z][a-z0-9-]{0,62}$provider_version*ProviderVersionValue^[1-9][0-9]{0,5}$plan*stringThe provider plan's id; empty for a provider without plans.
resources*The plan's resource values with the instance's overrides (the provider's resources say what each one is).
config*The settings, defaults applied.
secrets*array<>details*What the backend reports (fields.details), e.g. host, port, database, user, a DSN with **** for the password, ready.
status*ManagedServiceStatuscreating,updating,pausing,unpausing,deleting: the backend works on a change;synchronized: it runs as asked;paused: data kept, no server (a torn-down landscape's database);deleted: a tombstone, listed withinclude_deleteduntil it is purged;unknown: the backend does not answer or does not report it; the details are the last known ones;invalid-provider: its provider version is gone or no longer accepts its settings.
"creating""updating""synchronized""pausing""paused""unpausing""deleting""deleted""unknown""invalid-provider"status_detail?stringThe backend's message when something failed, else empty.
paused*booleanAsked to be paused (status says where it is).
backups*booleanThe nightly backup dumps it.
public*booleanAsked for a public browser host (S3 only; 1.4): no sign-in, the store's public buckets readable by anyone. browser.public says whether the host is public now (the administrator may forbid public hosts).
browser?The instance's own host for browsers (1.4): RabbitMQ's management UI and HTTP API, or an S3 store's API (path-style, presigned URLs, public buckets). Absent for providers without one and while the installation has marketplace.browserHosts.enabled off. The console opens a gated host through /auth/managed/{ms}.
last_dump_at?stringWhen the newest successful dump finished; absent before the first.
date-timecreated_at*stringdate-timecreated_by?IDNumeric resource id.
int641 <= valueupdated_at*stringdate-timedeleted_at?stringdate-timepurge_after?stringTombstones, when the row goes for good.
date-timecurl -X POST 'https://console.example.com/api/v1/teams/1/managed-services' \ -H 'Content-Type: application/json' \ -d '{ "name": "string", "provider": "string"}'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "team_id": 1, "workspace_id": 1, "name": "string", "provider": "string", "provider_version": "string", "plan": "string", "resources": { "property1": 0, "property2": 0 }, "config": {}, "secrets": [ { "name": "string", "vault_key": "string", "revision": 1, "rotated_at": "2019-08-24T14:15:22Z" } ], "details": {}, "status": "creating", "status_detail": "string", "paused": true, "backups": true, "public": true, "browser": { "url": "http://example.com", "kind": "management", "public": true, "public_allowed": true, "sso": true }, "last_dump_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z", "created_by": 1, "updated_at": "2019-08-24T14:15:22Z", "deleted_at": "2019-08-24T14:15:22Z", "purge_after": "2019-08-24T14:15:22Z"}Stage and service logs
Step output of the workspace. Without `follow`, the history as NDJSON (`application/x-ndjson`, one `LogEntry` per line, oldest first, at most `limit` lines) from the log backend. With `follow=true`, a `text/event-stream`: the agents' ring buffers since `since`, then live lines, each `event: log` with a `LogEntry` as data; `event: end` when the followed run finished; a `: ping` comment every 25 s. Filters combine; `replica` is a pod name. Needs `workspace.view`.
Delete a managed service and its data
Needs `team.managed_services`. Soft delete: the status goes `deleting` while the backend removes the server and its volume, then `deleted`; the row stays listed as recently deleted (`include_deleted`) for `marketplace.tombstoneDays`. The data is gone; the last nightly dump is the final copy (a dump on delete comes later). The console asks for the name first. An instance bound to a landscape: 409 `managed-service-bound` (remove it from `harthelm.yml` and Sync). Deleting a deleting or deleted instance answers its current state.