projects
Projects group a tenant's work without creating more tenants. A project is app-owned, lives in one tenant, and its creator becomes its owner in the authorization projection; membership is a Better IAM relationship on `compute-project/{id}`. See [Tenancy](/docs/guides/iam/tenancy).
Projects group a tenant's work without creating more tenants. A project is app-owned, lives in one tenant, and its creator becomes its owner in the authorization projection; membership is a Better IAM relationship on compute-project/{id}. See Tenancy.
All 4 methods are served by this release.
| Method | Kind | Authorization | Phase | Status |
|---|---|---|---|---|
create | mutation | compute:projects:manage @ compute-tenant | v0.1 | registered |
get | read | compute:projects:read @ compute-project | v0.1 | registered |
list | read | compute:projects:read @ compute-tenant + items | v0.1 | registered |
archive | mutation | compute:projects:manage @ compute-project | v0.2 | registered |
create
POST /api/compute/projects/create
Creates an active project with a DNS-label name that is unique in the tenant; returns the project.
-
Decided with
compute:projects:manageoncompute-tenant/{tenantId}. -
Idempotent per tenant, caller identity and
idempotencyKey: the project id derives from them, and the same request again returns the existing project without a second IAM decision. The same key with a different name isCONFLICT. -
A second project with the same name in the tenant is
CONFLICT. -
Emits
project.created. -
Kind: mutation
-
Authorization:
compute:projects:manage@compute-tenant -
Module:
server -
Phase: v0.1 (registered)
Input
| Field | Type | Required | Constraints |
|---|---|---|---|
tenantId | string | yes | at most 128 characters; matches ^[A-Za-z0-9._:-]{1,128}$ |
name | string | yes | at most 63 characters; matches ^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$ |
idempotencyKey | string | yes | at most 128 characters; matches ^[A-Za-z0-9._~:/+=-]{1,128}$ |
get
POST /api/compute/projects/get
Returns one project of the tenant by id.
Decided with compute:projects:read on compute-project/{projectId}. NOT_FOUND when the project is not in the tenant.
- Kind: read
- Authorization:
compute:projects:read@compute-project - Module:
server - Phase: v0.1 (registered)
Input
| Field | Type | Required | Constraints |
|---|---|---|---|
tenantId | string | yes | at most 128 characters; matches ^[A-Za-z0-9._:-]{1,128}$ |
projectId | string | yes | at most 64 characters; matches ^prj_[0-9a-hjkmnp-tv-z]{26,52}$ |
list
POST /api/compute/projects/list
Lists the tenant's projects the caller may read, ordered by id, optionally filtered by state (active or archived); returns a page with a cursor.
Decided with compute:projects:read on the tenant, then per project. Items the caller may not read are dropped from the page, so a page can hold fewer than limit items (at most 50, the default) while a cursor is still returned.
- Kind: read
- Authorization:
compute:projects:read@compute-tenant+ items - Module:
server - Phase: v0.1 (registered)
Input
| Field | Type | Required | Constraints |
|---|---|---|---|
tenantId | string | yes | at most 128 characters; matches ^[A-Za-z0-9._:-]{1,128}$ |
state | one of active, archived | ||
limit | integer | 1-50; default 50 | |
cursor | string | at most 256 characters; matches ^[A-Za-z0-9._:-]{1,256}$ |
archive
POST /api/compute/projects/archive
Marks a project archived and increments its version; returns the project.
-
Decided with
compute:projects:manageoncompute-project/{projectId}. -
Archiving an archived project returns it unchanged and emits nothing.
-
Emits
project.archived.NOT_FOUNDwhen the project is not in the tenant. -
Kind: mutation
-
Authorization:
compute:projects:manage@compute-project -
Module:
server -
Phase: v0.2 (registered)
Input
| Field | Type | Required | Constraints |
|---|---|---|---|
tenantId | string | yes | at most 128 characters; matches ^[A-Za-z0-9._:-]{1,128}$ |
projectId | string | yes | at most 64 characters; matches ^prj_[0-9a-hjkmnp-tv-z]{26,52}$ |
Better Compute is created by Sean Filimon
Last updated
profiles
The profiles group stores and checks the versioned recipes that provisioning workflows run: steps, drivers, an image, user data and host config. A version becomes immutable the first time a workflow uses it. Lookups see the tenant's own profiles, public ones, and the read-only profiles that modules ship under the tenant `builtin`. See [Profiles and images](/docs/guides/bare-metal/profiles-and-images).
providerAccounts
Provider accounts connect a tenant to an external provider registered with `vps({ providers })`, such as a cloud or a dedicated-server host. Each account's `config` is validated by its provider's manifest and holds secret references, never secret values. Provider pools create instances through an account, and `bootstrap` turns one of its machines into a bcd host. See [Providers](/docs/guides/vps/providers).