Harthelm Docs
REST APIManaged services

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.

Generated from openapi/harthelm.yaml at v1.5.0
DELETE
/managed-services/{ms}

Authorization

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

Path Parameters

ms*string

A managed service's id.

Formatuuid

Response Body

The managed service, deleting (or already deleted).

application/json
  1. response
id*string
Formatuuid
team_id*ID

Numeric resource id.

Formatint64
Range1 <= value
workspace_id?ID

Numeric resource id.

Formatint64
Range1 <= value
name*ServiceNameValue
Match^[a-z]([-a-z0-9]{0,30}[a-z0-9])?$
provider*ProviderNameValue
Match^[a-z][a-z0-9-]{0,62}$
provider_version*ProviderVersionValue
Match^[1-9][0-9]{0,5}$
plan*string

The 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*ManagedServiceStatus
  • creating, 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 with include_deleted until 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.
Value in"creating""updating""synchronized""pausing""paused""unpausing""deleting""deleted""unknown""invalid-provider"
status_detail?string

The backend's message when something failed, else empty.

paused*boolean

Asked to be paused (status says where it is).

backups*boolean

The nightly backup dumps it.

public*boolean

Asked 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?string

When the newest successful dump finished; absent before the first.

Formatdate-time
created_at*string
Formatdate-time
created_by?ID

Numeric resource id.

Formatint64
Range1 <= value
updated_at*string
Formatdate-time
deleted_at?string
Formatdate-time
purge_after?string

Tombstones, when the row goes for good.

Formatdate-time
curl -X DELETE 'https://console.example.com/api/v1/managed-services/497f6eca-6276-4993-bfeb-53cbbbba6f08'
{  "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"}

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`).

Dump a managed service now

Needs `team.managed_services`, for a bound instance also `landscape.manage` on its workspace. Runs the nightly dump of this one instance now: a Job of the backup role writes a `pg_dump` to the backup volume (`ms/<team>/<object name>-<id>/`, `<id>` the first 12 hex digits of the instance's id), recorded like the nightly runs and kept by the same retention. Follow the Operation (kind `managed_service.dump`). 409 `backups-disabled` when the installation has no backup volume or the provider cannot back up, `managed-service-paused` while paused.