Harthelm Docs
REST APIManaged services

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

Generated from openapi/harthelm.yaml at v1.5.0
POST
/teams/{team}/managed-services

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

team*integer

Numeric resource id.

Formatint64
Range1 <= value

Header Parameters

Idempotency-Key?string

Client-chosen key (at most 255 characters); a repeated key returns the first result for 24 h.

Length1 <= length <= 255

Request Body

application/json
  1. body
name*ServiceNameValue

Unique among the team's standalone instances; its objects are ms-<name> in the team's namespace.

Match^[a-z]([-a-z0-9]{0,30}[a-z0-9])?$
provider*ProviderNameValue
Match^[a-z][a-z0-9-]{0,62}$
provider_version?ProviderVersionValue

Absent takes the newest enabled version.

Match^[1-9][0-9]{0,5}$
plan?string

A 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?boolean

Dump it nightly; default true for providers that can.

public?boolean

A public browser host (S3 only, 1.4); default false.

Response Body

The managed service, creating.

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 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"}