mirror of
https://github.com/GlueOps/autoglue.git
synced 2026-02-13 04:40:05 +01:00
6703 lines
166 KiB
YAML
6703 lines
166 KiB
YAML
components:
|
|
schemas:
|
|
dto.AnnotationResponse:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
key:
|
|
type: string
|
|
organization_id:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
value:
|
|
type: string
|
|
type: object
|
|
dto.AttachAnnotationsRequest:
|
|
properties:
|
|
annotation_ids:
|
|
items:
|
|
type: string
|
|
type: array
|
|
uniqueItems: false
|
|
type: object
|
|
dto.AttachBastionRequest:
|
|
properties:
|
|
server_id:
|
|
type: string
|
|
type: object
|
|
dto.AttachCaptainDomainRequest:
|
|
properties:
|
|
domain_id:
|
|
type: string
|
|
type: object
|
|
dto.AttachLabelsRequest:
|
|
properties:
|
|
label_ids:
|
|
items:
|
|
type: string
|
|
type: array
|
|
uniqueItems: false
|
|
type: object
|
|
dto.AttachLoadBalancerRequest:
|
|
properties:
|
|
load_balancer_id:
|
|
type: string
|
|
type: object
|
|
dto.AttachNodePoolRequest:
|
|
properties:
|
|
node_pool_id:
|
|
type: string
|
|
type: object
|
|
dto.AttachRecordSetRequest:
|
|
properties:
|
|
record_set_id:
|
|
type: string
|
|
type: object
|
|
dto.AttachServersRequest:
|
|
properties:
|
|
server_ids:
|
|
items:
|
|
type: string
|
|
type: array
|
|
uniqueItems: false
|
|
type: object
|
|
dto.AttachTaintsRequest:
|
|
properties:
|
|
taint_ids:
|
|
items:
|
|
type: string
|
|
type: array
|
|
uniqueItems: false
|
|
type: object
|
|
dto.AuthStartResponse:
|
|
properties:
|
|
auth_url:
|
|
example: https://accounts.google.com/o/oauth2/v2/auth?client_id=...
|
|
type: string
|
|
type: object
|
|
dto.ClusterResponse:
|
|
properties:
|
|
apps_load_balancer:
|
|
$ref: '#/components/schemas/dto.LoadBalancerResponse'
|
|
bastion_server:
|
|
$ref: '#/components/schemas/dto.ServerResponse'
|
|
captain_domain:
|
|
$ref: '#/components/schemas/dto.DomainResponse'
|
|
certificate_key:
|
|
type: string
|
|
control_plane_record_set:
|
|
$ref: '#/components/schemas/dto.RecordSetResponse'
|
|
created_at:
|
|
type: string
|
|
glueops_load_balancer:
|
|
$ref: '#/components/schemas/dto.LoadBalancerResponse'
|
|
id:
|
|
type: string
|
|
last_error:
|
|
type: string
|
|
name:
|
|
type: string
|
|
node_pools:
|
|
items:
|
|
$ref: '#/components/schemas/dto.NodePoolResponse'
|
|
type: array
|
|
uniqueItems: false
|
|
provider:
|
|
type: string
|
|
random_token:
|
|
type: string
|
|
region:
|
|
type: string
|
|
status:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
dto.CreateAnnotationRequest:
|
|
properties:
|
|
key:
|
|
type: string
|
|
value:
|
|
type: string
|
|
type: object
|
|
dto.CreateClusterRequest:
|
|
properties:
|
|
name:
|
|
type: string
|
|
provider:
|
|
type: string
|
|
region:
|
|
type: string
|
|
type: object
|
|
dto.CreateCredentialRequest:
|
|
properties:
|
|
account_id:
|
|
maxLength: 32
|
|
type: string
|
|
kind:
|
|
description: aws_access_key, api_token, basic_auth, oauth2
|
|
type: string
|
|
name:
|
|
description: human label
|
|
maxLength: 100
|
|
type: string
|
|
provider:
|
|
enum:
|
|
- aws
|
|
- cloudflare
|
|
- hetzner
|
|
- digitalocean
|
|
- generic
|
|
type: string
|
|
region:
|
|
maxLength: 32
|
|
type: string
|
|
schema_version:
|
|
description: secret schema version
|
|
minimum: 1
|
|
type: integer
|
|
scope:
|
|
description: '{"service":"route53"} or {"arn":"..."}'
|
|
type: object
|
|
scope_kind:
|
|
enum:
|
|
- provider
|
|
- service
|
|
- resource
|
|
type: string
|
|
scope_version:
|
|
description: scope schema version
|
|
minimum: 1
|
|
type: integer
|
|
secret:
|
|
description: encrypted later
|
|
type: object
|
|
required:
|
|
- kind
|
|
- provider
|
|
- schema_version
|
|
- scope
|
|
- scope_kind
|
|
- scope_version
|
|
- secret
|
|
type: object
|
|
dto.CreateDomainRequest:
|
|
properties:
|
|
credential_id:
|
|
type: string
|
|
domain_name:
|
|
type: string
|
|
zone_id:
|
|
maxLength: 128
|
|
type: string
|
|
required:
|
|
- credential_id
|
|
- domain_name
|
|
type: object
|
|
dto.CreateLabelRequest:
|
|
properties:
|
|
key:
|
|
type: string
|
|
value:
|
|
type: string
|
|
type: object
|
|
dto.CreateLoadBalancerRequest:
|
|
properties:
|
|
kind:
|
|
enum:
|
|
- glueops
|
|
- public
|
|
example: public
|
|
type: string
|
|
name:
|
|
example: glueops
|
|
type: string
|
|
private_ip_address:
|
|
example: 192.168.0.2
|
|
type: string
|
|
public_ip_address:
|
|
example: 8.8.8.8
|
|
type: string
|
|
type: object
|
|
dto.CreateNodePoolRequest:
|
|
properties:
|
|
name:
|
|
type: string
|
|
role:
|
|
enum:
|
|
- master
|
|
- worker
|
|
type: string
|
|
type: object
|
|
dto.CreateRecordSetRequest:
|
|
properties:
|
|
name:
|
|
description: |-
|
|
Name relative to domain ("endpoint") OR FQDN ("endpoint.example.com").
|
|
Server normalizes to relative.
|
|
maxLength: 253
|
|
type: string
|
|
ttl:
|
|
maximum: 86400
|
|
minimum: 1
|
|
type: integer
|
|
type:
|
|
type: string
|
|
values:
|
|
items:
|
|
type: string
|
|
type: array
|
|
uniqueItems: false
|
|
required:
|
|
- name
|
|
- type
|
|
type: object
|
|
dto.CreateSSHRequest:
|
|
properties:
|
|
bits:
|
|
description: Only for RSA
|
|
type: integer
|
|
comment:
|
|
example: deploy@autoglue
|
|
type: string
|
|
name:
|
|
type: string
|
|
type:
|
|
description: '"rsa" (default) or "ed25519"'
|
|
type: string
|
|
type: object
|
|
dto.CreateServerRequest:
|
|
properties:
|
|
hostname:
|
|
type: string
|
|
private_ip_address:
|
|
type: string
|
|
public_ip_address:
|
|
type: string
|
|
role:
|
|
enum:
|
|
- master
|
|
- worker
|
|
- bastion
|
|
example: master|worker|bastion
|
|
type: string
|
|
ssh_key_id:
|
|
type: string
|
|
ssh_user:
|
|
type: string
|
|
status:
|
|
enum:
|
|
- pending
|
|
- provisioning
|
|
- ready
|
|
- failed
|
|
example: pending|provisioning|ready|failed
|
|
type: string
|
|
type: object
|
|
dto.CreateTaintRequest:
|
|
properties:
|
|
effect:
|
|
type: string
|
|
key:
|
|
type: string
|
|
value:
|
|
type: string
|
|
type: object
|
|
dto.CredentialOut:
|
|
properties:
|
|
account_id:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
kind:
|
|
type: string
|
|
name:
|
|
type: string
|
|
provider:
|
|
type: string
|
|
region:
|
|
type: string
|
|
schema_version:
|
|
type: integer
|
|
scope:
|
|
type: object
|
|
scope_kind:
|
|
type: string
|
|
scope_version:
|
|
type: integer
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
dto.DomainResponse:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
credential_id:
|
|
type: string
|
|
domain_name:
|
|
type: string
|
|
id:
|
|
type: string
|
|
last_error:
|
|
type: string
|
|
organization_id:
|
|
type: string
|
|
status:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
zone_id:
|
|
type: string
|
|
type: object
|
|
dto.EnqueueRequest:
|
|
properties:
|
|
payload:
|
|
type: object
|
|
queue:
|
|
example: default
|
|
type: string
|
|
run_at:
|
|
example: "2025-11-05T08:00:00Z"
|
|
type: string
|
|
type:
|
|
example: email.send
|
|
type: string
|
|
type: object
|
|
dto.JWK:
|
|
properties:
|
|
alg:
|
|
example: RS256
|
|
type: string
|
|
e:
|
|
example: AQAB
|
|
type: string
|
|
kid:
|
|
example: 7c6f1d0a-7a98-4e6a-9dbf-6b1af4b9f345
|
|
type: string
|
|
kty:
|
|
example: RSA
|
|
type: string
|
|
"n":
|
|
type: string
|
|
use:
|
|
example: sig
|
|
type: string
|
|
x:
|
|
type: string
|
|
type: object
|
|
dto.JWKS:
|
|
properties:
|
|
keys:
|
|
items:
|
|
$ref: '#/components/schemas/dto.JWK'
|
|
type: array
|
|
uniqueItems: false
|
|
type: object
|
|
dto.Job:
|
|
properties:
|
|
attempts:
|
|
example: 0
|
|
type: integer
|
|
created_at:
|
|
example: "2025-11-04T09:30:00Z"
|
|
type: string
|
|
id:
|
|
example: 01HF7SZK8Z8WG1M3J7S2Z8M2N6
|
|
type: string
|
|
last_error:
|
|
example: error message
|
|
type: string
|
|
max_attempts:
|
|
example: 3
|
|
type: integer
|
|
payload: {}
|
|
queue:
|
|
example: default
|
|
type: string
|
|
run_at:
|
|
example: "2025-11-04T09:30:00Z"
|
|
type: string
|
|
status:
|
|
$ref: '#/components/schemas/dto.JobStatus'
|
|
type:
|
|
example: email.send
|
|
type: string
|
|
updated_at:
|
|
example: "2025-11-04T09:30:00Z"
|
|
type: string
|
|
type: object
|
|
dto.JobStatus:
|
|
enum:
|
|
- queued|running|succeeded|failed|canceled|retrying|scheduled
|
|
example: queued
|
|
type: string
|
|
x-enum-varnames:
|
|
- StatusQueued
|
|
- StatusRunning
|
|
- StatusSucceeded
|
|
- StatusFailed
|
|
- StatusCanceled
|
|
- StatusRetrying
|
|
- StatusScheduled
|
|
dto.LabelResponse:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
key:
|
|
type: string
|
|
organization_id:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
value:
|
|
type: string
|
|
type: object
|
|
dto.LoadBalancerResponse:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
kind:
|
|
type: string
|
|
name:
|
|
type: string
|
|
organization_id:
|
|
type: string
|
|
private_ip_address:
|
|
type: string
|
|
public_ip_address:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
dto.LogoutRequest:
|
|
properties:
|
|
refresh_token:
|
|
example: m0l9o8rT3t0V8d3eFf...
|
|
type: string
|
|
type: object
|
|
dto.NodePoolResponse:
|
|
properties:
|
|
annotations:
|
|
items:
|
|
$ref: '#/components/schemas/dto.AnnotationResponse'
|
|
type: array
|
|
uniqueItems: false
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
labels:
|
|
items:
|
|
$ref: '#/components/schemas/dto.LabelResponse'
|
|
type: array
|
|
uniqueItems: false
|
|
name:
|
|
type: string
|
|
organization_id:
|
|
type: string
|
|
role:
|
|
enum:
|
|
- master
|
|
- worker
|
|
type: string
|
|
servers:
|
|
items:
|
|
$ref: '#/components/schemas/dto.ServerResponse'
|
|
type: array
|
|
uniqueItems: false
|
|
taints:
|
|
items:
|
|
$ref: '#/components/schemas/dto.TaintResponse'
|
|
type: array
|
|
uniqueItems: false
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
dto.PageJob:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/components/schemas/dto.Job'
|
|
type: array
|
|
uniqueItems: false
|
|
page:
|
|
example: 1
|
|
type: integer
|
|
page_size:
|
|
example: 25
|
|
type: integer
|
|
total:
|
|
example: 120
|
|
type: integer
|
|
type: object
|
|
dto.QueueInfo:
|
|
properties:
|
|
failed:
|
|
example: 5
|
|
type: integer
|
|
name:
|
|
example: default
|
|
type: string
|
|
pending:
|
|
example: 42
|
|
type: integer
|
|
running:
|
|
example: 3
|
|
type: integer
|
|
scheduled:
|
|
example: 7
|
|
type: integer
|
|
type: object
|
|
dto.RecordSetResponse:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
domain_id:
|
|
type: string
|
|
fingerprint:
|
|
type: string
|
|
id:
|
|
type: string
|
|
last_error:
|
|
type: string
|
|
name:
|
|
type: string
|
|
owner:
|
|
type: string
|
|
status:
|
|
type: string
|
|
ttl:
|
|
type: integer
|
|
type:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
values:
|
|
description: '[]string JSON'
|
|
type: object
|
|
type: object
|
|
dto.RefreshRequest:
|
|
properties:
|
|
refresh_token:
|
|
example: m0l9o8rT3t0V8d3eFf...
|
|
type: string
|
|
type: object
|
|
dto.ServerResponse:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
hostname:
|
|
type: string
|
|
id:
|
|
type: string
|
|
organization_id:
|
|
type: string
|
|
private_ip_address:
|
|
type: string
|
|
public_ip_address:
|
|
type: string
|
|
role:
|
|
enum:
|
|
- master
|
|
- worker
|
|
- bastion
|
|
example: master|worker|bastion
|
|
type: string
|
|
ssh_key_id:
|
|
type: string
|
|
ssh_user:
|
|
type: string
|
|
status:
|
|
enum:
|
|
- pending
|
|
- provisioning
|
|
- ready
|
|
- failed
|
|
example: pending|provisioning|ready|failed
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
dto.SetKubeconfigRequest:
|
|
properties:
|
|
kubeconfig:
|
|
type: string
|
|
type: object
|
|
dto.SshResponse:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
fingerprint:
|
|
type: string
|
|
id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
organization_id:
|
|
type: string
|
|
public_key:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
dto.SshRevealResponse:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
fingerprint:
|
|
type: string
|
|
id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
organization_id:
|
|
type: string
|
|
private_key:
|
|
type: string
|
|
public_key:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
dto.TaintResponse:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
effect:
|
|
type: string
|
|
id:
|
|
type: string
|
|
key:
|
|
type: string
|
|
organization_id:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
value:
|
|
type: string
|
|
type: object
|
|
dto.TokenPair:
|
|
properties:
|
|
access_token:
|
|
example: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Ij...
|
|
type: string
|
|
expires_in:
|
|
example: 3600
|
|
type: integer
|
|
refresh_token:
|
|
example: m0l9o8rT3t0V8d3eFf....
|
|
type: string
|
|
token_type:
|
|
example: Bearer
|
|
type: string
|
|
type: object
|
|
dto.UpdateAnnotationRequest:
|
|
properties:
|
|
key:
|
|
type: string
|
|
value:
|
|
type: string
|
|
type: object
|
|
dto.UpdateClusterRequest:
|
|
properties:
|
|
name:
|
|
type: string
|
|
provider:
|
|
type: string
|
|
region:
|
|
type: string
|
|
type: object
|
|
dto.UpdateCredentialRequest:
|
|
properties:
|
|
account_id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
region:
|
|
type: string
|
|
scope:
|
|
type: object
|
|
scope_kind:
|
|
type: string
|
|
scope_version:
|
|
type: integer
|
|
secret:
|
|
description: set if rotating
|
|
type: object
|
|
type: object
|
|
dto.UpdateDomainRequest:
|
|
properties:
|
|
credential_id:
|
|
type: string
|
|
domain_name:
|
|
type: string
|
|
status:
|
|
enum:
|
|
- pending
|
|
- provisioning
|
|
- ready
|
|
- failed
|
|
type: string
|
|
zone_id:
|
|
maxLength: 128
|
|
type: string
|
|
type: object
|
|
dto.UpdateLabelRequest:
|
|
properties:
|
|
key:
|
|
type: string
|
|
value:
|
|
type: string
|
|
type: object
|
|
dto.UpdateLoadBalancerRequest:
|
|
properties:
|
|
kind:
|
|
enum:
|
|
- glueops
|
|
- public
|
|
example: public
|
|
type: string
|
|
name:
|
|
example: glue
|
|
type: string
|
|
private_ip_address:
|
|
example: 192.168.0.2
|
|
type: string
|
|
public_ip_address:
|
|
example: 8.8.8.8
|
|
type: string
|
|
type: object
|
|
dto.UpdateNodePoolRequest:
|
|
properties:
|
|
name:
|
|
type: string
|
|
role:
|
|
enum:
|
|
- master
|
|
- worker
|
|
type: string
|
|
type: object
|
|
dto.UpdateRecordSetRequest:
|
|
properties:
|
|
name:
|
|
description: Any change flips status back to pending (worker will UPSERT)
|
|
maxLength: 253
|
|
type: string
|
|
status:
|
|
enum:
|
|
- pending
|
|
- provisioning
|
|
- ready
|
|
- failed
|
|
type: string
|
|
ttl:
|
|
maximum: 86400
|
|
minimum: 1
|
|
type: integer
|
|
type:
|
|
type: string
|
|
values:
|
|
items:
|
|
type: string
|
|
type: array
|
|
uniqueItems: false
|
|
type: object
|
|
dto.UpdateServerRequest:
|
|
properties:
|
|
hostname:
|
|
type: string
|
|
private_ip_address:
|
|
type: string
|
|
public_ip_address:
|
|
type: string
|
|
role:
|
|
enum:
|
|
- master
|
|
- worker
|
|
- bastion
|
|
example: master|worker|bastion
|
|
type: string
|
|
ssh_key_id:
|
|
type: string
|
|
ssh_user:
|
|
type: string
|
|
status:
|
|
enum:
|
|
- pending
|
|
- provisioning
|
|
- ready
|
|
- failed
|
|
example: pending|provisioning|ready|failed
|
|
type: string
|
|
type: object
|
|
dto.UpdateTaintRequest:
|
|
properties:
|
|
effect:
|
|
type: string
|
|
key:
|
|
type: string
|
|
value:
|
|
type: string
|
|
type: object
|
|
handlers.HealthStatus:
|
|
properties:
|
|
status:
|
|
example: ok
|
|
type: string
|
|
type: object
|
|
handlers.VersionResponse:
|
|
properties:
|
|
built:
|
|
example: "2025-11-08T12:34:56Z"
|
|
type: string
|
|
builtBy:
|
|
example: ci
|
|
type: string
|
|
commit:
|
|
example: a1b2c3d
|
|
type: string
|
|
commitTime:
|
|
example: "2025-11-08T12:31:00Z"
|
|
type: string
|
|
go:
|
|
example: go1.23.3
|
|
type: string
|
|
goArch:
|
|
example: amd64
|
|
type: string
|
|
goOS:
|
|
example: linux
|
|
type: string
|
|
modified:
|
|
example: false
|
|
type: boolean
|
|
revision:
|
|
example: a1b2c3d4e5f6abcdef
|
|
type: string
|
|
vcs:
|
|
example: git
|
|
type: string
|
|
version:
|
|
example: 1.4.2
|
|
type: string
|
|
type: object
|
|
handlers.createUserKeyRequest:
|
|
properties:
|
|
expires_in_hours:
|
|
description: optional TTL
|
|
type: integer
|
|
name:
|
|
type: string
|
|
type: object
|
|
handlers.meResponse:
|
|
properties:
|
|
avatar_url:
|
|
type: string
|
|
created_at:
|
|
format: date-time
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
emails:
|
|
items:
|
|
$ref: '#/components/schemas/models.UserEmail'
|
|
type: array
|
|
uniqueItems: false
|
|
id:
|
|
description: 'example: 3fa85f64-5717-4562-b3fc-2c963f66afa6'
|
|
format: uuid
|
|
type: string
|
|
is_admin:
|
|
type: boolean
|
|
is_disabled:
|
|
type: boolean
|
|
organizations:
|
|
items:
|
|
$ref: '#/components/schemas/models.Organization'
|
|
type: array
|
|
uniqueItems: false
|
|
primary_email:
|
|
type: string
|
|
updated_at:
|
|
format: date-time
|
|
type: string
|
|
type: object
|
|
handlers.memberOut:
|
|
properties:
|
|
email:
|
|
type: string
|
|
role:
|
|
description: owner/admin/member
|
|
type: string
|
|
user_id:
|
|
format: uuid
|
|
type: string
|
|
type: object
|
|
handlers.memberUpsertReq:
|
|
properties:
|
|
role:
|
|
example: member
|
|
type: string
|
|
user_id:
|
|
format: uuid
|
|
type: string
|
|
type: object
|
|
handlers.orgCreateReq:
|
|
properties:
|
|
domain:
|
|
example: acme.com
|
|
type: string
|
|
name:
|
|
example: Acme Corp
|
|
type: string
|
|
type: object
|
|
handlers.orgKeyCreateReq:
|
|
properties:
|
|
expires_in_hours:
|
|
example: 720
|
|
type: integer
|
|
name:
|
|
example: automation-bot
|
|
type: string
|
|
type: object
|
|
handlers.orgKeyCreateResp:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
expires_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
org_key:
|
|
description: 'shown once:'
|
|
type: string
|
|
org_secret:
|
|
description: 'shown once:'
|
|
type: string
|
|
scope:
|
|
description: '"org"'
|
|
type: string
|
|
type: object
|
|
handlers.orgUpdateReq:
|
|
properties:
|
|
domain:
|
|
type: string
|
|
name:
|
|
type: string
|
|
type: object
|
|
handlers.updateMeRequest:
|
|
properties:
|
|
display_name:
|
|
type: string
|
|
type: object
|
|
handlers.userAPIKeyOut:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
expires_at:
|
|
type: string
|
|
id:
|
|
format: uuid
|
|
type: string
|
|
last_used_at:
|
|
type: string
|
|
name:
|
|
type: string
|
|
plain:
|
|
description: 'Shown only on create:'
|
|
type: string
|
|
scope:
|
|
description: '"user"'
|
|
type: string
|
|
type: object
|
|
models.APIKey:
|
|
properties:
|
|
created_at:
|
|
format: date-time
|
|
type: string
|
|
expires_at:
|
|
format: date-time
|
|
type: string
|
|
id:
|
|
format: uuid
|
|
type: string
|
|
last_used_at:
|
|
format: date-time
|
|
type: string
|
|
name:
|
|
type: string
|
|
org_id:
|
|
format: uuid
|
|
type: string
|
|
prefix:
|
|
type: string
|
|
revoked:
|
|
type: boolean
|
|
scope:
|
|
type: string
|
|
updated_at:
|
|
format: date-time
|
|
type: string
|
|
user_id:
|
|
format: uuid
|
|
type: string
|
|
type: object
|
|
models.Organization:
|
|
properties:
|
|
created_at:
|
|
format: date-time
|
|
type: string
|
|
domain:
|
|
type: string
|
|
id:
|
|
description: 'example: 3fa85f64-5717-4562-b3fc-2c963f66afa6'
|
|
format: uuid
|
|
type: string
|
|
name:
|
|
type: string
|
|
updated_at:
|
|
format: date-time
|
|
type: string
|
|
type: object
|
|
models.User:
|
|
properties:
|
|
avatar_url:
|
|
type: string
|
|
created_at:
|
|
format: date-time
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
id:
|
|
description: 'example: 3fa85f64-5717-4562-b3fc-2c963f66afa6'
|
|
format: uuid
|
|
type: string
|
|
is_admin:
|
|
type: boolean
|
|
is_disabled:
|
|
type: boolean
|
|
primary_email:
|
|
type: string
|
|
updated_at:
|
|
format: date-time
|
|
type: string
|
|
type: object
|
|
models.UserEmail:
|
|
properties:
|
|
created_at:
|
|
format: date-time
|
|
type: string
|
|
email:
|
|
type: string
|
|
id:
|
|
description: 'example: 3fa85f64-5717-4562-b3fc-2c963f66afa6'
|
|
format: uuid
|
|
type: string
|
|
is_primary:
|
|
type: boolean
|
|
is_verified:
|
|
type: boolean
|
|
updated_at:
|
|
format: date-time
|
|
type: string
|
|
user:
|
|
$ref: '#/components/schemas/models.User'
|
|
user_id:
|
|
format: uuid
|
|
type: string
|
|
type: object
|
|
utils.ErrorResponse:
|
|
properties:
|
|
code:
|
|
description: |-
|
|
A machine-readable error code, e.g. "validation_error"
|
|
example: validation_error
|
|
type: string
|
|
message:
|
|
description: |-
|
|
Human-readable message
|
|
example: slug is required
|
|
type: string
|
|
type: object
|
|
securitySchemes:
|
|
ApiKeyAuth:
|
|
description: User API key
|
|
in: header
|
|
name: X-API-KEY
|
|
type: apiKey
|
|
BearerAuth:
|
|
description: Bearer token authentication
|
|
in: header
|
|
name: Authorization
|
|
type: apiKey
|
|
OrgKeyAuth:
|
|
description: Org-level key/secret authentication
|
|
in: header
|
|
name: X-ORG-KEY
|
|
type: apiKey
|
|
OrgSecretAuth:
|
|
description: Org-level secret
|
|
in: header
|
|
name: X-ORG-SECRET
|
|
type: apiKey
|
|
externalDocs:
|
|
description: ""
|
|
url: ""
|
|
info:
|
|
contact:
|
|
name: GlueOps
|
|
description: API for managing K3s clusters across cloud providers
|
|
title: AutoGlue API
|
|
version: ""
|
|
openapi: 3.1.0
|
|
paths:
|
|
/.well-known/jwks.json:
|
|
get:
|
|
description: Returns the JSON Web Key Set for token verification
|
|
operationId: getJWKS
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.JWKS'
|
|
description: OK
|
|
summary: Get JWKS
|
|
tags:
|
|
- Auth
|
|
/admin/archer/jobs:
|
|
get:
|
|
description: Paginated background jobs with optional filters. Search `q` may
|
|
match id, type, error, payload (implementation-dependent).
|
|
operationId: AdminListArcherJobs
|
|
parameters:
|
|
- description: Filter by status
|
|
in: query
|
|
name: status
|
|
schema:
|
|
enum:
|
|
- queued
|
|
- running
|
|
- succeeded
|
|
- failed
|
|
- canceled
|
|
- retrying
|
|
- scheduled
|
|
type: string
|
|
- description: Filter by queue name / worker name
|
|
in: query
|
|
name: queue
|
|
schema:
|
|
type: string
|
|
- description: Free-text search
|
|
in: query
|
|
name: q
|
|
schema:
|
|
type: string
|
|
- description: Page number
|
|
in: query
|
|
name: page
|
|
schema:
|
|
default: 1
|
|
type: integer
|
|
- description: Items per page
|
|
in: query
|
|
name: page_size
|
|
schema:
|
|
default: 25
|
|
maximum: 100
|
|
minimum: 1
|
|
type: integer
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.PageJob'
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: forbidden
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: internal error
|
|
security:
|
|
- BearerAuth: []
|
|
summary: List Archer jobs (admin)
|
|
tags:
|
|
- ArcherAdmin
|
|
post:
|
|
description: Create a job immediately or schedule it for the future via `run_at`.
|
|
operationId: AdminEnqueueArcherJob
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.EnqueueRequest'
|
|
description: Job parameters
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.Job'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid json or missing fields
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: forbidden
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: internal error
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Enqueue a new Archer job (admin)
|
|
tags:
|
|
- ArcherAdmin
|
|
/admin/archer/jobs/{id}/cancel:
|
|
post:
|
|
description: Set job status to canceled if cancellable. For running jobs, this
|
|
only affects future picks; wire to Archer if you need active kill.
|
|
operationId: AdminCancelArcherJob
|
|
parameters:
|
|
- description: Job ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.Job'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid job or not cancellable
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: forbidden
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Cancel an Archer job (admin)
|
|
tags:
|
|
- ArcherAdmin
|
|
/admin/archer/jobs/{id}/retry:
|
|
post:
|
|
description: Marks the job retriable (DB flip). Swap this for an Archer admin
|
|
call if you expose one.
|
|
operationId: AdminRetryArcherJob
|
|
parameters:
|
|
- description: Job ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.Job'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid job or not eligible
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: forbidden
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Retry a failed/canceled Archer job (admin)
|
|
tags:
|
|
- ArcherAdmin
|
|
/admin/archer/queues:
|
|
get:
|
|
description: Summary metrics per queue (pending, running, failed, scheduled).
|
|
operationId: AdminListArcherQueues
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.QueueInfo'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: forbidden
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: internal error
|
|
security:
|
|
- BearerAuth: []
|
|
summary: List Archer queues (admin)
|
|
tags:
|
|
- ArcherAdmin
|
|
/annotations:
|
|
get:
|
|
description: 'Returns annotations for the organization in X-Org-ID. Filters:
|
|
`key`, `value`, and `q` (key contains). Add `include=node_pools` to include
|
|
linked node pools.'
|
|
operationId: ListAnnotations
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Exact key
|
|
in: query
|
|
name: key
|
|
schema:
|
|
type: string
|
|
- description: Exact value
|
|
in: query
|
|
name: value
|
|
schema:
|
|
type: string
|
|
- description: key contains (case-insensitive)
|
|
in: query
|
|
name: q
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.AnnotationResponse'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: failed to list annotations
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List annotations (org scoped)
|
|
tags:
|
|
- Annotations
|
|
post:
|
|
description: Creates an annotation.
|
|
operationId: CreateAnnotation
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.CreateAnnotationRequest'
|
|
description: Annotation payload
|
|
required: true
|
|
responses:
|
|
"201":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.AnnotationResponse'
|
|
description: Created
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid json / missing fields
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: create failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Create annotation (org scoped)
|
|
tags:
|
|
- Annotations
|
|
/annotations/{id}:
|
|
delete:
|
|
description: Permanently deletes the annotation.
|
|
operationId: DeleteAnnotation
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Annotation ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: delete failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Delete annotation (org scoped)
|
|
tags:
|
|
- Annotations
|
|
get:
|
|
description: Returns one annotation. Add `include=node_pools` to include node
|
|
pools.
|
|
operationId: GetAnnotation
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Annotation ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.AnnotationResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: fetch failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Get annotation by ID (org scoped)
|
|
tags:
|
|
- Annotations
|
|
patch:
|
|
description: Partially update annotation fields.
|
|
operationId: UpdateAnnotation
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Annotation ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.UpdateAnnotationRequest'
|
|
description: Fields to update
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.AnnotationResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id / invalid json
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: update failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Update annotation (org scoped)
|
|
tags:
|
|
- Annotations
|
|
/auth/{provider}/callback:
|
|
get:
|
|
operationId: AuthCallback
|
|
parameters:
|
|
- description: google|github
|
|
in: path
|
|
name: provider
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.TokenPair'
|
|
description: OK
|
|
summary: Handle social login callback
|
|
tags:
|
|
- Auth
|
|
/auth/{provider}/start:
|
|
post:
|
|
description: Returns provider authorization URL for the frontend to redirect
|
|
operationId: AuthStart
|
|
parameters:
|
|
- description: google|github
|
|
in: path
|
|
name: provider
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.AuthStartResponse'
|
|
description: OK
|
|
summary: Begin social login
|
|
tags:
|
|
- Auth
|
|
/auth/logout:
|
|
post:
|
|
operationId: Logout
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.LogoutRequest'
|
|
description: Refresh token
|
|
required: true
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
summary: Revoke refresh token family (logout everywhere)
|
|
tags:
|
|
- Auth
|
|
/auth/refresh:
|
|
post:
|
|
operationId: Refresh
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.RefreshRequest'
|
|
description: Refresh token
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.TokenPair'
|
|
description: OK
|
|
summary: Rotate refresh token
|
|
tags:
|
|
- Auth
|
|
/clusters:
|
|
get:
|
|
description: Returns clusters for the organization in X-Org-ID. Filter by `q`
|
|
(name contains).
|
|
operationId: ListClusters
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Name contains (case-insensitive)
|
|
in: query
|
|
name: q
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: failed to list clusters
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List clusters (org scoped)
|
|
tags:
|
|
- Clusters
|
|
post:
|
|
description: Creates a cluster. Status is managed by the system and starts as
|
|
`pre_pending` for validation.
|
|
operationId: CreateCluster
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.CreateClusterRequest'
|
|
description: payload
|
|
required: true
|
|
responses:
|
|
"201":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: Created
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid json
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: create failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Create cluster (org scoped)
|
|
tags:
|
|
- Clusters
|
|
/clusters/{clusterID}:
|
|
delete:
|
|
description: Deletes the cluster. Related resources are cleaned up via DB constraints
|
|
(e.g. CASCADE).
|
|
operationId: DeleteCluster
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: deleted
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Delete a cluster (org scoped)
|
|
tags:
|
|
- Clusters
|
|
get:
|
|
description: Returns a cluster with all related resources (domain, record set,
|
|
load balancers, bastion, node pools).
|
|
operationId: GetCluster
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Get a single cluster by ID (org scoped)
|
|
tags:
|
|
- Clusters
|
|
patch:
|
|
description: Updates the cluster name, provider, and/or region. Status is managed
|
|
by the system.
|
|
operationId: UpdateCluster
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.UpdateClusterRequest'
|
|
description: payload
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Update basic cluster details (org scoped)
|
|
tags:
|
|
- Clusters
|
|
/clusters/{clusterID}/apps-load-balancer:
|
|
delete:
|
|
description: Clears apps_load_balancer_id on the cluster.
|
|
operationId: DetachAppsLoadBalancer
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Detach the apps load balancer from a cluster
|
|
tags:
|
|
- Clusters
|
|
post:
|
|
description: Sets apps_load_balancer_id on the cluster.
|
|
operationId: AttachAppsLoadBalancer
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.AttachLoadBalancerRequest'
|
|
description: payload
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster or load balancer not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Attach an apps load balancer to a cluster
|
|
tags:
|
|
- Clusters
|
|
/clusters/{clusterID}/bastion:
|
|
delete:
|
|
description: Clears bastion_server_id on the cluster.
|
|
operationId: DetachBastionServer
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Detach the bastion server from a cluster
|
|
tags:
|
|
- Clusters
|
|
post:
|
|
description: Sets bastion_server_id on the cluster.
|
|
operationId: AttachBastionServer
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.AttachBastionRequest'
|
|
description: payload
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster or server not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Attach a bastion server to a cluster
|
|
tags:
|
|
- Clusters
|
|
/clusters/{clusterID}/captain-domain:
|
|
delete:
|
|
description: Clears captain_domain_id on the cluster. This will likely cause
|
|
the cluster to become incomplete.
|
|
operationId: DetachCaptainDomain
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Detach the captain domain from a cluster
|
|
tags:
|
|
- Clusters
|
|
post:
|
|
description: Sets captain_domain_id on the cluster. Validation of shape happens
|
|
asynchronously.
|
|
operationId: AttachCaptainDomain
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.AttachCaptainDomainRequest'
|
|
description: payload
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster or domain not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Attach a captain domain to a cluster
|
|
tags:
|
|
- Clusters
|
|
/clusters/{clusterID}/control-plane-record-set:
|
|
delete:
|
|
description: Clears control_plane_record_set_id on the cluster.
|
|
operationId: DetachControlPlaneRecordSet
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Detach the control plane record set from a cluster
|
|
tags:
|
|
- Clusters
|
|
post:
|
|
description: Sets control_plane_record_set_id on the cluster.
|
|
operationId: AttachControlPlaneRecordSet
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.AttachRecordSetRequest'
|
|
description: payload
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster or record set not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Attach a control plane record set to a cluster
|
|
tags:
|
|
- Clusters
|
|
/clusters/{clusterID}/glueops-load-balancer:
|
|
delete:
|
|
description: Clears glueops_load_balancer_id on the cluster.
|
|
operationId: DetachGlueOpsLoadBalancer
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Detach the GlueOps/control-plane load balancer from a cluster
|
|
tags:
|
|
- Clusters
|
|
post:
|
|
description: Sets glueops_load_balancer_id on the cluster.
|
|
operationId: AttachGlueOpsLoadBalancer
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.AttachLoadBalancerRequest'
|
|
description: payload
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster or load balancer not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Attach a GlueOps/control-plane load balancer to a cluster
|
|
tags:
|
|
- Clusters
|
|
/clusters/{clusterID}/kubeconfig:
|
|
delete:
|
|
description: Removes the encrypted kubeconfig, IV, and tag from the cluster
|
|
record.
|
|
operationId: ClearClusterKubeconfig
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Clear the kubeconfig for a cluster
|
|
tags:
|
|
- Clusters
|
|
post:
|
|
description: Stores the kubeconfig encrypted per organization. The kubeconfig
|
|
is never returned in responses.
|
|
operationId: SetClusterKubeconfig
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.SetKubeconfigRequest'
|
|
description: payload
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Set (or replace) the kubeconfig for a cluster
|
|
tags:
|
|
- Clusters
|
|
/clusters/{clusterID}/node-pools:
|
|
post:
|
|
description: Adds an entry in the cluster_node_pools join table.
|
|
operationId: AttachNodePool
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.AttachNodePoolRequest'
|
|
description: payload
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster or node pool not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Attach a node pool to a cluster
|
|
tags:
|
|
- Clusters
|
|
/clusters/{clusterID}/node-pools/{nodePoolID}:
|
|
delete:
|
|
description: Removes an entry from the cluster_node_pools join table.
|
|
operationId: DetachNodePool
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Cluster ID
|
|
in: path
|
|
name: clusterID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- description: Node Pool ID
|
|
in: path
|
|
name: nodePoolID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ClusterResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: bad request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: cluster or node pool not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Detach a node pool from a cluster
|
|
tags:
|
|
- Clusters
|
|
/credentials:
|
|
get:
|
|
description: Returns credential metadata for the current org. Secrets are never
|
|
returned.
|
|
operationId: ListCredentials
|
|
parameters:
|
|
- description: Organization ID (UUID)
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Filter by provider (e.g., aws)
|
|
in: query
|
|
name: provider
|
|
schema:
|
|
type: string
|
|
- description: Filter by kind (e.g., aws_access_key)
|
|
in: query
|
|
name: kind
|
|
schema:
|
|
type: string
|
|
- description: Filter by scope kind (provider/service/resource)
|
|
in: query
|
|
name: scope_kind
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.CredentialOut'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: internal server error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List credentials (metadata only)
|
|
tags:
|
|
- Credentials
|
|
post:
|
|
operationId: CreateCredential
|
|
parameters:
|
|
- description: Organization ID (UUID)
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.CreateCredentialRequest'
|
|
description: Credential payload
|
|
required: true
|
|
responses:
|
|
"201":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.CredentialOut'
|
|
description: Created
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: internal server error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Create a credential (encrypts secret)
|
|
tags:
|
|
- Credentials
|
|
/credentials/{id}:
|
|
delete:
|
|
operationId: DeleteCredential
|
|
parameters:
|
|
- description: Organization ID (UUID)
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Credential ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Delete credential
|
|
tags:
|
|
- Credentials
|
|
get:
|
|
operationId: GetCredential
|
|
parameters:
|
|
- description: Organization ID (UUID)
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Credential ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.CredentialOut'
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: internal server error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Get credential by ID (metadata only)
|
|
tags:
|
|
- Credentials
|
|
patch:
|
|
operationId: UpdateCredential
|
|
parameters:
|
|
- description: Organization ID (UUID)
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Credential ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.UpdateCredentialRequest'
|
|
description: Fields to update
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.CredentialOut'
|
|
description: OK
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: X-Org-ID required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Update credential metadata and/or rotate secret
|
|
tags:
|
|
- Credentials
|
|
/credentials/{id}/reveal:
|
|
post:
|
|
operationId: RevealCredential
|
|
parameters:
|
|
- description: Organization ID (UUID)
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Credential ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
additionalProperties: {}
|
|
type: object
|
|
description: OK
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Reveal decrypted secret (one-time read)
|
|
tags:
|
|
- Credentials
|
|
/dns/domains:
|
|
get:
|
|
description: 'Returns domains for X-Org-ID. Filters: `domain_name`, `status`,
|
|
`q` (contains).'
|
|
operationId: ListDomains
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Exact domain name (lowercase, no trailing dot)
|
|
in: query
|
|
name: domain_name
|
|
schema:
|
|
type: string
|
|
- description: pending|provisioning|ready|failed
|
|
in: query
|
|
name: status
|
|
schema:
|
|
type: string
|
|
- description: Domain contains (case-insensitive)
|
|
in: query
|
|
name: q
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.DomainResponse'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List domains (org scoped)
|
|
tags:
|
|
- DNS
|
|
post:
|
|
description: Creates a domain bound to a Route 53 scoped credential. Archer
|
|
will backfill ZoneID if omitted.
|
|
operationId: CreateDomain
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.CreateDomainRequest'
|
|
description: Domain payload
|
|
required: true
|
|
responses:
|
|
"201":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.DomainResponse'
|
|
description: Created
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: validation error
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: db error
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Create a domain (org scoped)
|
|
tags:
|
|
- DNS
|
|
/dns/domains/{domain_id}/records:
|
|
get:
|
|
description: 'Filters: `name`, `type`, `status`.'
|
|
operationId: ListRecordSets
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Domain ID (UUID)
|
|
in: path
|
|
name: domain_id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- description: Exact relative name or FQDN (server normalizes)
|
|
in: query
|
|
name: name
|
|
schema:
|
|
type: string
|
|
- description: RR type (A, AAAA, CNAME, TXT, MX, NS, SRV, CAA)
|
|
in: query
|
|
name: type
|
|
schema:
|
|
type: string
|
|
- description: pending|provisioning|ready|failed
|
|
in: query
|
|
name: status
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.RecordSetResponse'
|
|
type: array
|
|
description: OK
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: domain not found
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List record sets for a domain
|
|
tags:
|
|
- DNS
|
|
post:
|
|
operationId: CreateRecordSet
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Domain ID (UUID)
|
|
in: path
|
|
name: domain_id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.CreateRecordSetRequest'
|
|
description: Record set payload
|
|
required: true
|
|
responses:
|
|
"201":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.RecordSetResponse'
|
|
description: Created
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: validation error
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: domain not found
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Create a record set (pending; Archer will UPSERT to Route 53)
|
|
tags:
|
|
- DNS
|
|
/dns/domains/{id}:
|
|
delete:
|
|
operationId: DeleteDomain
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Domain ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Delete a domain
|
|
tags:
|
|
- DNS
|
|
get:
|
|
operationId: GetDomain
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Domain ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.DomainResponse'
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Get a domain (org scoped)
|
|
tags:
|
|
- DNS
|
|
patch:
|
|
operationId: UpdateDomain
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Domain ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.UpdateDomainRequest'
|
|
description: Fields to update
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.DomainResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: validation error
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Update a domain (org scoped)
|
|
tags:
|
|
- DNS
|
|
/dns/records/{id}:
|
|
delete:
|
|
operationId: DeleteRecordSet
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Record Set ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Delete a record set (API removes row; worker can optionally handle
|
|
external deletion policy)
|
|
tags:
|
|
- DNS
|
|
patch:
|
|
operationId: UpdateRecordSet
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Record Set ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.UpdateRecordSetRequest'
|
|
description: Fields to update
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.RecordSetResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: validation error
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Update a record set (flips to pending for reconciliation)
|
|
tags:
|
|
- DNS
|
|
/healthz:
|
|
get:
|
|
description: Returns 200 OK when the service is up
|
|
operationId: HealthCheck // operationId
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/handlers.HealthStatus'
|
|
description: OK
|
|
summary: Basic health check
|
|
tags:
|
|
- Health
|
|
/labels:
|
|
get:
|
|
description: 'Returns node labels for the organization in X-Org-ID. Filters:
|
|
`key`, `value`, and `q` (key contains). Add `include=node_pools` to include
|
|
linked node groups.'
|
|
operationId: ListLabels
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Exact key
|
|
in: query
|
|
name: key
|
|
schema:
|
|
type: string
|
|
- description: Exact value
|
|
in: query
|
|
name: value
|
|
schema:
|
|
type: string
|
|
- description: Key contains (case-insensitive)
|
|
in: query
|
|
name: q
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.LabelResponse'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: failed to list node taints
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List node labels (org scoped)
|
|
tags:
|
|
- Labels
|
|
post:
|
|
description: Creates a label.
|
|
operationId: CreateLabel
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.CreateLabelRequest'
|
|
description: Label payload
|
|
required: true
|
|
responses:
|
|
"201":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.LabelResponse'
|
|
description: Created
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid json / missing fields / invalid node_pool_ids
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: create failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Create label (org scoped)
|
|
tags:
|
|
- Labels
|
|
/labels/{id}:
|
|
delete:
|
|
description: Permanently deletes the label.
|
|
operationId: DeleteLabel
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Label ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: delete failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Delete label (org scoped)
|
|
tags:
|
|
- Labels
|
|
get:
|
|
description: Returns one label.
|
|
operationId: GetLabel
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Label ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.LabelResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: fetch failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Get label by ID (org scoped)
|
|
tags:
|
|
- Labels
|
|
patch:
|
|
description: Partially update label fields.
|
|
operationId: UpdateLabel
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Label ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.UpdateLabelRequest'
|
|
description: Fields to update
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.LabelResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id / invalid json
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: update failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Update label (org scoped)
|
|
tags:
|
|
- Labels
|
|
/load-balancers:
|
|
get:
|
|
description: Returns load balancers for the organization in X-Org-ID.
|
|
operationId: ListLoadBalancers
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.LoadBalancerResponse'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: failed to list clusters
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List load balancers (org scoped)
|
|
tags:
|
|
- LoadBalancers
|
|
post:
|
|
operationId: CreateLoadBalancer
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.CreateLoadBalancerRequest'
|
|
description: Record set payload
|
|
required: true
|
|
responses:
|
|
"201":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.LoadBalancerResponse'
|
|
description: Created
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: validation error
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: domain not found
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Create a load balancer
|
|
tags:
|
|
- LoadBalancers
|
|
/load-balancers/{id}:
|
|
delete:
|
|
operationId: DeleteLoadBalancer
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Load Balancer ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Delete a load balancer
|
|
tags:
|
|
- LoadBalancers
|
|
get:
|
|
description: Returns load balancer for the organization in X-Org-ID.
|
|
operationId: GetLoadBalancers
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: LoadBalancer ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.LoadBalancerResponse'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: failed to list clusters
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Get a load balancer (org scoped)
|
|
tags:
|
|
- LoadBalancers
|
|
patch:
|
|
operationId: UpdateLoadBalancer
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Load Balancer ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.UpdateLoadBalancerRequest'
|
|
description: Fields to update
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.LoadBalancerResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: validation error
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Update a load balancer (org scoped)
|
|
tags:
|
|
- LoadBalancers
|
|
/me:
|
|
get:
|
|
operationId: GetMe
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/handlers.meResponse'
|
|
description: OK
|
|
security:
|
|
- BearerAuth: []
|
|
- ApiKeyAuth: []
|
|
summary: Get current user profile
|
|
tags:
|
|
- Me
|
|
patch:
|
|
operationId: UpdateMe
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/handlers.updateMeRequest'
|
|
description: Patch profile
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/models.User'
|
|
description: OK
|
|
security:
|
|
- BearerAuth: []
|
|
- ApiKeyAuth: []
|
|
summary: Update current user profile
|
|
tags:
|
|
- Me
|
|
/me/api-keys:
|
|
get:
|
|
operationId: ListUserAPIKeys
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/handlers.userAPIKeyOut'
|
|
type: array
|
|
description: OK
|
|
security:
|
|
- BearerAuth: []
|
|
- ApiKeyAuth: []
|
|
summary: List my API keys
|
|
tags:
|
|
- MeAPIKeys
|
|
post:
|
|
description: Returns the plaintext key once. Store it securely on the client
|
|
side.
|
|
operationId: CreateUserAPIKey
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/handlers.createUserKeyRequest'
|
|
description: Key options
|
|
required: true
|
|
responses:
|
|
"201":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/handlers.userAPIKeyOut'
|
|
description: Created
|
|
security:
|
|
- BearerAuth: []
|
|
- ApiKeyAuth: []
|
|
summary: Create a new user API key
|
|
tags:
|
|
- MeAPIKeys
|
|
/me/api-keys/{id}:
|
|
delete:
|
|
operationId: DeleteUserAPIKey
|
|
parameters:
|
|
- description: Key ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Delete a user API key
|
|
tags:
|
|
- MeAPIKeys
|
|
/node-pools:
|
|
get:
|
|
description: Returns node pools for the organization in X-Org-ID.
|
|
operationId: ListNodePools
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Name contains (case-insensitive)
|
|
in: query
|
|
name: q
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.NodePoolResponse'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: failed to list node pools
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List node pools (org scoped)
|
|
tags:
|
|
- NodePools
|
|
post:
|
|
description: Creates a node pool. Optionally attach initial servers.
|
|
operationId: CreateNodePool
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.CreateNodePoolRequest'
|
|
description: NodePool payload
|
|
required: true
|
|
responses:
|
|
"201":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.NodePoolResponse'
|
|
description: Created
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid json / missing fields / invalid server_ids
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: create failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Create node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
/node-pools/{id}:
|
|
delete:
|
|
description: Permanently deletes the node pool.
|
|
operationId: DeleteNodePool
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Pool ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: delete failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Delete node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
get:
|
|
description: Returns one node pool. Add `include=servers` to include servers.
|
|
operationId: GetNodePool
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Pool ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.NodePoolResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: fetch failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Get node pool by ID (org scoped)
|
|
tags:
|
|
- NodePools
|
|
patch:
|
|
description: Partially update node pool fields.
|
|
operationId: UpdateNodePool
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Pool ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.UpdateNodePoolRequest'
|
|
description: Fields to update
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.NodePoolResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id / invalid json
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: update failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Update node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
/node-pools/{id}/annotations:
|
|
get:
|
|
operationId: ListNodePoolAnnotations
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Pool ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.AnnotationResponse'
|
|
type: array
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: fetch failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List annotations attached to a node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
post:
|
|
operationId: AttachNodePoolAnnotations
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Group ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.AttachAnnotationsRequest'
|
|
description: Annotation IDs to attach
|
|
required: true
|
|
responses:
|
|
"204":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: No Content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id / invalid server_ids
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: attach failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Attach annotation to a node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
/node-pools/{id}/annotations/{annotationId}:
|
|
delete:
|
|
operationId: DetachNodePoolAnnotation
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Pool ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- description: Annotation ID (UUID)
|
|
in: path
|
|
name: annotationId
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: No Content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: detach failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Detach one annotation from a node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
/node-pools/{id}/labels:
|
|
get:
|
|
operationId: ListNodePoolLabels
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Label Pool ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.LabelResponse'
|
|
type: array
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: fetch failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List labels attached to a node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
post:
|
|
operationId: AttachNodePoolLabels
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Pool ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.AttachLabelsRequest'
|
|
description: Label IDs to attach
|
|
required: true
|
|
responses:
|
|
"204":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: No Content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id / invalid server_ids
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: attach failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Attach labels to a node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
/node-pools/{id}/labels/{labelId}:
|
|
delete:
|
|
operationId: DetachNodePoolLabel
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Pool ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- description: Label ID (UUID)
|
|
in: path
|
|
name: labelId
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: No Content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: detach failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Detach one label from a node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
/node-pools/{id}/servers:
|
|
get:
|
|
operationId: ListNodePoolServers
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Pool ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.ServerResponse'
|
|
type: array
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: fetch failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List servers attached to a node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
post:
|
|
operationId: AttachNodePoolServers
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Pool ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.AttachServersRequest'
|
|
description: Server IDs to attach
|
|
required: true
|
|
responses:
|
|
"204":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: No Content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id / invalid server_ids
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: attach failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Attach servers to a node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
/node-pools/{id}/servers/{serverId}:
|
|
delete:
|
|
operationId: DetachNodePoolServer
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Pool ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- description: Server ID (UUID)
|
|
in: path
|
|
name: serverId
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: No Content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: detach failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Detach one server from a node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
/node-pools/{id}/taints:
|
|
get:
|
|
operationId: ListNodePoolTaints
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Pool ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.TaintResponse'
|
|
type: array
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: fetch failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List taints attached to a node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
post:
|
|
operationId: AttachNodePoolTaints
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Pool ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.AttachTaintsRequest'
|
|
description: Taint IDs to attach
|
|
required: true
|
|
responses:
|
|
"204":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: No Content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id / invalid taint_ids
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: attach failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Attach taints to a node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
/node-pools/{id}/taints/{taintId}:
|
|
delete:
|
|
operationId: DetachNodePoolTaint
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Pool ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- description: Taint ID (UUID)
|
|
in: path
|
|
name: taintId
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: No Content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: detach failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Detach one taint from a node pool (org scoped)
|
|
tags:
|
|
- NodePools
|
|
/orgs:
|
|
get:
|
|
operationId: listMyOrgs
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/models.Organization'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Unauthorized
|
|
security:
|
|
- BearerAuth: []
|
|
summary: List organizations I belong to
|
|
tags:
|
|
- Orgs
|
|
post:
|
|
operationId: createOrg
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/handlers.orgCreateReq'
|
|
description: Org payload
|
|
required: true
|
|
responses:
|
|
"201":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/models.Organization'
|
|
description: Created
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Bad Request
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Unauthorized
|
|
"409":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Conflict
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Create organization
|
|
tags:
|
|
- Orgs
|
|
/orgs/{id}:
|
|
delete:
|
|
operationId: deleteOrg
|
|
parameters:
|
|
- description: Org ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: Deleted
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Unauthorized
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Not Found
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Delete organization (owner)
|
|
tags:
|
|
- Orgs
|
|
get:
|
|
operationId: getOrg
|
|
parameters:
|
|
- description: Org ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/models.Organization'
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Unauthorized
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Not Found
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Get organization
|
|
tags:
|
|
- Orgs
|
|
patch:
|
|
operationId: updateOrg
|
|
parameters:
|
|
- description: Org ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/handlers.orgUpdateReq'
|
|
description: Update payload
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/models.Organization'
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Unauthorized
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Not Found
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Update organization (owner/admin)
|
|
tags:
|
|
- Orgs
|
|
/orgs/{id}/api-keys:
|
|
get:
|
|
operationId: listOrgKeys
|
|
parameters:
|
|
- description: Org ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/models.APIKey'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Unauthorized
|
|
security:
|
|
- BearerAuth: []
|
|
summary: List org-scoped API keys (no secrets)
|
|
tags:
|
|
- Orgs
|
|
post:
|
|
operationId: createOrgKey
|
|
parameters:
|
|
- description: Org ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/handlers.orgKeyCreateReq'
|
|
description: Key name + optional expiry
|
|
required: true
|
|
responses:
|
|
"201":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/handlers.orgKeyCreateResp'
|
|
description: Created
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Unauthorized
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Create org key/secret pair (owner/admin)
|
|
tags:
|
|
- Orgs
|
|
/orgs/{id}/api-keys/{key_id}:
|
|
delete:
|
|
operationId: deleteOrgKey
|
|
parameters:
|
|
- description: Org ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- description: Key ID (UUID)
|
|
in: path
|
|
name: key_id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: Deleted
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Unauthorized
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Delete org key (owner/admin)
|
|
tags:
|
|
- Orgs
|
|
/orgs/{id}/members:
|
|
get:
|
|
operationId: listMembers
|
|
parameters:
|
|
- description: Org ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/handlers.memberOut'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Unauthorized
|
|
security:
|
|
- BearerAuth: []
|
|
summary: List members in org
|
|
tags:
|
|
- Orgs
|
|
post:
|
|
operationId: addOrUpdateMember
|
|
parameters:
|
|
- description: Org ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/handlers.memberUpsertReq'
|
|
description: User & role
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/handlers.memberOut'
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Unauthorized
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Add or update a member (owner/admin)
|
|
tags:
|
|
- Orgs
|
|
/orgs/{id}/members/{user_id}:
|
|
delete:
|
|
operationId: removeMember
|
|
parameters:
|
|
- description: Org ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- description: User ID (UUID)
|
|
in: path
|
|
name: user_id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: Removed
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/utils.ErrorResponse'
|
|
description: Unauthorized
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Remove a member (owner/admin)
|
|
tags:
|
|
- Orgs
|
|
/servers:
|
|
get:
|
|
description: 'Returns servers for the organization in X-Org-ID. Optional filters:
|
|
status, role.'
|
|
operationId: ListServers
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Filter by status (pending|provisioning|ready|failed)
|
|
in: query
|
|
name: status
|
|
schema:
|
|
type: string
|
|
- description: Filter by role
|
|
in: query
|
|
name: role
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.ServerResponse'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: failed to list servers
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List servers (org scoped)
|
|
tags:
|
|
- Servers
|
|
post:
|
|
description: Creates a server bound to the org in X-Org-ID. Validates that ssh_key_id
|
|
belongs to the org.
|
|
operationId: CreateServer
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.CreateServerRequest'
|
|
description: Server payload
|
|
required: true
|
|
responses:
|
|
"201":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ServerResponse'
|
|
description: Created
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid json / missing fields / invalid status / invalid ssh_key_id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: create failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Create server (org scoped)
|
|
tags:
|
|
- Servers
|
|
/servers/{id}:
|
|
delete:
|
|
description: Permanently deletes the server.
|
|
operationId: DeleteServer
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Server ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: delete failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Delete server (org scoped)
|
|
tags:
|
|
- Servers
|
|
get:
|
|
description: Returns one server in the given organization.
|
|
operationId: GetServer
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Server ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ServerResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: fetch failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Get server by ID (org scoped)
|
|
tags:
|
|
- Servers
|
|
patch:
|
|
description: Partially update fields; changing ssh_key_id validates ownership.
|
|
operationId: UpdateServer
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Server ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.UpdateServerRequest'
|
|
description: Fields to update
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ServerResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id / invalid json / invalid status / invalid ssh_key_id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: update failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Update server (org scoped)
|
|
tags:
|
|
- Servers
|
|
/servers/{id}/reset-hostkey:
|
|
post:
|
|
description: Clears the stored SSH host key for this server. The next SSH connection
|
|
will re-learn the host key (trust-on-first-use).
|
|
operationId: ResetServerHostKey
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Server ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.ServerResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: reset failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Reset SSH host key (org scoped)
|
|
tags:
|
|
- Servers
|
|
/ssh:
|
|
get:
|
|
description: Returns ssh keys for the organization in X-Org-ID.
|
|
operationId: ListPublicSshKeys
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.SshResponse'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: failed to list keys
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List ssh keys (org scoped)
|
|
tags:
|
|
- Ssh
|
|
post:
|
|
description: Generates an RSA or ED25519 keypair, saves it, and returns metadata.
|
|
For RSA you may set bits (2048/3072/4096). Default is 4096. ED25519 ignores
|
|
bits.
|
|
operationId: CreateSSHKey
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.CreateSSHRequest'
|
|
description: Key generation options
|
|
required: true
|
|
responses:
|
|
"201":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.SshResponse'
|
|
description: Created
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid json / invalid bits
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: generation/create failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Create ssh keypair (org scoped)
|
|
tags:
|
|
- Ssh
|
|
/ssh/{id}:
|
|
delete:
|
|
description: Permanently deletes a keypair.
|
|
operationId: DeleteSSHKey
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: SSH Key ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: delete failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Delete ssh keypair (org scoped)
|
|
tags:
|
|
- Ssh
|
|
get:
|
|
description: Returns public key fields. Append `?reveal=true` to include the
|
|
private key PEM.
|
|
operationId: GetSSHKey
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: SSH Key ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- description: Reveal private key PEM
|
|
in: query
|
|
name: reveal
|
|
schema:
|
|
type: boolean
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
oneOf:
|
|
- $ref: '#/components/schemas/dto.SshResponse'
|
|
- $ref: '#/components/schemas/dto.SshRevealResponse'
|
|
description: When reveal=true
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: fetch failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Get ssh key by ID (org scoped)
|
|
tags:
|
|
- Ssh
|
|
/ssh/{id}/download:
|
|
get:
|
|
description: Download `part=public|private|both` of the keypair. `both` returns
|
|
a zip file.
|
|
operationId: DownloadSSHKey
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- description: SSH Key ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
- description: Which part to download
|
|
in: query
|
|
name: part
|
|
required: true
|
|
schema:
|
|
enum:
|
|
- public
|
|
- private
|
|
- both
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: file content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id / invalid part
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: download failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Download ssh key files by ID (org scoped)
|
|
tags:
|
|
- Ssh
|
|
/taints:
|
|
get:
|
|
description: 'Returns node taints for the organization in X-Org-ID. Filters:
|
|
`key`, `value`, and `q` (key contains). Add `include=node_pools` to include
|
|
linked node pools.'
|
|
operationId: ListTaints
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Exact key
|
|
in: query
|
|
name: key
|
|
schema:
|
|
type: string
|
|
- description: Exact value
|
|
in: query
|
|
name: value
|
|
schema:
|
|
type: string
|
|
- description: key contains (case-insensitive)
|
|
in: query
|
|
name: q
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
items:
|
|
$ref: '#/components/schemas/dto.TaintResponse'
|
|
type: array
|
|
description: OK
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: failed to list node taints
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: List node pool taints (org scoped)
|
|
tags:
|
|
- Taints
|
|
post:
|
|
description: Creates a taint.
|
|
operationId: CreateTaint
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.CreateTaintRequest'
|
|
description: Taint payload
|
|
required: true
|
|
responses:
|
|
"201":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.TaintResponse'
|
|
description: Created
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid json / missing fields / invalid node_pool_ids
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: create failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Create node taint (org scoped)
|
|
tags:
|
|
- Taints
|
|
/taints/{id}:
|
|
delete:
|
|
description: Permanently deletes the taint.
|
|
operationId: DeleteTaint
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Taint ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: delete failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Delete taint (org scoped)
|
|
tags:
|
|
- Taints
|
|
get:
|
|
operationId: GetTaint
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Taint ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.TaintResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: fetch failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Get node taint by ID (org scoped)
|
|
tags:
|
|
- Taints
|
|
patch:
|
|
description: Partially update taint fields.
|
|
operationId: UpdateTaint
|
|
parameters:
|
|
- description: Organization UUID
|
|
in: header
|
|
name: X-Org-ID
|
|
schema:
|
|
type: string
|
|
- description: Node Taint ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.UpdateTaintRequest'
|
|
description: Fields to update
|
|
required: true
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/dto.TaintResponse'
|
|
description: OK
|
|
"400":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: invalid id / invalid json
|
|
"401":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: Unauthorized
|
|
"403":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: organization required
|
|
"404":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: not found
|
|
"500":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: string
|
|
description: update failed
|
|
security:
|
|
- BearerAuth: []
|
|
- OrgKeyAuth: []
|
|
- OrgSecretAuth: []
|
|
summary: Update node taint (org scoped)
|
|
tags:
|
|
- Taints
|
|
/version:
|
|
get:
|
|
description: Returns build/runtime metadata for the running service.
|
|
operationId: Version // operationId
|
|
responses:
|
|
"200":
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/handlers.VersionResponse'
|
|
description: OK
|
|
summary: Service version information
|
|
tags:
|
|
- Meta
|
|
servers:
|
|
- description: Production API
|
|
url: https://autoglue.onglueops.rocks/api/v1
|
|
- description: Staging API
|
|
url: https://autoglue.apps.nonprod.earth.onglueops.rocks/api/v1
|
|
- description: Local dev
|
|
url: http://localhost:8080/api/v1
|