diff --git a/Cargo.lock b/Cargo.lock index 70f9588de30..6a4b14185a5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3095,8 +3095,7 @@ dependencies = [ [[package]] name = "dropshot-api-manager" version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f45b53c5eab26bfb0246e53c6c586558331c6e4efa3dc29ff9fb0373a6c3d87a" +source = "git+https://github.com/oxidecomputer/dropshot-api-manager?branch=sunshowers%2Fspr%2Fadd-git-ref-storage-for-older-api-versions#0cfd6a4b71bb593b917e3ae3795220a6a70e8bc1" dependencies = [ "anyhow", "atomicwrites", @@ -3125,8 +3124,7 @@ dependencies = [ [[package]] name = "dropshot-api-manager-types" version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b78a68bd7f0470aec18807e53b0f975661453dae80995c03bbb370d9d0c6eb6f" +source = "git+https://github.com/oxidecomputer/dropshot-api-manager?branch=sunshowers%2Fspr%2Fadd-git-ref-storage-for-older-api-versions#0cfd6a4b71bb593b917e3ae3795220a6a70e8bc1" dependencies = [ "anyhow", "camino", diff --git a/Cargo.toml b/Cargo.toml index dc4086b0940..80a54d1d3f9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1001,8 +1001,8 @@ opt-level = 3 # drift = { path = "../drift" } # dropshot = { path = "../dropshot/dropshot" } # dropshot_endpoint = { path = "../dropshot/dropshot_endpoint" } -# dropshot-api-manager = { path = "../dropshot-api-manager/crates/dropshot-api-manager" } -# dropshot-api-manager-types = { path = "../dropshot-api-manager/crates/dropshot-api-manager-types" } +dropshot-api-manager = { git = "https://github.com/oxidecomputer/dropshot-api-manager", branch = "sunshowers/spr/add-git-ref-storage-for-older-api-versions" } +dropshot-api-manager-types = { git = "https://github.com/oxidecomputer/dropshot-api-manager", branch = "sunshowers/spr/add-git-ref-storage-for-older-api-versions" } # progenitor = { path = "../progenitor/progenitor" } # progenitor-client = { path = "../progenitor/progenitor-client" } # steno = { path = "../steno" } diff --git a/dev-tools/dropshot-apis/src/main.rs b/dev-tools/dropshot-apis/src/main.rs index 158330e6127..e6fe28b7710 100644 --- a/dev-tools/dropshot-apis/src/main.rs +++ b/dev-tools/dropshot-apis/src/main.rs @@ -313,7 +313,8 @@ fn all_apis() -> anyhow::Result { let apis = ManagedApis::new(apis) .context("error creating ManagedApis")? - .with_validation(validate); + .with_validation(validate) + .with_git_ref_storage(); Ok(apis) } diff --git a/openapi/cockroach-admin/cockroach-admin-1.0.0-dc9acb.json b/openapi/cockroach-admin/cockroach-admin-1.0.0-dc9acb.json deleted file mode 100644 index 6b2fab93abc..00000000000 --- a/openapi/cockroach-admin/cockroach-admin-1.0.0-dc9acb.json +++ /dev/null @@ -1,464 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "CockroachDB Cluster Admin API", - "description": "API for interacting with the Oxide control plane's CockroachDB cluster", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "1.0.0" - }, - "paths": { - "/cluster/init": { - "post": { - "summary": "Initialize the CockroachDB cluster.", - "description": "This performs both the base-level `cockroach init` and installs the Omicron schema. It should be idempotent, but we haven't heavily tested that. We test that this endpoint can safely be called multiple times, but haven't tested calling it concurrently (either multiple simultaneous requests to the same cockroach node, or sending simultaneous requests to different cockroach nodes, both of which would rely on `cockroach init` itself being safe to call concurrently). In practice, only RSS calls this endpoint and it does so serially; as long as we don't change that, the existing testing should be sufficient.", - "operationId": "cluster_init", - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/node/decommission": { - "post": { - "summary": "Decommission a node from the CRDB cluster.", - "operationId": "node_decommission", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NodeId" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/NodeDecommission" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/node/id": { - "get": { - "summary": "Get the CockroachDB node ID of the local cockroach instance.", - "operationId": "local_node_id", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LocalNodeId" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/node/status": { - "get": { - "summary": "Get the status of all nodes in the CRDB cluster.", - "operationId": "node_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ClusterNodeStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/proxy/status/nodes": { - "get": { - "summary": "Proxy to CockroachDB's /_status/nodes endpoint", - "operationId": "status_nodes", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "String", - "type": "string" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/proxy/status/vars": { - "get": { - "summary": "Proxy to CockroachDB's /_status/vars endpoint", - "operationId": "status_vars", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "String", - "type": "string" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "ClusterNodeStatus": { - "type": "object", - "properties": { - "all_nodes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NodeStatus" - } - } - }, - "required": [ - "all_nodes" - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "LocalNodeId": { - "description": "CockroachDB Node ID", - "type": "object", - "properties": { - "node_id": { - "type": "string" - }, - "zone_id": { - "description": "The ID of this Omicron zone.\n\nThis is included to ensure correctness even if a socket address on a sled is reused for a different zone; if our caller is trying to determine the node ID for a particular Omicron CockroachDB zone, they'll contact us by socket address. We include our zone ID in the response for their confirmation that we are the zone they intended to contact.", - "allOf": [ - { - "$ref": "#/components/schemas/TypedUuidForOmicronZoneKind" - } - ] - } - }, - "required": [ - "node_id", - "zone_id" - ] - }, - "NodeDecommission": { - "type": "object", - "properties": { - "is_decommissioning": { - "type": "boolean" - }, - "is_draining": { - "type": "boolean" - }, - "is_live": { - "type": "boolean" - }, - "membership": { - "$ref": "#/components/schemas/NodeMembership" - }, - "node_id": { - "type": "string" - }, - "notes": { - "type": "array", - "items": { - "type": "string" - } - }, - "replicas": { - "type": "integer", - "format": "int64" - } - }, - "required": [ - "is_decommissioning", - "is_draining", - "is_live", - "membership", - "node_id", - "notes", - "replicas" - ] - }, - "NodeId": { - "type": "object", - "properties": { - "node_id": { - "type": "string" - } - }, - "required": [ - "node_id" - ] - }, - "NodeMembership": { - "oneOf": [ - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "active" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "decommissioning" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "decommissioned" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "unknown" - ] - }, - "value": { - "type": "string" - } - }, - "required": [ - "state", - "value" - ] - } - ] - }, - "NodeStatus": { - "type": "object", - "properties": { - "address": { - "type": "string" - }, - "build": { - "type": "string" - }, - "gossiped_replicas": { - "type": "integer", - "format": "int64" - }, - "intent_bytes": { - "type": "integer", - "format": "int64" - }, - "is_available": { - "type": "boolean" - }, - "is_decommissioning": { - "type": "boolean" - }, - "is_draining": { - "type": "boolean" - }, - "is_live": { - "type": "boolean" - }, - "key_bytes": { - "type": "integer", - "format": "int64" - }, - "live_bytes": { - "type": "integer", - "format": "int64" - }, - "locality": { - "type": "string" - }, - "membership": { - "type": "string" - }, - "node_id": { - "type": "string" - }, - "ranges": { - "type": "integer", - "format": "int64" - }, - "ranges_unavailable": { - "type": "integer", - "format": "int64" - }, - "ranges_underreplicated": { - "type": "integer", - "format": "int64" - }, - "replicas_leaders": { - "type": "integer", - "format": "int64" - }, - "replicas_leaseholders": { - "type": "integer", - "format": "int64" - }, - "sql_address": { - "type": "string" - }, - "started_at": { - "type": "string", - "format": "date-time" - }, - "system_bytes": { - "type": "integer", - "format": "int64" - }, - "updated_at": { - "type": "string", - "format": "date-time" - }, - "value_bytes": { - "type": "integer", - "format": "int64" - } - }, - "required": [ - "address", - "build", - "gossiped_replicas", - "intent_bytes", - "is_available", - "is_decommissioning", - "is_draining", - "is_live", - "key_bytes", - "live_bytes", - "locality", - "membership", - "node_id", - "ranges", - "ranges_unavailable", - "ranges_underreplicated", - "replicas_leaders", - "replicas_leaseholders", - "sql_address", - "started_at", - "system_bytes", - "updated_at", - "value_bytes" - ] - }, - "TypedUuidForOmicronZoneKind": { - "type": "string", - "format": "uuid" - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } -} diff --git a/openapi/cockroach-admin/cockroach-admin-1.0.0-dc9acb.json.gitref b/openapi/cockroach-admin/cockroach-admin-1.0.0-dc9acb.json.gitref new file mode 100644 index 00000000000..b685155eb00 --- /dev/null +++ b/openapi/cockroach-admin/cockroach-admin-1.0.0-dc9acb.json.gitref @@ -0,0 +1 @@ +a582b520e5926304437d844dd68dcb03dd1d04cf:openapi/cockroach-admin/cockroach-admin-1.0.0-dc9acb.json \ No newline at end of file diff --git a/openapi/dns-server/dns-server-1.0.0-49359e.json b/openapi/dns-server/dns-server-1.0.0-49359e.json deleted file mode 100644 index 59d1c544dd6..00000000000 --- a/openapi/dns-server/dns-server-1.0.0-49359e.json +++ /dev/null @@ -1,263 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Internal DNS", - "description": "API for the internal DNS server", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "1.0.0" - }, - "paths": { - "/config": { - "get": { - "operationId": "dns_config_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DnsConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "dns_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DnsConfigParams" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "DnsConfig": { - "type": "object", - "properties": { - "generation": { - "$ref": "#/components/schemas/Generation" - }, - "time_applied": { - "type": "string", - "format": "date-time" - }, - "time_created": { - "type": "string", - "format": "date-time" - }, - "zones": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DnsConfigZone" - } - } - }, - "required": [ - "generation", - "time_applied", - "time_created", - "zones" - ] - }, - "DnsConfigParams": { - "type": "object", - "properties": { - "generation": { - "$ref": "#/components/schemas/Generation" - }, - "time_created": { - "type": "string", - "format": "date-time" - }, - "zones": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DnsConfigZone" - } - } - }, - "required": [ - "generation", - "time_created", - "zones" - ] - }, - "DnsConfigZone": { - "type": "object", - "properties": { - "records": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/components/schemas/DnsRecord" - } - } - }, - "zone_name": { - "type": "string" - } - }, - "required": [ - "records", - "zone_name" - ] - }, - "DnsRecord": { - "oneOf": [ - { - "type": "object", - "properties": { - "data": { - "type": "string", - "format": "ipv4" - }, - "type": { - "type": "string", - "enum": [ - "A" - ] - } - }, - "required": [ - "data", - "type" - ] - }, - { - "type": "object", - "properties": { - "data": { - "type": "string", - "format": "ipv6" - }, - "type": { - "type": "string", - "enum": [ - "AAAA" - ] - } - }, - "required": [ - "data", - "type" - ] - }, - { - "type": "object", - "properties": { - "data": { - "$ref": "#/components/schemas/Srv" - }, - "type": { - "type": "string", - "enum": [ - "SRV" - ] - } - }, - "required": [ - "data", - "type" - ] - } - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "Generation": { - "description": "Generation numbers stored in the database, used for optimistic concurrency control", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "Srv": { - "type": "object", - "properties": { - "port": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "prio": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "target": { - "type": "string" - }, - "weight": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "port", - "prio", - "target", - "weight" - ] - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } -} diff --git a/openapi/dns-server/dns-server-1.0.0-49359e.json.gitref b/openapi/dns-server/dns-server-1.0.0-49359e.json.gitref new file mode 100644 index 00000000000..22f712e424c --- /dev/null +++ b/openapi/dns-server/dns-server-1.0.0-49359e.json.gitref @@ -0,0 +1 @@ +eab2e66042c4f990495dd5af64d9b4be3a6f43ca:openapi/dns-server/dns-server-1.0.0-49359e.json \ No newline at end of file diff --git a/openapi/gateway/gateway-1.0.0-12d926.json b/openapi/gateway/gateway-1.0.0-12d926.json deleted file mode 100644 index 40d06e77146..00000000000 --- a/openapi/gateway/gateway-1.0.0-12d926.json +++ /dev/null @@ -1,4015 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Management Gateway Service API", - "description": "API for interacting with the Oxide control plane's gateway service", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "1.0.0" - }, - "paths": { - "/ignition": { - "get": { - "summary": "List SPs via Ignition", - "description": "Retreive information for all SPs via the Ignition controller. This is lower latency and has fewer possible failure modes than querying the SP over the management network.", - "operationId": "ignition_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SpIgnitionInfo", - "type": "array", - "items": { - "$ref": "#/components/schemas/SpIgnitionInfo" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/ignition/{type}/{slot}": { - "get": { - "summary": "Get SP info via Ignition", - "description": "Retreive information for an SP via the Ignition controller. This is lower latency and has fewer possible failure modes than querying the SP over the management network.", - "operationId": "ignition_get", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpIgnitionInfo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/ignition/{type}/{slot}/{command}": { - "post": { - "summary": "Send an ignition command targeting a specific SP.", - "description": "This endpoint can be used to transition a target between A2 and A3 (via power-on / power-off) or reset it.\n\nThe management network traffic caused by requests to this endpoint is between this MGS instance and its local ignition controller, _not_ the SP targeted by the command.", - "operationId": "ignition_command", - "parameters": [ - { - "in": "path", - "name": "command", - "description": "Ignition command to perform on the targeted SP.", - "required": true, - "schema": { - "$ref": "#/components/schemas/IgnitionCommand" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/local/all-sp-ids": { - "get": { - "summary": "Get the complete list of SP identifiers this MGS instance is configured to", - "description": "find and communicate with.\n\nNote that unlike most MGS endpoints, this endpoint does not send any communication on the management network.", - "operationId": "sp_all_ids", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SpIdentifier", - "type": "array", - "items": { - "$ref": "#/components/schemas/SpIdentifier" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/local/switch-id": { - "get": { - "summary": "Get the identifier for the switch this MGS instance is connected to.", - "description": "Note that most MGS endpoints behave identically regardless of which scrimlet the MGS instance is running on; this one, however, is intentionally different. This endpoint is _probably_ only useful for clients communicating with MGS over localhost (i.e., other services in the switch zone) who need to know which sidecar they are connected to.", - "operationId": "sp_local_switch_id", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpIdentifier" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/recovery/host-phase2": { - "post": { - "summary": "Upload a host phase2 image that can be served to recovering hosts via the", - "description": "host/SP control uart.\n\nMGS caches this image in memory and is limited to a small, fixed number of images (potentially 1). Uploading a new image may evict the least-recently-requested image if our cache is already full.", - "operationId": "recovery_host_phase2_upload", - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HostPhase2RecoveryImageId" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}": { - "get": { - "summary": "Get info on an SP", - "operationId": "sp_get", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component": { - "get": { - "summary": "List components of an SP", - "description": "A component is a distinct entity under an SP's direct control. This lists all those components for a given SP.", - "operationId": "sp_component_list", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpComponentList" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}": { - "get": { - "summary": "Get info for an SP component", - "description": "This can be useful, for example, to poll the state of a component if another interface has changed the power state of a component or updated a component.", - "operationId": "sp_component_get", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SpComponentDetails", - "type": "array", - "items": { - "$ref": "#/components/schemas/SpComponentDetails" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/active-slot": { - "get": { - "summary": "Get the currently-active slot for an SP component", - "description": "Note that the meaning of \"current\" in \"currently-active\" may vary depending on the component: for example, it may mean \"the actively-running slot\" or \"the slot that will become active the next time the component is booted\".", - "operationId": "sp_component_active_slot_get", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpComponentFirmwareSlot" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "summary": "Set the currently-active slot for an SP component", - "description": "Note that the meaning of \"current\" in \"currently-active\" may vary depending on the component: for example, it may mean \"the actively-running slot\" or \"the slot that will become active the next time the component is booted\".", - "operationId": "sp_component_active_slot_set", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - }, - { - "in": "query", - "name": "persist", - "description": "Persist this choice of active slot.", - "required": true, - "schema": { - "type": "boolean" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpComponentFirmwareSlot" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/caboose": { - "get": { - "summary": "Get the caboose of an SP component", - "description": "Not all components have a caboose.", - "operationId": "sp_component_caboose_get", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - }, - { - "in": "query", - "name": "firmware_slot", - "description": "The firmware slot to for which we want to request caboose information.", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpComponentCaboose" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/cfpa": { - "get": { - "summary": "Read the requested CFPA slot from a root of trust.", - "description": "This endpoint is only valid for the `rot` component.", - "operationId": "sp_rot_cfpa_get", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetCfpaParams" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RotCfpa" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/clear-status": { - "post": { - "summary": "Clear status of a component", - "description": "For components that maintain event counters (e.g., the sidecar `monorail`), this will reset the event counters to zero.", - "operationId": "sp_component_clear_status", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/cmpa": { - "get": { - "summary": "Read the CMPA from a root of trust.", - "description": "This endpoint is only valid for the `rot` component.", - "operationId": "sp_rot_cmpa_get", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RotCmpa" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/hash/{firmware_slot}": { - "get": { - "summary": "Get a computed hash of a given slot of a component.", - "description": "This endpoint is only valid for the `host-boot-flash` component.\n\nComputing the hash takes several seconds; this endpoint returns the current status. If the status is `HashNotStarted`, callers should start hashing using `sp_component_hash_firmware_start()`. If the status is `HashInProgress`, callers should wait a bit then call this endpoint again.", - "operationId": "sp_component_hash_firmware_get", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "firmware_slot", - "description": "Firmware slot of the component.", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ComponentFirmwareHashStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "summary": "Start computing the hash of a given slot of a component.", - "description": "This endpoint is only valid for the `host-boot-flash` component.\n\nComputing the hash takes several seconds; callers should poll for results using `sp_component_hash_firmware_get()`. In general they should call `sp_component_hash_firmware_get()` first anyway, as the hashes are cached in the SP and may already be ready.", - "operationId": "sp_component_hash_firmware_start", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "firmware_slot", - "description": "Firmware slot of the component.", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/reset": { - "post": { - "summary": "Reset an SP component (possibly the SP itself).", - "operationId": "sp_component_reset", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/SpComponentResetError" - }, - "5XX": { - "$ref": "#/components/responses/SpComponentResetError" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/rot-boot-info": { - "get": { - "summary": "Read the RoT boot state from a root of trust", - "description": "This endpoint is only valid for the `rot` component.", - "operationId": "sp_rot_boot_info", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetRotBootInfoParams" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RotState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/serial-console/attach": { - "get": { - "summary": "Upgrade into a websocket connection attached to the given SP", - "description": "component's serial console.", - "operationId": "sp_component_serial_console_attach", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - }, - "x-dropshot-websocket": {} - } - }, - "/sp/{type}/{slot}/component/{component}/serial-console/detach": { - "post": { - "summary": "Detach the websocket connection attached to the given SP component's", - "description": "serial console, if such a connection exists.", - "operationId": "sp_component_serial_console_detach", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/update": { - "post": { - "summary": "Update an SP component", - "description": "Update a component of an SP according to its specific update mechanism. This interface is generic for all component types, but resolves to a mechanism specific to the given component type. This may fail for a variety of reasons including the update bundle being invalid or improperly specified or due to an error originating from the SP itself.\n\nNote that not all components may be updated; components without known update mechanisms will return an error without any inspection of the update bundle.\n\nUpdating the SP itself is done via the component name `sp`.", - "operationId": "sp_component_update", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - }, - { - "in": "query", - "name": "firmware_slot", - "description": "The update slot to apply this image to. Supply 0 if the component only has one update slot.", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "query", - "name": "id", - "description": "An identifier for this update.\n\nThis ID applies to this single instance of the API call; it is not an ID of `image` itself. Multiple API calls with the same `image` should use different IDs.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/update-abort": { - "post": { - "summary": "Abort any in-progress update an SP component", - "description": "Aborting an update to the SP itself is done via the component name `sp`.\n\nOn a successful return, the update corresponding to the given UUID will no longer be in progress (either aborted or applied).", - "operationId": "sp_component_update_abort", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateAbortBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/update-status": { - "get": { - "summary": "Get the status of an update being applied to an SP component", - "description": "Getting the status of an update to the SP itself is done via the component name `sp`.", - "operationId": "sp_component_update_status", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpUpdateStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/ereports": { - "post": { - "summary": "Request ereports from the target service processor.", - "description": "Query parameters provide the ENAs of the initial ereport in the returned tranche, the SP's restart ID that the control plane believes is current, and the (optional) last committed ENA.", - "operationId": "sp_ereports_ingest", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - }, - { - "in": "query", - "name": "committed", - "description": "The ENA of the last ereport committed to persistent storage from the requested reporter restart generation.\n\nIf the restart ID parameter matches the reporter's current restart ID, it is permitted to discard any ereports with ENAs up to and including this value. If the restart ID has changed from the provided one, the reporter will not discard data.", - "schema": { - "$ref": "#/components/schemas/Ena" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of ereports to return in this tranche.", - "required": true, - "schema": { - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "restart_id", - "description": "The restart ID of the reporter at which all other query parameters are valid.\n\nIf this value does not match the reporter's restart ID, the reporter's response will include the current generation, and will start at the earliest known ENA, rather than the provided `start_at` ENA.", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForEreporterRestartKind" - } - }, - { - "in": "query", - "name": "start_at", - "description": "If present, the reporter should not include ENAs earlier than this one in its response, provided that the query's requested restart ID matches the current restart ID.", - "schema": { - "$ref": "#/components/schemas/Ena" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Ereports" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/host-phase2-progress": { - "get": { - "summary": "Get the most recent host phase2 request we've seen from the target SP.", - "description": "This method can be used as an indirect progress report for how far along a host is when it is booting via the MGS -> SP -> UART recovery path. This path is used to install the trampoline image containing installinator to recover a sled.", - "operationId": "sp_host_phase2_progress_get", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HostPhase2Progress" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Clear the most recent host phase2 request we've seen from the target SP.", - "operationId": "sp_host_phase2_progress_delete", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/ipcc/installinator-image-id": { - "put": { - "summary": "Set the installinator image ID the sled should use for recovery.", - "description": "This value can be read by the host via IPCC; see the `ipcc` crate.", - "operationId": "sp_installinator_image_id_set", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstallinatorImageId" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Clear any previously-set installinator image ID on the target sled.", - "operationId": "sp_installinator_image_id_delete", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/power-state": { - "get": { - "summary": "Get the current power state of a sled via its SP.", - "description": "Note that if the sled is in A3, the SP is powered off and will not be able to respond; use the ignition control endpoints for those cases.", - "operationId": "sp_power_state_get", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PowerState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "summary": "Set the current power state of a sled via its SP.", - "description": "Note that if the sled is in A3, the SP is powered off and will not be able to respond; use the ignition control endpoints for those cases.", - "operationId": "sp_power_state_set", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PowerState" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/sensor/{sensor_id}/value": { - "get": { - "summary": "Read the current value of a sensor by ID", - "description": "Sensor IDs come from the host topo tree.", - "operationId": "sp_sensor_read_value", - "parameters": [ - { - "in": "path", - "name": "sensor_id", - "description": "ID for the sensor on the SP.", - "required": true, - "schema": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpSensorReading" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/startup-options": { - "get": { - "summary": "Get host startup options for a sled", - "description": "This endpoint will currently fail for any `SpType` other than `SpType::Sled`.", - "operationId": "sp_startup_options_get", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HostStartupOptions" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "summary": "Set host startup options for a sled", - "description": "This endpoint will currently fail for any `SpType` other than `SpType::Sled`.", - "operationId": "sp_startup_options_set", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HostStartupOptions" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/task-dump": { - "get": { - "summary": "Get the number of task dumps present on an SP", - "operationId": "sp_task_dump_count", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "uint32", - "type": "integer", - "format": "uint32", - "minimum": 0 - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/task-dump/{task_dump_index}": { - "get": { - "summary": "Read a single task dump from an SP", - "operationId": "sp_task_dump_get", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "task_dump_index", - "description": "The index of the task dump to be read.", - "required": true, - "schema": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskDump" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "ComponentFirmwareHashStatus": { - "oneOf": [ - { - "description": "The hash is not available; the client must issue a separate request to begin calculating the hash.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "hash_not_calculated" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The hash is currently being calculated; the client should sleep briefly then check again.\n\nWe expect this operation to take a handful of seconds in practice.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "hash_in_progress" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The hash of the given firmware slot.", - "type": "object", - "properties": { - "sha256": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 32, - "maxItems": 32 - }, - "status": { - "type": "string", - "enum": [ - "hashed" - ] - } - }, - "required": [ - "sha256", - "status" - ] - } - ] - }, - "Duration": { - "type": "object", - "properties": { - "nanos": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "secs": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "nanos", - "secs" - ] - }, - "Ena": { - "description": "An Error Numeric Association (ENA)", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "Ereport": { - "description": "An ereport message.", - "type": "object", - "properties": { - "ena": { - "description": "The ENA of the ereport.", - "allOf": [ - { - "$ref": "#/components/schemas/Ena" - } - ] - } - }, - "required": [ - "ena" - ], - "additionalProperties": true - }, - "Ereports": { - "description": "A tranche of ereports received from a reporter.", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ereport" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - }, - "restart_id": { - "description": "The reporter's current restart ID.\n\nIf this is not equal to the current known restart ID, then the reporter has restarted.", - "allOf": [ - { - "$ref": "#/components/schemas/TypedUuidForEreporterRestartKind" - } - ] - } - }, - "required": [ - "items", - "restart_id" - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "GetCfpaParams": { - "type": "object", - "properties": { - "slot": { - "$ref": "#/components/schemas/RotCfpaSlot" - } - }, - "required": [ - "slot" - ] - }, - "GetRotBootInfoParams": { - "type": "object", - "properties": { - "version": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "version" - ] - }, - "HostPhase2Progress": { - "oneOf": [ - { - "type": "object", - "properties": { - "age": { - "$ref": "#/components/schemas/Duration" - }, - "image_id": { - "$ref": "#/components/schemas/HostPhase2RecoveryImageId" - }, - "offset": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "progress": { - "type": "string", - "enum": [ - "available" - ] - }, - "total_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "age", - "image_id", - "offset", - "progress", - "total_size" - ] - }, - { - "type": "object", - "properties": { - "progress": { - "type": "string", - "enum": [ - "none" - ] - } - }, - "required": [ - "progress" - ] - } - ] - }, - "HostPhase2RecoveryImageId": { - "description": "Identity of a host phase2 recovery image.", - "type": "object", - "properties": { - "sha256_hash": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - "required": [ - "sha256_hash" - ] - }, - "HostStartupOptions": { - "type": "object", - "properties": { - "boot_net": { - "type": "boolean" - }, - "boot_ramdisk": { - "type": "boolean" - }, - "bootrd": { - "type": "boolean" - }, - "kbm": { - "type": "boolean" - }, - "kmdb": { - "type": "boolean" - }, - "kmdb_boot": { - "type": "boolean" - }, - "phase2_recovery_mode": { - "type": "boolean" - }, - "prom": { - "type": "boolean" - }, - "verbose": { - "type": "boolean" - } - }, - "required": [ - "boot_net", - "boot_ramdisk", - "bootrd", - "kbm", - "kmdb", - "kmdb_boot", - "phase2_recovery_mode", - "prom", - "verbose" - ] - }, - "InstallinatorImageId": { - "type": "object", - "properties": { - "control_plane": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "host_phase_2": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "update_id": { - "$ref": "#/components/schemas/TypedUuidForMupdateKind" - } - }, - "required": [ - "control_plane", - "host_phase_2", - "update_id" - ] - }, - "LinkStatus": { - "oneOf": [ - { - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "error" - ] - } - }, - "required": [ - "status" - ] - }, - { - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "down" - ] - } - }, - "required": [ - "status" - ] - }, - { - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "up" - ] - } - }, - "required": [ - "status" - ] - } - ] - }, - "MeasurementErrorCode": { - "oneOf": [ - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "invalid_sensor" - ] - } - }, - "required": [ - "code" - ] - }, - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "no_reading" - ] - } - }, - "required": [ - "code" - ] - }, - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "not_present" - ] - } - }, - "required": [ - "code" - ] - }, - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "device_error" - ] - } - }, - "required": [ - "code" - ] - }, - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "device_unavailable" - ] - } - }, - "required": [ - "code" - ] - }, - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "device_timeout" - ] - } - }, - "required": [ - "code" - ] - }, - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "device_off" - ] - } - }, - "required": [ - "code" - ] - } - ] - }, - "MeasurementKind": { - "oneOf": [ - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "temperature" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "power" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "current" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "voltage" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "input_current" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "input_voltage" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "speed" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "cpu_tctl" - ] - } - }, - "required": [ - "kind" - ] - } - ] - }, - "PacketCount": { - "type": "object", - "properties": { - "broadcast": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "multicast": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "unicast": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "broadcast", - "multicast", - "unicast" - ] - }, - "PhyStatus": { - "type": "object", - "properties": { - "mac_link_up": { - "$ref": "#/components/schemas/LinkStatus" - }, - "media_link_up": { - "$ref": "#/components/schemas/LinkStatus" - }, - "ty": { - "$ref": "#/components/schemas/PhyType" - } - }, - "required": [ - "mac_link_up", - "media_link_up", - "ty" - ] - }, - "PhyType": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vsc8504" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vsc8522" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vsc8552" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vsc8562" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "PortConfig": { - "type": "object", - "properties": { - "dev_num": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "dev_type": { - "$ref": "#/components/schemas/PortDev" - }, - "mode": { - "$ref": "#/components/schemas/PortMode" - }, - "serdes_num": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "serdes_type": { - "$ref": "#/components/schemas/PortSerdes" - } - }, - "required": [ - "dev_num", - "dev_type", - "mode", - "serdes_num", - "serdes_type" - ] - }, - "PortCounters": { - "type": "object", - "properties": { - "link_down_sticky": { - "type": "boolean" - }, - "phy_link_down_sticky": { - "type": "boolean" - }, - "rx": { - "$ref": "#/components/schemas/PacketCount" - }, - "tx": { - "$ref": "#/components/schemas/PacketCount" - } - }, - "required": [ - "link_down_sticky", - "phy_link_down_sticky", - "rx", - "tx" - ] - }, - "PortDev": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dev1g" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dev2g5" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dev10g" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "PortMode": { - "oneOf": [ - { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "sfi" - ] - } - }, - "required": [ - "mode" - ] - }, - { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "base_kr" - ] - } - }, - "required": [ - "mode" - ] - }, - { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "sgmii" - ] - }, - "speed": { - "$ref": "#/components/schemas/Speed" - } - }, - "required": [ - "mode", - "speed" - ] - }, - { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "qsgmii" - ] - }, - "speed": { - "$ref": "#/components/schemas/Speed" - } - }, - "required": [ - "mode", - "speed" - ] - } - ] - }, - "PortSerdes": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "serdes1g" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "serdes6g" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "serdes10g" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "PortStatusErrorCode": { - "oneOf": [ - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "unconfigured" - ] - } - }, - "required": [ - "code" - ] - }, - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "other" - ] - }, - "raw": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "code", - "raw" - ] - } - ] - }, - "PowerState": { - "description": "See RFD 81.\n\nThis enum only lists power states the SP is able to control; higher power states are controlled by ignition.", - "type": "string", - "enum": [ - "A0", - "A1", - "A2" - ] - }, - "RotCfpa": { - "type": "object", - "properties": { - "base64_data": { - "type": "string" - }, - "slot": { - "$ref": "#/components/schemas/RotCfpaSlot" - } - }, - "required": [ - "base64_data", - "slot" - ] - }, - "RotCfpaSlot": { - "oneOf": [ - { - "type": "object", - "properties": { - "slot": { - "type": "string", - "enum": [ - "active" - ] - } - }, - "required": [ - "slot" - ] - }, - { - "type": "object", - "properties": { - "slot": { - "type": "string", - "enum": [ - "inactive" - ] - } - }, - "required": [ - "slot" - ] - }, - { - "type": "object", - "properties": { - "slot": { - "type": "string", - "enum": [ - "scratch" - ] - } - }, - "required": [ - "slot" - ] - } - ] - }, - "RotCmpa": { - "type": "object", - "properties": { - "base64_data": { - "type": "string" - } - }, - "required": [ - "base64_data" - ] - }, - "RotImageError": { - "type": "string", - "enum": [ - "unchecked", - "first_page_erased", - "partially_programmed", - "invalid_length", - "header_not_programmed", - "bootloader_too_small", - "bad_magic", - "header_image_size", - "unaligned_length", - "unsupported_type", - "reset_vector_not_thumb2", - "reset_vector", - "signature" - ] - }, - "RotSlot": { - "oneOf": [ - { - "type": "object", - "properties": { - "slot": { - "type": "string", - "enum": [ - "a" - ] - } - }, - "required": [ - "slot" - ] - }, - { - "type": "object", - "properties": { - "slot": { - "type": "string", - "enum": [ - "b" - ] - } - }, - "required": [ - "slot" - ] - } - ] - }, - "RotState": { - "oneOf": [ - { - "type": "object", - "properties": { - "active": { - "$ref": "#/components/schemas/RotSlot" - }, - "pending_persistent_boot_preference": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotSlot" - } - ] - }, - "persistent_boot_preference": { - "$ref": "#/components/schemas/RotSlot" - }, - "slot_a_sha3_256_digest": { - "nullable": true, - "type": "string" - }, - "slot_b_sha3_256_digest": { - "nullable": true, - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "v2" - ] - }, - "transient_boot_preference": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotSlot" - } - ] - } - }, - "required": [ - "active", - "persistent_boot_preference", - "state" - ] - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "communication_failed" - ] - } - }, - "required": [ - "message", - "state" - ] - }, - { - "type": "object", - "properties": { - "active": { - "$ref": "#/components/schemas/RotSlot" - }, - "pending_persistent_boot_preference": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotSlot" - } - ] - }, - "persistent_boot_preference": { - "$ref": "#/components/schemas/RotSlot" - }, - "slot_a_error": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotImageError" - } - ] - }, - "slot_a_fwid": { - "type": "string" - }, - "slot_b_error": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotImageError" - } - ] - }, - "slot_b_fwid": { - "type": "string" - }, - "stage0_error": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotImageError" - } - ] - }, - "stage0_fwid": { - "type": "string" - }, - "stage0next_error": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotImageError" - } - ] - }, - "stage0next_fwid": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "v3" - ] - }, - "transient_boot_preference": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotSlot" - } - ] - } - }, - "required": [ - "active", - "persistent_boot_preference", - "slot_a_fwid", - "slot_b_fwid", - "stage0_fwid", - "stage0next_fwid", - "state" - ] - } - ] - }, - "SpComponentCaboose": { - "type": "object", - "properties": { - "board": { - "type": "string" - }, - "epoch": { - "nullable": true, - "type": "string" - }, - "git_commit": { - "type": "string" - }, - "name": { - "type": "string" - }, - "sign": { - "nullable": true, - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "board", - "git_commit", - "name", - "version" - ] - }, - "SpComponentDetails": { - "oneOf": [ - { - "type": "object", - "properties": { - "cfg": { - "$ref": "#/components/schemas/PortConfig" - }, - "counters": { - "$ref": "#/components/schemas/PortCounters" - }, - "link_status": { - "$ref": "#/components/schemas/LinkStatus" - }, - "phy_status": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/PhyStatus" - } - ] - }, - "port": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "port_status" - ] - } - }, - "required": [ - "cfg", - "counters", - "link_status", - "port", - "type" - ] - }, - { - "type": "object", - "properties": { - "code": { - "$ref": "#/components/schemas/PortStatusErrorCode" - }, - "port": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "port_status_error" - ] - } - }, - "required": [ - "code", - "port", - "type" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/MeasurementKind" - }, - "name": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "measurement" - ] - }, - "value": { - "type": "number", - "format": "float" - } - }, - "required": [ - "kind", - "name", - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "error": { - "$ref": "#/components/schemas/MeasurementErrorCode" - }, - "kind": { - "$ref": "#/components/schemas/MeasurementKind" - }, - "name": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "measurement_error" - ] - } - }, - "required": [ - "error", - "kind", - "name", - "type" - ] - } - ] - }, - "SpComponentFirmwareSlot": { - "description": "Identifier for an SP's component's firmware slot; e.g., slots 0 and 1 for the host boot flash.", - "type": "object", - "properties": { - "slot": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "slot" - ] - }, - "SpComponentInfo": { - "description": "Overview of a single SP component.", - "type": "object", - "properties": { - "capabilities": { - "description": "`capabilities` is a bitmask; interpret it via [`gateway_messages::DeviceCapabilities`].", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "component": { - "description": "The unique identifier for this component.", - "type": "string" - }, - "description": { - "description": "A human-readable description of the component.", - "type": "string" - }, - "device": { - "description": "The name of the physical device.", - "type": "string" - }, - "presence": { - "description": "Whether or not the component is present, to the best of the SP's ability to judge.", - "allOf": [ - { - "$ref": "#/components/schemas/SpComponentPresence" - } - ] - }, - "serial_number": { - "nullable": true, - "description": "The component's serial number, if it has one.", - "type": "string" - } - }, - "required": [ - "capabilities", - "component", - "description", - "device", - "presence" - ] - }, - "SpComponentList": { - "description": "List of components from a single SP.", - "type": "object", - "properties": { - "components": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SpComponentInfo" - } - } - }, - "required": [ - "components" - ] - }, - "SpComponentPresence": { - "description": "Description of the presence or absence of a component.\n\nThe presence of some components may vary based on the power state of the sled (e.g., components that time out or appear unavailable if the sled is in A2 may become present when the sled moves to A0).", - "oneOf": [ - { - "description": "The component is present.", - "type": "string", - "enum": [ - "present" - ] - }, - { - "description": "The component is not present.", - "type": "string", - "enum": [ - "not_present" - ] - }, - { - "description": "The component is present but in a failed or faulty state.", - "type": "string", - "enum": [ - "failed" - ] - }, - { - "description": "The SP is unable to determine the presence of the component.", - "type": "string", - "enum": [ - "unavailable" - ] - }, - { - "description": "The SP's attempt to determine the presence of the component timed out.", - "type": "string", - "enum": [ - "timeout" - ] - }, - { - "description": "The SP's attempt to determine the presence of the component failed.", - "type": "string", - "enum": [ - "error" - ] - } - ] - }, - "SpComponentResetError": { - "description": "The error type returned by the `sp_component_reset()` MGS endpoint.", - "oneOf": [ - { - "description": "MGS refuses to reset its own sled's SP.", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "reset_sp_of_local_sled" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Other dropshot errors.", - "type": "object", - "properties": { - "error_code": { - "nullable": true, - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "other" - ] - } - }, - "required": [ - "message", - "state" - ] - } - ] - }, - "SpIdentifier": { - "type": "object", - "properties": { - "slot": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "type": { - "$ref": "#/components/schemas/SpType" - } - }, - "required": [ - "slot", - "type" - ] - }, - "SpIgnition": { - "description": "State of an ignition target.\n\nTODO: Ignition returns much more information than we're reporting here: do we want to expand this?", - "oneOf": [ - { - "type": "object", - "properties": { - "present": { - "type": "string", - "enum": [ - "no" - ] - } - }, - "required": [ - "present" - ] - }, - { - "type": "object", - "properties": { - "ctrl_detect_0": { - "type": "boolean" - }, - "ctrl_detect_1": { - "type": "boolean" - }, - "flt_a2": { - "type": "boolean" - }, - "flt_a3": { - "type": "boolean" - }, - "flt_rot": { - "type": "boolean" - }, - "flt_sp": { - "type": "boolean" - }, - "id": { - "$ref": "#/components/schemas/SpIgnitionSystemType" - }, - "power": { - "type": "boolean" - }, - "present": { - "type": "string", - "enum": [ - "yes" - ] - } - }, - "required": [ - "ctrl_detect_0", - "ctrl_detect_1", - "flt_a2", - "flt_a3", - "flt_rot", - "flt_sp", - "id", - "power", - "present" - ] - } - ] - }, - "SpIgnitionInfo": { - "type": "object", - "properties": { - "details": { - "$ref": "#/components/schemas/SpIgnition" - }, - "id": { - "$ref": "#/components/schemas/SpIdentifier" - } - }, - "required": [ - "details", - "id" - ] - }, - "SpIgnitionSystemType": { - "description": "TODO: Do we want to bake in specific board names, or use raw u16 ID numbers?", - "oneOf": [ - { - "type": "object", - "properties": { - "system_type": { - "type": "string", - "enum": [ - "gimlet" - ] - } - }, - "required": [ - "system_type" - ] - }, - { - "type": "object", - "properties": { - "system_type": { - "type": "string", - "enum": [ - "sidecar" - ] - } - }, - "required": [ - "system_type" - ] - }, - { - "type": "object", - "properties": { - "system_type": { - "type": "string", - "enum": [ - "psc" - ] - } - }, - "required": [ - "system_type" - ] - }, - { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "system_type": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "id", - "system_type" - ] - } - ] - }, - "SpSensorReading": { - "description": "Result of reading an SP sensor.", - "type": "object", - "properties": { - "result": { - "description": "Value (or error) from the sensor.", - "allOf": [ - { - "$ref": "#/components/schemas/SpSensorReadingResult" - } - ] - }, - "timestamp": { - "description": "SP-centric timestamp of when `result` was recorded from this sensor.\n\nCurrently this value represents \"milliseconds since the last SP boot\" and is primarily useful as a delta between sensors on this SP (assuming no reboot in between). The meaning could change with future SP releases.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "result", - "timestamp" - ] - }, - "SpSensorReadingResult": { - "description": "Single reading (or error) from an SP sensor.", - "oneOf": [ - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "success" - ] - }, - "value": { - "type": "number", - "format": "float" - } - }, - "required": [ - "kind", - "value" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "device_off" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "device_error" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "device_not_present" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "device_unavailable" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "device_timeout" - ] - } - }, - "required": [ - "kind" - ] - } - ] - }, - "SpState": { - "type": "object", - "properties": { - "base_mac_address": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 6, - "maxItems": 6 - }, - "hubris_archive_id": { - "type": "string" - }, - "model": { - "type": "string" - }, - "power_state": { - "$ref": "#/components/schemas/PowerState" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "rot": { - "$ref": "#/components/schemas/RotState" - }, - "serial_number": { - "type": "string" - } - }, - "required": [ - "base_mac_address", - "hubris_archive_id", - "model", - "power_state", - "revision", - "rot", - "serial_number" - ] - }, - "SpType": { - "type": "string", - "enum": [ - "sled", - "power", - "switch" - ] - }, - "SpUpdateStatus": { - "oneOf": [ - { - "description": "The SP has no update status.", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "none" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "The SP is preparing to receive an update.\n\nMay or may not include progress, depending on the capabilities of the component being updated.", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "progress": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/UpdatePreparationProgress" - } - ] - }, - "state": { - "type": "string", - "enum": [ - "preparing" - ] - } - }, - "required": [ - "id", - "state" - ] - }, - { - "description": "The SP is currently receiving an update.", - "type": "object", - "properties": { - "bytes_received": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "id": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "in_progress" - ] - }, - "total_bytes": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "bytes_received", - "id", - "state", - "total_bytes" - ] - }, - { - "description": "The SP has completed receiving an update.", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "complete" - ] - } - }, - "required": [ - "id", - "state" - ] - }, - { - "description": "The SP has aborted an in-progress update.", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "aborted" - ] - } - }, - "required": [ - "id", - "state" - ] - }, - { - "description": "The update process failed.", - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "id": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "failed" - ] - } - }, - "required": [ - "code", - "id", - "state" - ] - }, - { - "description": "The update process failed with an RoT-specific error.", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "rot_error" - ] - } - }, - "required": [ - "id", - "message", - "state" - ] - } - ] - }, - "Speed": { - "oneOf": [ - { - "type": "object", - "properties": { - "speed": { - "type": "string", - "enum": [ - "speed100_m" - ] - } - }, - "required": [ - "speed" - ] - }, - { - "type": "object", - "properties": { - "speed": { - "type": "string", - "enum": [ - "speed1_g" - ] - } - }, - "required": [ - "speed" - ] - }, - { - "type": "object", - "properties": { - "speed": { - "type": "string", - "enum": [ - "speed10_g" - ] - } - }, - "required": [ - "speed" - ] - } - ] - }, - "TaskDump": { - "type": "object", - "properties": { - "archive_id": { - "description": "Hex-encoded Hubris archive ID.", - "type": "string" - }, - "base64_zip": { - "description": "Base64-encoded zip file containing dehydrated task dump.", - "type": "string" - }, - "bord": { - "description": "`BORD` field from the caboose.", - "type": "string" - }, - "gitc": { - "description": "`GITC` field from the caboose.", - "type": "string" - }, - "task_index": { - "description": "Index of the crashed task.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "timestamp": { - "description": "Hubris timestamp at which the task crash occurred.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "vers": { - "nullable": true, - "description": "`VERS` field from the caboose, if present.", - "type": "string" - } - }, - "required": [ - "archive_id", - "base64_zip", - "bord", - "gitc", - "task_index", - "timestamp" - ] - }, - "TypedUuidForEreporterRestartKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForMupdateKind": { - "type": "string", - "format": "uuid" - }, - "UpdateAbortBody": { - "type": "object", - "properties": { - "id": { - "description": "The ID of the update to abort.\n\nIf the SP is currently receiving an update with this ID, it will be aborted.\n\nIf the SP is currently receiving an update with a different ID, the abort request will fail.\n\nIf the SP is not currently receiving any update, the request to abort should succeed but will not have actually done anything.", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "id" - ] - }, - "UpdatePreparationProgress": { - "description": "Progress of an SP preparing to update.\n\nThe units of `current` and `total` are unspecified and defined by the SP; e.g., if preparing for an update requires erasing a flash device, this may indicate progress of that erasure without defining units (bytes, pages, sectors, etc.).", - "type": "object", - "properties": { - "current": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "total": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "current", - "total" - ] - }, - "IgnitionCommand": { - "description": "Ignition command.", - "type": "string", - "enum": [ - "power_on", - "power_off", - "power_reset" - ] - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "SpComponentResetError": { - "description": "SpComponentResetError", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpComponentResetError" - } - } - } - } - } - } -} diff --git a/openapi/gateway/gateway-1.0.0-12d926.json.gitref b/openapi/gateway/gateway-1.0.0-12d926.json.gitref new file mode 100644 index 00000000000..db4662551ad --- /dev/null +++ b/openapi/gateway/gateway-1.0.0-12d926.json.gitref @@ -0,0 +1 @@ +a8524a37614abeeb287a85164bb525d725ef86e5:openapi/gateway/gateway-1.0.0-12d926.json \ No newline at end of file diff --git a/openapi/gateway/gateway-2.0.0-a1962e.json b/openapi/gateway/gateway-2.0.0-a1962e.json deleted file mode 100644 index 1463ab38710..00000000000 --- a/openapi/gateway/gateway-2.0.0-a1962e.json +++ /dev/null @@ -1,4032 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Management Gateway Service API", - "description": "API for interacting with the Oxide control plane's gateway service", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "2.0.0" - }, - "paths": { - "/ignition": { - "get": { - "summary": "List SPs via Ignition", - "description": "Retreive information for all SPs via the Ignition controller. This is lower latency and has fewer possible failure modes than querying the SP over the management network.", - "operationId": "ignition_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SpIgnitionInfo", - "type": "array", - "items": { - "$ref": "#/components/schemas/SpIgnitionInfo" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/ignition/{type}/{slot}": { - "get": { - "summary": "Get SP info via Ignition", - "description": "Retreive information for an SP via the Ignition controller. This is lower latency and has fewer possible failure modes than querying the SP over the management network.", - "operationId": "ignition_get", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpIgnitionInfo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/ignition/{type}/{slot}/{command}": { - "post": { - "summary": "Send an ignition command targeting a specific SP.", - "description": "This endpoint can be used to transition a target between A2 and A3 (via power-on / power-off) or reset it.\n\nThe management network traffic caused by requests to this endpoint is between this MGS instance and its local ignition controller, _not_ the SP targeted by the command.", - "operationId": "ignition_command", - "parameters": [ - { - "in": "path", - "name": "command", - "description": "Ignition command to perform on the targeted SP.", - "required": true, - "schema": { - "$ref": "#/components/schemas/IgnitionCommand" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/local/all-sp-ids": { - "get": { - "summary": "Get the complete list of SP identifiers this MGS instance is configured to", - "description": "find and communicate with.\n\nNote that unlike most MGS endpoints, this endpoint does not send any communication on the management network.", - "operationId": "sp_all_ids", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SpIdentifier", - "type": "array", - "items": { - "$ref": "#/components/schemas/SpIdentifier" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/local/switch-id": { - "get": { - "summary": "Get the identifier for the switch this MGS instance is connected to.", - "description": "Note that most MGS endpoints behave identically regardless of which scrimlet the MGS instance is running on; this one, however, is intentionally different. This endpoint is _probably_ only useful for clients communicating with MGS over localhost (i.e., other services in the switch zone) who need to know which sidecar they are connected to.", - "operationId": "sp_local_switch_id", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpIdentifier" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/recovery/host-phase2": { - "post": { - "summary": "Upload a host phase2 image that can be served to recovering hosts via the", - "description": "host/SP control uart.\n\nMGS caches this image in memory and is limited to a small, fixed number of images (potentially 1). Uploading a new image may evict the least-recently-requested image if our cache is already full.", - "operationId": "recovery_host_phase2_upload", - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HostPhase2RecoveryImageId" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}": { - "get": { - "summary": "Get info on an SP", - "operationId": "sp_get", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component": { - "get": { - "summary": "List components of an SP", - "description": "A component is a distinct entity under an SP's direct control. This lists all those components for a given SP.", - "operationId": "sp_component_list", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpComponentList" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}": { - "get": { - "summary": "Get info for an SP component", - "description": "This can be useful, for example, to poll the state of a component if another interface has changed the power state of a component or updated a component.", - "operationId": "sp_component_get", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SpComponentDetails", - "type": "array", - "items": { - "$ref": "#/components/schemas/SpComponentDetails" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/active-slot": { - "get": { - "summary": "Get the currently-active slot for an SP component", - "description": "Note that the meaning of \"current\" in \"currently-active\" may vary depending on the component: for example, it may mean \"the actively-running slot\" or \"the slot that will become active the next time the component is booted\".", - "operationId": "sp_component_active_slot_get", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpComponentFirmwareSlot" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "summary": "Set the currently-active slot for an SP component", - "description": "Note that the meaning of \"current\" in \"currently-active\" may vary depending on the component: for example, it may mean \"the actively-running slot\" or \"the slot that will become active the next time the component is booted\".", - "operationId": "sp_component_active_slot_set", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - }, - { - "in": "query", - "name": "persist", - "description": "Persist this choice of active slot.", - "required": true, - "schema": { - "type": "boolean" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpComponentFirmwareSlot" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/caboose": { - "get": { - "summary": "Get the caboose of an SP component", - "description": "Not all components have a caboose.", - "operationId": "sp_component_caboose_get", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - }, - { - "in": "query", - "name": "firmware_slot", - "description": "The firmware slot to for which we want to request caboose information.", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpComponentCaboose" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/cfpa": { - "get": { - "summary": "Read the requested CFPA slot from a root of trust.", - "description": "This endpoint is only valid for the `rot` component.", - "operationId": "sp_rot_cfpa_get", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetCfpaParams" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RotCfpa" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/clear-status": { - "post": { - "summary": "Clear status of a component", - "description": "For components that maintain event counters (e.g., the sidecar `monorail`), this will reset the event counters to zero.", - "operationId": "sp_component_clear_status", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/cmpa": { - "get": { - "summary": "Read the CMPA from a root of trust.", - "description": "This endpoint is only valid for the `rot` component.", - "operationId": "sp_rot_cmpa_get", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RotCmpa" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/hash/{firmware_slot}": { - "get": { - "summary": "Get a computed hash of a given slot of a component.", - "description": "This endpoint is only valid for the `host-boot-flash` component.\n\nComputing the hash takes several seconds; this endpoint returns the current status. If the status is `HashNotStarted`, callers should start hashing using `sp_component_hash_firmware_start()`. If the status is `HashInProgress`, callers should wait a bit then call this endpoint again.", - "operationId": "sp_component_hash_firmware_get", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "firmware_slot", - "description": "Firmware slot of the component.", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ComponentFirmwareHashStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "summary": "Start computing the hash of a given slot of a component.", - "description": "This endpoint is only valid for the `host-boot-flash` component.\n\nComputing the hash takes several seconds; callers should poll for results using `sp_component_hash_firmware_get()`. In general they should call `sp_component_hash_firmware_get()` first anyway, as the hashes are cached in the SP and may already be ready.", - "operationId": "sp_component_hash_firmware_start", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "firmware_slot", - "description": "Firmware slot of the component.", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/reset": { - "post": { - "summary": "Reset an SP component (possibly the SP itself).", - "operationId": "sp_component_reset", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/SpComponentResetError" - }, - "5XX": { - "$ref": "#/components/responses/SpComponentResetError" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/rot-boot-info": { - "get": { - "summary": "Read the RoT boot state from a root of trust", - "description": "This endpoint is only valid for the `rot` component.", - "operationId": "sp_rot_boot_info", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GetRotBootInfoParams" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RotState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/serial-console/attach": { - "get": { - "summary": "Upgrade into a websocket connection attached to the given SP", - "description": "component's serial console.", - "operationId": "sp_component_serial_console_attach", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - }, - "x-dropshot-websocket": {} - } - }, - "/sp/{type}/{slot}/component/{component}/serial-console/detach": { - "post": { - "summary": "Detach the websocket connection attached to the given SP component's", - "description": "serial console, if such a connection exists.", - "operationId": "sp_component_serial_console_detach", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/update": { - "post": { - "summary": "Update an SP component", - "description": "Update a component of an SP according to its specific update mechanism. This interface is generic for all component types, but resolves to a mechanism specific to the given component type. This may fail for a variety of reasons including the update bundle being invalid or improperly specified or due to an error originating from the SP itself.\n\nNote that not all components may be updated; components without known update mechanisms will return an error without any inspection of the update bundle.\n\nUpdating the SP itself is done via the component name `sp`.", - "operationId": "sp_component_update", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - }, - { - "in": "query", - "name": "firmware_slot", - "description": "The update slot to apply this image to. Supply 0 if the component only has one update slot.", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "query", - "name": "id", - "description": "An identifier for this update.\n\nThis ID applies to this single instance of the API call; it is not an ID of `image` itself. Multiple API calls with the same `image` should use different IDs.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/update-abort": { - "post": { - "summary": "Abort any in-progress update an SP component", - "description": "Aborting an update to the SP itself is done via the component name `sp`.\n\nOn a successful return, the update corresponding to the given UUID will no longer be in progress (either aborted or applied).", - "operationId": "sp_component_update_abort", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateAbortBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/component/{component}/update-status": { - "get": { - "summary": "Get the status of an update being applied to an SP component", - "description": "Getting the status of an update to the SP itself is done via the component name `sp`.", - "operationId": "sp_component_update_status", - "parameters": [ - { - "in": "path", - "name": "component", - "description": "ID for the component of the SP; this is the internal identifier used by the SP itself to identify its components.", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpUpdateStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/ereports": { - "post": { - "summary": "Request ereports from the target service processor.", - "description": "Query parameters provide the ENAs of the initial ereport in the returned tranche, the SP's restart ID that the control plane believes is current, and the (optional) last committed ENA.", - "operationId": "sp_ereports_ingest", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - }, - { - "in": "query", - "name": "committed", - "description": "The ENA of the last ereport committed to persistent storage from the requested reporter restart generation.\n\nIf the restart ID parameter matches the reporter's current restart ID, it is permitted to discard any ereports with ENAs up to and including this value. If the restart ID has changed from the provided one, the reporter will not discard data.", - "schema": { - "$ref": "#/components/schemas/Ena" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of ereports to return in this tranche.", - "required": true, - "schema": { - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "restart_id", - "description": "The restart ID of the reporter at which all other query parameters are valid.\n\nIf this value does not match the reporter's restart ID, the reporter's response will include the current generation, and will start at the earliest known ENA, rather than the provided `start_at` ENA.", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForEreporterRestartKind" - } - }, - { - "in": "query", - "name": "start_at", - "description": "If present, the reporter should not include ENAs earlier than this one in its response, provided that the query's requested restart ID matches the current restart ID.", - "schema": { - "$ref": "#/components/schemas/Ena" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Ereports" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/host-phase2-progress": { - "get": { - "summary": "Get the most recent host phase2 request we've seen from the target SP.", - "description": "This method can be used as an indirect progress report for how far along a host is when it is booting via the MGS -> SP -> UART recovery path. This path is used to install the trampoline image containing installinator to recover a sled.", - "operationId": "sp_host_phase2_progress_get", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HostPhase2Progress" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Clear the most recent host phase2 request we've seen from the target SP.", - "operationId": "sp_host_phase2_progress_delete", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/ipcc/installinator-image-id": { - "put": { - "summary": "Set the installinator image ID the sled should use for recovery.", - "description": "This value can be read by the host via IPCC; see the `ipcc` crate.", - "operationId": "sp_installinator_image_id_set", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstallinatorImageId" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Clear any previously-set installinator image ID on the target sled.", - "operationId": "sp_installinator_image_id_delete", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/power-state": { - "get": { - "summary": "Get the current power state of a sled via its SP.", - "description": "Note that if the sled is in A3, the SP is powered off and will not be able to respond; use the ignition control endpoints for those cases.", - "operationId": "sp_power_state_get", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PowerState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "summary": "Set the current power state of a sled via its SP.", - "description": "Note that if the sled is in A3, the SP is powered off and will not be able to respond; use the ignition control endpoints for those cases.", - "operationId": "sp_power_state_set", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PowerState" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/sensor/{sensor_id}/value": { - "get": { - "summary": "Read the current value of a sensor by ID", - "description": "Sensor IDs come from the host topo tree.", - "operationId": "sp_sensor_read_value", - "parameters": [ - { - "in": "path", - "name": "sensor_id", - "description": "ID for the sensor on the SP.", - "required": true, - "schema": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpSensorReading" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/startup-options": { - "get": { - "summary": "Get host startup options for a sled", - "description": "This endpoint will currently fail for any `SpType` other than `SpType::Sled`.", - "operationId": "sp_startup_options_get", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HostStartupOptions" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "summary": "Set host startup options for a sled", - "description": "This endpoint will currently fail for any `SpType` other than `SpType::Sled`.", - "operationId": "sp_startup_options_set", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HostStartupOptions" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/task-dump": { - "get": { - "summary": "Get the number of task dumps present on an SP", - "operationId": "sp_task_dump_count", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "uint32", - "type": "integer", - "format": "uint32", - "minimum": 0 - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sp/{type}/{slot}/task-dump/{task_dump_index}": { - "get": { - "summary": "Read a single task dump from an SP", - "operationId": "sp_task_dump_get", - "parameters": [ - { - "in": "path", - "name": "slot", - "required": true, - "schema": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - { - "in": "path", - "name": "task_dump_index", - "description": "The index of the task dump to be read.", - "required": true, - "schema": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - { - "in": "path", - "name": "type", - "required": true, - "schema": { - "$ref": "#/components/schemas/SpType" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TaskDump" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "ComponentFirmwareHashStatus": { - "oneOf": [ - { - "description": "The hash is not available; the client must issue a separate request to begin calculating the hash.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "hash_not_calculated" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The hash is currently being calculated; the client should sleep briefly then check again.\n\nWe expect this operation to take a handful of seconds in practice.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "hash_in_progress" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The hash of the given firmware slot.", - "type": "object", - "properties": { - "sha256": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 32, - "maxItems": 32 - }, - "status": { - "type": "string", - "enum": [ - "hashed" - ] - } - }, - "required": [ - "sha256", - "status" - ] - } - ] - }, - "Duration": { - "type": "object", - "properties": { - "nanos": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "secs": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "nanos", - "secs" - ] - }, - "Ena": { - "description": "An Error Numeric Association (ENA)", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "Ereport": { - "description": "An ereport message.", - "type": "object", - "properties": { - "ena": { - "description": "The ENA of the ereport.", - "allOf": [ - { - "$ref": "#/components/schemas/Ena" - } - ] - } - }, - "required": [ - "ena" - ], - "additionalProperties": true - }, - "Ereports": { - "description": "A tranche of ereports received from a reporter.", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ereport" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - }, - "restart_id": { - "description": "The reporter's current restart ID.\n\nIf this is not equal to the current known restart ID, then the reporter has restarted.", - "allOf": [ - { - "$ref": "#/components/schemas/TypedUuidForEreporterRestartKind" - } - ] - } - }, - "required": [ - "items", - "restart_id" - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "GetCfpaParams": { - "type": "object", - "properties": { - "slot": { - "$ref": "#/components/schemas/RotCfpaSlot" - } - }, - "required": [ - "slot" - ] - }, - "GetRotBootInfoParams": { - "type": "object", - "properties": { - "version": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "version" - ] - }, - "HostPhase2Progress": { - "oneOf": [ - { - "type": "object", - "properties": { - "age": { - "$ref": "#/components/schemas/Duration" - }, - "image_id": { - "$ref": "#/components/schemas/HostPhase2RecoveryImageId" - }, - "offset": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "progress": { - "type": "string", - "enum": [ - "available" - ] - }, - "total_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "age", - "image_id", - "offset", - "progress", - "total_size" - ] - }, - { - "type": "object", - "properties": { - "progress": { - "type": "string", - "enum": [ - "none" - ] - } - }, - "required": [ - "progress" - ] - } - ] - }, - "HostPhase2RecoveryImageId": { - "description": "Identity of a host phase2 recovery image.", - "type": "object", - "properties": { - "sha256_hash": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - "required": [ - "sha256_hash" - ] - }, - "HostStartupOptions": { - "type": "object", - "properties": { - "boot_net": { - "type": "boolean" - }, - "boot_ramdisk": { - "type": "boolean" - }, - "bootrd": { - "type": "boolean" - }, - "kbm": { - "type": "boolean" - }, - "kmdb": { - "type": "boolean" - }, - "kmdb_boot": { - "type": "boolean" - }, - "phase2_recovery_mode": { - "type": "boolean" - }, - "prom": { - "type": "boolean" - }, - "verbose": { - "type": "boolean" - } - }, - "required": [ - "boot_net", - "boot_ramdisk", - "bootrd", - "kbm", - "kmdb", - "kmdb_boot", - "phase2_recovery_mode", - "prom", - "verbose" - ] - }, - "InstallinatorImageId": { - "type": "object", - "properties": { - "control_plane": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "host_phase_2": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "update_id": { - "$ref": "#/components/schemas/TypedUuidForMupdateKind" - } - }, - "required": [ - "control_plane", - "host_phase_2", - "update_id" - ] - }, - "LinkStatus": { - "oneOf": [ - { - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "error" - ] - } - }, - "required": [ - "status" - ] - }, - { - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "down" - ] - } - }, - "required": [ - "status" - ] - }, - { - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "up" - ] - } - }, - "required": [ - "status" - ] - } - ] - }, - "MeasurementErrorCode": { - "oneOf": [ - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "invalid_sensor" - ] - } - }, - "required": [ - "code" - ] - }, - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "no_reading" - ] - } - }, - "required": [ - "code" - ] - }, - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "not_present" - ] - } - }, - "required": [ - "code" - ] - }, - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "device_error" - ] - } - }, - "required": [ - "code" - ] - }, - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "device_unavailable" - ] - } - }, - "required": [ - "code" - ] - }, - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "device_timeout" - ] - } - }, - "required": [ - "code" - ] - }, - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "device_off" - ] - } - }, - "required": [ - "code" - ] - } - ] - }, - "MeasurementKind": { - "oneOf": [ - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "temperature" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "power" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "current" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "voltage" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "input_current" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "input_voltage" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "speed" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "cpu_tctl" - ] - } - }, - "required": [ - "kind" - ] - } - ] - }, - "PacketCount": { - "type": "object", - "properties": { - "broadcast": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "multicast": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "unicast": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "broadcast", - "multicast", - "unicast" - ] - }, - "PhyStatus": { - "type": "object", - "properties": { - "mac_link_up": { - "$ref": "#/components/schemas/LinkStatus" - }, - "media_link_up": { - "$ref": "#/components/schemas/LinkStatus" - }, - "ty": { - "$ref": "#/components/schemas/PhyType" - } - }, - "required": [ - "mac_link_up", - "media_link_up", - "ty" - ] - }, - "PhyType": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vsc8504" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vsc8522" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vsc8552" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vsc8562" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "PortConfig": { - "type": "object", - "properties": { - "dev_num": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "dev_type": { - "$ref": "#/components/schemas/PortDev" - }, - "mode": { - "$ref": "#/components/schemas/PortMode" - }, - "serdes_num": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "serdes_type": { - "$ref": "#/components/schemas/PortSerdes" - } - }, - "required": [ - "dev_num", - "dev_type", - "mode", - "serdes_num", - "serdes_type" - ] - }, - "PortCounters": { - "type": "object", - "properties": { - "link_down_sticky": { - "type": "boolean" - }, - "phy_link_down_sticky": { - "type": "boolean" - }, - "rx": { - "$ref": "#/components/schemas/PacketCount" - }, - "tx": { - "$ref": "#/components/schemas/PacketCount" - } - }, - "required": [ - "link_down_sticky", - "phy_link_down_sticky", - "rx", - "tx" - ] - }, - "PortDev": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dev1g" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dev2g5" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dev10g" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "PortMode": { - "oneOf": [ - { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "sfi" - ] - } - }, - "required": [ - "mode" - ] - }, - { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "base_kr" - ] - } - }, - "required": [ - "mode" - ] - }, - { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "sgmii" - ] - }, - "speed": { - "$ref": "#/components/schemas/Speed" - } - }, - "required": [ - "mode", - "speed" - ] - }, - { - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "qsgmii" - ] - }, - "speed": { - "$ref": "#/components/schemas/Speed" - } - }, - "required": [ - "mode", - "speed" - ] - } - ] - }, - "PortSerdes": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "serdes1g" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "serdes6g" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "serdes10g" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "PortStatusErrorCode": { - "oneOf": [ - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "unconfigured" - ] - } - }, - "required": [ - "code" - ] - }, - { - "type": "object", - "properties": { - "code": { - "type": "string", - "enum": [ - "other" - ] - }, - "raw": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "code", - "raw" - ] - } - ] - }, - "PowerState": { - "description": "See RFD 81.\n\nThis enum only lists power states the SP is able to control; higher power states are controlled by ignition.", - "type": "string", - "enum": [ - "A0", - "A1", - "A2" - ] - }, - "RotCfpa": { - "type": "object", - "properties": { - "base64_data": { - "type": "string" - }, - "slot": { - "$ref": "#/components/schemas/RotCfpaSlot" - } - }, - "required": [ - "base64_data", - "slot" - ] - }, - "RotCfpaSlot": { - "oneOf": [ - { - "type": "object", - "properties": { - "slot": { - "type": "string", - "enum": [ - "active" - ] - } - }, - "required": [ - "slot" - ] - }, - { - "type": "object", - "properties": { - "slot": { - "type": "string", - "enum": [ - "inactive" - ] - } - }, - "required": [ - "slot" - ] - }, - { - "type": "object", - "properties": { - "slot": { - "type": "string", - "enum": [ - "scratch" - ] - } - }, - "required": [ - "slot" - ] - } - ] - }, - "RotCmpa": { - "type": "object", - "properties": { - "base64_data": { - "type": "string" - } - }, - "required": [ - "base64_data" - ] - }, - "RotImageError": { - "type": "string", - "enum": [ - "unchecked", - "first_page_erased", - "partially_programmed", - "invalid_length", - "header_not_programmed", - "bootloader_too_small", - "bad_magic", - "header_image_size", - "unaligned_length", - "unsupported_type", - "reset_vector_not_thumb2", - "reset_vector", - "signature" - ] - }, - "RotSlot": { - "oneOf": [ - { - "type": "object", - "properties": { - "slot": { - "type": "string", - "enum": [ - "a" - ] - } - }, - "required": [ - "slot" - ] - }, - { - "type": "object", - "properties": { - "slot": { - "type": "string", - "enum": [ - "b" - ] - } - }, - "required": [ - "slot" - ] - } - ] - }, - "RotState": { - "oneOf": [ - { - "type": "object", - "properties": { - "active": { - "$ref": "#/components/schemas/RotSlot" - }, - "pending_persistent_boot_preference": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotSlot" - } - ] - }, - "persistent_boot_preference": { - "$ref": "#/components/schemas/RotSlot" - }, - "slot_a_sha3_256_digest": { - "nullable": true, - "type": "string" - }, - "slot_b_sha3_256_digest": { - "nullable": true, - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "v2" - ] - }, - "transient_boot_preference": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotSlot" - } - ] - } - }, - "required": [ - "active", - "persistent_boot_preference", - "state" - ] - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "communication_failed" - ] - } - }, - "required": [ - "message", - "state" - ] - }, - { - "type": "object", - "properties": { - "active": { - "$ref": "#/components/schemas/RotSlot" - }, - "pending_persistent_boot_preference": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotSlot" - } - ] - }, - "persistent_boot_preference": { - "$ref": "#/components/schemas/RotSlot" - }, - "slot_a_error": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotImageError" - } - ] - }, - "slot_a_fwid": { - "type": "string" - }, - "slot_b_error": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotImageError" - } - ] - }, - "slot_b_fwid": { - "type": "string" - }, - "stage0_error": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotImageError" - } - ] - }, - "stage0_fwid": { - "type": "string" - }, - "stage0next_error": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotImageError" - } - ] - }, - "stage0next_fwid": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "v3" - ] - }, - "transient_boot_preference": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RotSlot" - } - ] - } - }, - "required": [ - "active", - "persistent_boot_preference", - "slot_a_fwid", - "slot_b_fwid", - "stage0_fwid", - "stage0next_fwid", - "state" - ] - } - ] - }, - "SpComponentCaboose": { - "type": "object", - "properties": { - "board": { - "type": "string" - }, - "epoch": { - "nullable": true, - "type": "string" - }, - "git_commit": { - "type": "string" - }, - "name": { - "type": "string" - }, - "sign": { - "nullable": true, - "type": "string" - }, - "version": { - "type": "string" - } - }, - "required": [ - "board", - "git_commit", - "name", - "version" - ] - }, - "SpComponentDetails": { - "oneOf": [ - { - "type": "object", - "properties": { - "cfg": { - "$ref": "#/components/schemas/PortConfig" - }, - "counters": { - "$ref": "#/components/schemas/PortCounters" - }, - "link_status": { - "$ref": "#/components/schemas/LinkStatus" - }, - "phy_status": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/PhyStatus" - } - ] - }, - "port": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "port_status" - ] - } - }, - "required": [ - "cfg", - "counters", - "link_status", - "port", - "type" - ] - }, - { - "type": "object", - "properties": { - "code": { - "$ref": "#/components/schemas/PortStatusErrorCode" - }, - "port": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "port_status_error" - ] - } - }, - "required": [ - "code", - "port", - "type" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/MeasurementKind" - }, - "name": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "measurement" - ] - }, - "value": { - "type": "number", - "format": "float" - } - }, - "required": [ - "kind", - "name", - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "error": { - "$ref": "#/components/schemas/MeasurementErrorCode" - }, - "kind": { - "$ref": "#/components/schemas/MeasurementKind" - }, - "name": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "measurement_error" - ] - } - }, - "required": [ - "error", - "kind", - "name", - "type" - ] - } - ] - }, - "SpComponentFirmwareSlot": { - "description": "Identifier for an SP's component's firmware slot; e.g., slots 0 and 1 for the host boot flash.", - "type": "object", - "properties": { - "slot": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "slot" - ] - }, - "SpComponentInfo": { - "description": "Overview of a single SP component.", - "type": "object", - "properties": { - "capabilities": { - "description": "`capabilities` is a bitmask; interpret it via [`gateway_messages::DeviceCapabilities`].", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "component": { - "description": "The unique identifier for this component.", - "type": "string" - }, - "description": { - "description": "A human-readable description of the component.", - "type": "string" - }, - "device": { - "description": "The name of the physical device.", - "type": "string" - }, - "presence": { - "description": "Whether or not the component is present, to the best of the SP's ability to judge.", - "allOf": [ - { - "$ref": "#/components/schemas/SpComponentPresence" - } - ] - }, - "serial_number": { - "nullable": true, - "description": "The component's serial number, if it has one.", - "type": "string" - } - }, - "required": [ - "capabilities", - "component", - "description", - "device", - "presence" - ] - }, - "SpComponentList": { - "description": "List of components from a single SP.", - "type": "object", - "properties": { - "components": { - "type": "array", - "items": { - "$ref": "#/components/schemas/SpComponentInfo" - } - } - }, - "required": [ - "components" - ] - }, - "SpComponentPresence": { - "description": "Description of the presence or absence of a component.\n\nThe presence of some components may vary based on the power state of the sled (e.g., components that time out or appear unavailable if the sled is in A2 may become present when the sled moves to A0).", - "oneOf": [ - { - "description": "The component is present.", - "type": "string", - "enum": [ - "present" - ] - }, - { - "description": "The component is not present.", - "type": "string", - "enum": [ - "not_present" - ] - }, - { - "description": "The component is present but in a failed or faulty state.", - "type": "string", - "enum": [ - "failed" - ] - }, - { - "description": "The SP is unable to determine the presence of the component.", - "type": "string", - "enum": [ - "unavailable" - ] - }, - { - "description": "The SP's attempt to determine the presence of the component timed out.", - "type": "string", - "enum": [ - "timeout" - ] - }, - { - "description": "The SP's attempt to determine the presence of the component failed.", - "type": "string", - "enum": [ - "error" - ] - } - ] - }, - "SpComponentResetError": { - "description": "The error type returned by the `sp_component_reset()` MGS endpoint.", - "oneOf": [ - { - "description": "MGS refuses to reset its own sled's SP.", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "reset_sp_of_local_sled" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Other dropshot errors.", - "type": "object", - "properties": { - "error_code": { - "nullable": true, - "type": "string" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "other" - ] - } - }, - "required": [ - "message", - "state" - ] - } - ] - }, - "SpIdentifier": { - "type": "object", - "properties": { - "slot": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "type": { - "$ref": "#/components/schemas/SpType" - } - }, - "required": [ - "slot", - "type" - ] - }, - "SpIgnition": { - "description": "State of an ignition target.", - "oneOf": [ - { - "type": "object", - "properties": { - "present": { - "type": "string", - "enum": [ - "no" - ] - } - }, - "required": [ - "present" - ] - }, - { - "type": "object", - "properties": { - "ctrl_detect_0": { - "type": "boolean" - }, - "ctrl_detect_1": { - "type": "boolean" - }, - "flt_a2": { - "description": "Fault from the A2 power domain", - "type": "boolean" - }, - "flt_a3": { - "description": "Fault from the A3 power domain", - "type": "boolean" - }, - "flt_rot": { - "description": "Fault from the RoT", - "type": "boolean" - }, - "flt_sp": { - "description": "Fault from the SP", - "type": "boolean" - }, - "id": { - "$ref": "#/components/schemas/SpIgnitionSystemType" - }, - "power": { - "type": "boolean" - }, - "present": { - "type": "string", - "enum": [ - "yes" - ] - } - }, - "required": [ - "ctrl_detect_0", - "ctrl_detect_1", - "flt_a2", - "flt_a3", - "flt_rot", - "flt_sp", - "id", - "power", - "present" - ] - } - ] - }, - "SpIgnitionInfo": { - "type": "object", - "properties": { - "details": { - "$ref": "#/components/schemas/SpIgnition" - }, - "id": { - "$ref": "#/components/schemas/SpIdentifier" - } - }, - "required": [ - "details", - "id" - ] - }, - "SpIgnitionSystemType": { - "oneOf": [ - { - "type": "object", - "properties": { - "system_type": { - "type": "string", - "enum": [ - "gimlet" - ] - } - }, - "required": [ - "system_type" - ] - }, - { - "type": "object", - "properties": { - "system_type": { - "type": "string", - "enum": [ - "sidecar" - ] - } - }, - "required": [ - "system_type" - ] - }, - { - "type": "object", - "properties": { - "system_type": { - "type": "string", - "enum": [ - "psc" - ] - } - }, - "required": [ - "system_type" - ] - }, - { - "type": "object", - "properties": { - "id": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "system_type": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "id", - "system_type" - ] - }, - { - "type": "object", - "properties": { - "system_type": { - "type": "string", - "enum": [ - "cosmo" - ] - } - }, - "required": [ - "system_type" - ] - } - ] - }, - "SpSensorReading": { - "description": "Result of reading an SP sensor.", - "type": "object", - "properties": { - "result": { - "description": "Value (or error) from the sensor.", - "allOf": [ - { - "$ref": "#/components/schemas/SpSensorReadingResult" - } - ] - }, - "timestamp": { - "description": "SP-centric timestamp of when `result` was recorded from this sensor.\n\nCurrently this value represents \"milliseconds since the last SP boot\" and is primarily useful as a delta between sensors on this SP (assuming no reboot in between). The meaning could change with future SP releases.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "result", - "timestamp" - ] - }, - "SpSensorReadingResult": { - "description": "Single reading (or error) from an SP sensor.", - "oneOf": [ - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "success" - ] - }, - "value": { - "type": "number", - "format": "float" - } - }, - "required": [ - "kind", - "value" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "device_off" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "device_error" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "device_not_present" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "device_unavailable" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "device_timeout" - ] - } - }, - "required": [ - "kind" - ] - } - ] - }, - "SpState": { - "type": "object", - "properties": { - "base_mac_address": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 6, - "maxItems": 6 - }, - "hubris_archive_id": { - "type": "string" - }, - "model": { - "type": "string" - }, - "power_state": { - "$ref": "#/components/schemas/PowerState" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "rot": { - "$ref": "#/components/schemas/RotState" - }, - "serial_number": { - "type": "string" - } - }, - "required": [ - "base_mac_address", - "hubris_archive_id", - "model", - "power_state", - "revision", - "rot", - "serial_number" - ] - }, - "SpType": { - "type": "string", - "enum": [ - "sled", - "power", - "switch" - ] - }, - "SpUpdateStatus": { - "oneOf": [ - { - "description": "The SP has no update status.", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "none" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "The SP is preparing to receive an update.\n\nMay or may not include progress, depending on the capabilities of the component being updated.", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "progress": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/UpdatePreparationProgress" - } - ] - }, - "state": { - "type": "string", - "enum": [ - "preparing" - ] - } - }, - "required": [ - "id", - "state" - ] - }, - { - "description": "The SP is currently receiving an update.", - "type": "object", - "properties": { - "bytes_received": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "id": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "in_progress" - ] - }, - "total_bytes": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "bytes_received", - "id", - "state", - "total_bytes" - ] - }, - { - "description": "The SP has completed receiving an update.", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "complete" - ] - } - }, - "required": [ - "id", - "state" - ] - }, - { - "description": "The SP has aborted an in-progress update.", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "aborted" - ] - } - }, - "required": [ - "id", - "state" - ] - }, - { - "description": "The update process failed.", - "type": "object", - "properties": { - "code": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "id": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "failed" - ] - } - }, - "required": [ - "code", - "id", - "state" - ] - }, - { - "description": "The update process failed with an RoT-specific error.", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "message": { - "type": "string" - }, - "state": { - "type": "string", - "enum": [ - "rot_error" - ] - } - }, - "required": [ - "id", - "message", - "state" - ] - } - ] - }, - "Speed": { - "oneOf": [ - { - "type": "object", - "properties": { - "speed": { - "type": "string", - "enum": [ - "speed100_m" - ] - } - }, - "required": [ - "speed" - ] - }, - { - "type": "object", - "properties": { - "speed": { - "type": "string", - "enum": [ - "speed1_g" - ] - } - }, - "required": [ - "speed" - ] - }, - { - "type": "object", - "properties": { - "speed": { - "type": "string", - "enum": [ - "speed10_g" - ] - } - }, - "required": [ - "speed" - ] - } - ] - }, - "TaskDump": { - "type": "object", - "properties": { - "archive_id": { - "description": "Hex-encoded Hubris archive ID.", - "type": "string" - }, - "base64_zip": { - "description": "Base64-encoded zip file containing dehydrated task dump.", - "type": "string" - }, - "bord": { - "description": "`BORD` field from the caboose.", - "type": "string" - }, - "gitc": { - "description": "`GITC` field from the caboose.", - "type": "string" - }, - "task_index": { - "description": "Index of the crashed task.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "timestamp": { - "description": "Hubris timestamp at which the task crash occurred.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "vers": { - "nullable": true, - "description": "`VERS` field from the caboose, if present.", - "type": "string" - } - }, - "required": [ - "archive_id", - "base64_zip", - "bord", - "gitc", - "task_index", - "timestamp" - ] - }, - "TypedUuidForEreporterRestartKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForMupdateKind": { - "type": "string", - "format": "uuid" - }, - "UpdateAbortBody": { - "type": "object", - "properties": { - "id": { - "description": "The ID of the update to abort.\n\nIf the SP is currently receiving an update with this ID, it will be aborted.\n\nIf the SP is currently receiving an update with a different ID, the abort request will fail.\n\nIf the SP is not currently receiving any update, the request to abort should succeed but will not have actually done anything.", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "id" - ] - }, - "UpdatePreparationProgress": { - "description": "Progress of an SP preparing to update.\n\nThe units of `current` and `total` are unspecified and defined by the SP; e.g., if preparing for an update requires erasing a flash device, this may indicate progress of that erasure without defining units (bytes, pages, sectors, etc.).", - "type": "object", - "properties": { - "current": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "total": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "current", - "total" - ] - }, - "IgnitionCommand": { - "description": "Ignition command.", - "type": "string", - "enum": [ - "power_on", - "power_off", - "power_reset" - ] - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - }, - "SpComponentResetError": { - "description": "SpComponentResetError", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SpComponentResetError" - } - } - } - } - } - } -} diff --git a/openapi/gateway/gateway-2.0.0-a1962e.json.gitref b/openapi/gateway/gateway-2.0.0-a1962e.json.gitref new file mode 100644 index 00000000000..423df9b3428 --- /dev/null +++ b/openapi/gateway/gateway-2.0.0-a1962e.json.gitref @@ -0,0 +1 @@ +c6628ce469563c6006728dc6f74809f4d4ecbd09:openapi/gateway/gateway-2.0.0-a1962e.json \ No newline at end of file diff --git a/openapi/nexus/nexus-2025112000.0.0-53f3c8.json b/openapi/nexus/nexus-2025112000.0.0-53f3c8.json deleted file mode 100644 index 22a5372bbf8..00000000000 --- a/openapi/nexus/nexus-2025112000.0.0-53f3c8.json +++ /dev/null @@ -1,29190 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Region API", - "description": "API for interacting with the Oxide control plane", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "2025112000.0.0" - }, - "paths": { - "/device/auth": { - "post": { - "tags": [ - "console-auth" - ], - "summary": "Start an OAuth 2.0 Device Authorization Grant", - "description": "This endpoint is designed to be accessed from an *unauthenticated* API client. It generates and records a `device_code` and `user_code` which must be verified and confirmed prior to a token being granted.", - "operationId": "device_auth_request", - "requestBody": { - "content": { - "application/x-www-form-urlencoded": { - "schema": { - "$ref": "#/components/schemas/DeviceAuthRequest" - } - } - }, - "required": true - }, - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/device/confirm": { - "post": { - "tags": [ - "console-auth" - ], - "summary": "Confirm an OAuth 2.0 Device Authorization Grant", - "description": "This endpoint is designed to be accessed by the user agent (browser), not the client requesting the token. So we do not actually return the token here; it will be returned in response to the poll on `/device/token`.\n\nSome special logic applies when authenticating this request with an existing device token instead of a console session: the requested TTL must not produce an expiration time later than the authenticating token's expiration. If no TTL was specified in the initial grant request, the expiration will be the lesser of the silo max and the authenticating token's expiration time. To get the longest allowed lifetime, omit the TTL and authenticate with a web console session.", - "operationId": "device_auth_confirm", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeviceAuthVerify" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/device/token": { - "post": { - "tags": [ - "console-auth" - ], - "summary": "Request a device access token", - "description": "This endpoint should be polled by the client until the user code is verified and the grant is confirmed.", - "operationId": "device_access_token", - "requestBody": { - "content": { - "application/x-www-form-urlencoded": { - "schema": { - "$ref": "#/components/schemas/DeviceAccessTokenRequest" - } - } - }, - "required": true - }, - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/experimental/v1/probes": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List instrumentation probes", - "operationId": "probe_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProbeInfoResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "experimental" - ], - "summary": "Create instrumentation probe", - "operationId": "probe_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProbeCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Probe" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/experimental/v1/probes/{probe}": { - "get": { - "tags": [ - "experimental" - ], - "summary": "View instrumentation probe", - "operationId": "probe_view", - "parameters": [ - { - "in": "path", - "name": "probe", - "description": "Name or ID of the probe", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProbeInfo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "experimental" - ], - "summary": "Delete instrumentation probe", - "operationId": "probe_delete", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "probe", - "description": "Name or ID of the probe", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/experimental/v1/system/support-bundles": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List all support bundles", - "operationId": "support_bundle_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/TimeAndIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleInfoResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "experimental" - ], - "summary": "Create a new support bundle", - "operationId": "support_bundle_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleInfo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/experimental/v1/system/support-bundles/{bundle_id}": { - "get": { - "tags": [ - "experimental" - ], - "summary": "View a support bundle", - "operationId": "support_bundle_view", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleInfo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "experimental" - ], - "summary": "Update a support bundle", - "operationId": "support_bundle_update", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleInfo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "experimental" - ], - "summary": "Delete an existing support bundle", - "description": "May also be used to cancel a support bundle which is currently being collected, or to remove metadata for a support bundle that has failed.", - "operationId": "support_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/experimental/v1/system/support-bundles/{bundle_id}/download": { - "get": { - "tags": [ - "experimental" - ], - "summary": "Download the contents of a support bundle", - "operationId": "support_bundle_download", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "tags": [ - "experimental" - ], - "summary": "Download the metadata of a support bundle", - "operationId": "support_bundle_head", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/experimental/v1/system/support-bundles/{bundle_id}/download/{file}": { - "get": { - "tags": [ - "experimental" - ], - "summary": "Download a file within a support bundle", - "operationId": "support_bundle_download_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The file within the bundle to download", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "tags": [ - "experimental" - ], - "summary": "Download the metadata of a file within the support bundle", - "operationId": "support_bundle_head_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The file within the bundle to download", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/experimental/v1/system/support-bundles/{bundle_id}/index": { - "get": { - "tags": [ - "experimental" - ], - "summary": "Download the index of a support bundle", - "operationId": "support_bundle_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/login/{silo_name}/saml/{provider_name}": { - "post": { - "tags": [ - "login" - ], - "summary": "Authenticate a user via SAML", - "operationId": "login_saml", - "parameters": [ - { - "in": "path", - "name": "provider_name", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "path", - "name": "silo_name", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "303": { - "description": "redirect (see other)", - "headers": { - "location": { - "description": "HTTP \"Location\" header", - "style": "simple", - "required": true, - "schema": { - "type": "string" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/affinity-groups": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List affinity groups", - "operationId": "affinity_group_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroupResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "experimental" - ], - "summary": "Create affinity group", - "operationId": "affinity_group_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroupCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/affinity-groups/{affinity_group}": { - "get": { - "tags": [ - "experimental" - ], - "summary": "Fetch affinity group", - "operationId": "affinity_group_view", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "affinity_group", - "description": "Name or ID of the affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "experimental" - ], - "summary": "Update affinity group", - "operationId": "affinity_group_update", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "affinity_group", - "description": "Name or ID of the affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroupUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "experimental" - ], - "summary": "Delete affinity group", - "operationId": "affinity_group_delete", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "affinity_group", - "description": "Name or ID of the affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/affinity-groups/{affinity_group}/members": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List affinity group members", - "operationId": "affinity_group_member_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "path", - "name": "affinity_group", - "description": "Name or ID of the affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroupMemberResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/affinity-groups/{affinity_group}/members/instance/{instance}": { - "get": { - "tags": [ - "experimental" - ], - "summary": "Fetch affinity group member", - "operationId": "affinity_group_member_instance_view", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "affinity_group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroupMember" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "tags": [ - "experimental" - ], - "summary": "Add member to affinity group", - "operationId": "affinity_group_member_instance_add", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "affinity_group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroupMember" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "experimental" - ], - "summary": "Remove member from affinity group", - "operationId": "affinity_group_member_instance_delete", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "affinity_group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/alert-classes": { - "get": { - "tags": [ - "system/alerts" - ], - "summary": "List alert classes", - "operationId": "alert_class_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "filter", - "description": "An optional glob pattern for filtering alert class names.\n\nIf provided, only alert classes which match this glob pattern will be included in the response.", - "schema": { - "$ref": "#/components/schemas/AlertSubscription" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertClassResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/alert-receivers": { - "get": { - "tags": [ - "system/alerts" - ], - "summary": "List alert receivers", - "operationId": "alert_receiver_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertReceiverResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/alert-receivers/{receiver}": { - "get": { - "tags": [ - "system/alerts" - ], - "summary": "Fetch alert receiver", - "operationId": "alert_receiver_view", - "parameters": [ - { - "in": "path", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertReceiver" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/alerts" - ], - "summary": "Delete alert receiver", - "operationId": "alert_receiver_delete", - "parameters": [ - { - "in": "path", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/alert-receivers/{receiver}/deliveries": { - "get": { - "tags": [ - "system/alerts" - ], - "summary": "List delivery attempts to alert receiver", - "description": "Optional query parameters to this endpoint may be used to filter deliveries by state. If none of the `failed`, `pending` or `delivered` query parameters are present, all deliveries are returned. If one or more of these parameters are provided, only those which are set to \"true\" are included in the response.", - "operationId": "alert_delivery_list", - "parameters": [ - { - "in": "path", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "delivered", - "description": "If true, include deliveries which have succeeded.\n\nIf any of the \"pending\", \"failed\", or \"delivered\" query parameters are set to true, only deliveries matching those state(s) will be included in the response. If NO state filter parameters are set, then all deliveries are included.", - "schema": { - "nullable": true, - "type": "boolean" - } - }, - { - "in": "query", - "name": "failed", - "description": "If true, include deliveries which have failed permanently.\n\nIf any of the \"pending\", \"failed\", or \"delivered\" query parameters are set to true, only deliveries matching those state(s) will be included in the response. If NO state filter parameters are set, then all deliveries are included.\n\nA delivery fails permanently when the retry limit of three total attempts is reached without a successful delivery.", - "schema": { - "nullable": true, - "type": "boolean" - } - }, - { - "in": "query", - "name": "pending", - "description": "If true, include deliveries which are currently in progress.\n\nIf any of the \"pending\", \"failed\", or \"delivered\" query parameters are set to true, only deliveries matching those state(s) will be included in the response. If NO state filter parameters are set, then all deliveries are included.\n\nA delivery is considered \"pending\" if it has not yet been sent at all, or if a delivery attempt has failed but the delivery has retries remaining.", - "schema": { - "nullable": true, - "type": "boolean" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/TimeAndIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertDeliveryResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/alert-receivers/{receiver}/probe": { - "post": { - "tags": [ - "system/alerts" - ], - "summary": "Send liveness probe to alert receiver", - "description": "This endpoint synchronously sends a liveness probe to the selected alert receiver. The response message describes the outcome of the probe: either the successful response (as appropriate), or indication of why the probe failed.\n\nThe result of the probe is represented as an `AlertDelivery` model. Details relating to the status of the probe depend on the alert delivery mechanism, and are included in the `AlertDeliveryAttempts` model. For example, webhook receiver liveness probes include the HTTP status code returned by the receiver endpoint.\n\nNote that the response status is `200 OK` as long as a probe request was able to be sent to the receiver endpoint. If an HTTP-based receiver, such as a webhook, responds to the another status code, including an error, this will be indicated by the response body, *not* the status of the response.\n\nThe `resend` query parameter can be used to request re-delivery of failed events if the liveness probe succeeds. If it is set to true and the liveness probe succeeds, any alerts for which delivery to this receiver has failed will be queued for re-delivery.", - "operationId": "alert_receiver_probe", - "parameters": [ - { - "in": "path", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "resend", - "description": "If true, resend all events that have not been delivered successfully if the probe request succeeds.", - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertProbeResult" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/alert-receivers/{receiver}/subscriptions": { - "post": { - "tags": [ - "system/alerts" - ], - "summary": "Add alert receiver subscription", - "operationId": "alert_receiver_subscription_add", - "parameters": [ - { - "in": "path", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertSubscriptionCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertSubscriptionCreated" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/alert-receivers/{receiver}/subscriptions/{subscription}": { - "delete": { - "tags": [ - "system/alerts" - ], - "summary": "Remove alert receiver subscription", - "operationId": "alert_receiver_subscription_remove", - "parameters": [ - { - "in": "path", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "subscription", - "description": "The event class subscription itself.", - "required": true, - "schema": { - "$ref": "#/components/schemas/AlertSubscription" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/alerts/{alert_id}/resend": { - "post": { - "tags": [ - "system/alerts" - ], - "summary": "Request re-delivery of alert", - "operationId": "alert_delivery_resend", - "parameters": [ - { - "in": "path", - "name": "alert_id", - "description": "UUID of the alert", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertDeliveryId" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/anti-affinity-groups": { - "get": { - "tags": [ - "affinity" - ], - "summary": "List anti-affinity groups", - "operationId": "anti_affinity_group_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroupResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "affinity" - ], - "summary": "Create anti-affinity group", - "operationId": "anti_affinity_group_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroupCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/anti-affinity-groups/{anti_affinity_group}": { - "get": { - "tags": [ - "affinity" - ], - "summary": "Fetch anti-affinity group", - "operationId": "anti_affinity_group_view", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "anti_affinity_group", - "description": "Name or ID of the anti affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "affinity" - ], - "summary": "Update anti-affinity group", - "operationId": "anti_affinity_group_update", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "anti_affinity_group", - "description": "Name or ID of the anti affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroupUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "affinity" - ], - "summary": "Delete anti-affinity group", - "operationId": "anti_affinity_group_delete", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "anti_affinity_group", - "description": "Name or ID of the anti affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/anti-affinity-groups/{anti_affinity_group}/members": { - "get": { - "tags": [ - "affinity" - ], - "summary": "List anti-affinity group members", - "operationId": "anti_affinity_group_member_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "path", - "name": "anti_affinity_group", - "description": "Name or ID of the anti affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroupMemberResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/anti-affinity-groups/{anti_affinity_group}/members/instance/{instance}": { - "get": { - "tags": [ - "affinity" - ], - "summary": "Fetch anti-affinity group member", - "operationId": "anti_affinity_group_member_instance_view", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "anti_affinity_group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroupMember" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "tags": [ - "affinity" - ], - "summary": "Add member to anti-affinity group", - "operationId": "anti_affinity_group_member_instance_add", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "anti_affinity_group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroupMember" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "affinity" - ], - "summary": "Remove member from anti-affinity group", - "operationId": "anti_affinity_group_member_instance_delete", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "anti_affinity_group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/auth-settings": { - "get": { - "tags": [ - "silos" - ], - "summary": "Fetch current silo's auth settings", - "operationId": "auth_settings_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloAuthSettings" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "silos" - ], - "summary": "Update current silo's auth settings", - "operationId": "auth_settings_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloAuthSettingsUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloAuthSettings" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/certificates": { - "get": { - "tags": [ - "silos" - ], - "summary": "List certificates for external endpoints", - "description": "Returns a list of TLS certificates used for the external API (for the current Silo). These are sorted by creation date, with the most recent certificates appearing first.", - "operationId": "certificate_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CertificateResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "silos" - ], - "summary": "Create new system-wide x.509 certificate", - "description": "This certificate is automatically used by the Oxide Control plane to serve external connections.", - "operationId": "certificate_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CertificateCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Certificate" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/certificates/{certificate}": { - "get": { - "tags": [ - "silos" - ], - "summary": "Fetch certificate", - "description": "Returns the details of a specific certificate", - "operationId": "certificate_view", - "parameters": [ - { - "in": "path", - "name": "certificate", - "description": "Name or ID of the certificate", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Certificate" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "silos" - ], - "summary": "Delete certificate", - "description": "Permanently delete a certificate. This operation cannot be undone.", - "operationId": "certificate_delete", - "parameters": [ - { - "in": "path", - "name": "certificate", - "description": "Name or ID of the certificate", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/disks": { - "get": { - "tags": [ - "disks" - ], - "summary": "List disks", - "operationId": "disk_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "disks" - ], - "summary": "Create a disk", - "operationId": "disk_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Disk" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/disks/{disk}": { - "get": { - "tags": [ - "disks" - ], - "summary": "Fetch disk", - "operationId": "disk_view", - "parameters": [ - { - "in": "path", - "name": "disk", - "description": "Name or ID of the disk", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Disk" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "disks" - ], - "summary": "Delete disk", - "operationId": "disk_delete", - "parameters": [ - { - "in": "path", - "name": "disk", - "description": "Name or ID of the disk", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/disks/{disk}/bulk-write": { - "post": { - "tags": [ - "disks" - ], - "summary": "Import blocks into disk", - "operationId": "disk_bulk_write_import", - "parameters": [ - { - "in": "path", - "name": "disk", - "description": "Name or ID of the disk", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ImportBlocksBulkWrite" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/disks/{disk}/bulk-write-start": { - "post": { - "tags": [ - "disks" - ], - "summary": "Start importing blocks into disk", - "description": "Start the process of importing blocks into a disk", - "operationId": "disk_bulk_write_import_start", - "parameters": [ - { - "in": "path", - "name": "disk", - "description": "Name or ID of the disk", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/disks/{disk}/bulk-write-stop": { - "post": { - "tags": [ - "disks" - ], - "summary": "Stop importing blocks into disk", - "description": "Stop the process of importing blocks into a disk", - "operationId": "disk_bulk_write_import_stop", - "parameters": [ - { - "in": "path", - "name": "disk", - "description": "Name or ID of the disk", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/disks/{disk}/finalize": { - "post": { - "tags": [ - "disks" - ], - "summary": "Confirm disk block import completion", - "operationId": "disk_finalize_import", - "parameters": [ - { - "in": "path", - "name": "disk", - "description": "Name or ID of the disk", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FinalizeDisk" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/floating-ips": { - "get": { - "tags": [ - "floating-ips" - ], - "summary": "List floating IPs", - "operationId": "floating_ip_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIpResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "floating-ips" - ], - "summary": "Create floating IP", - "operationId": "floating_ip_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIpCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIp" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/floating-ips/{floating_ip}": { - "get": { - "tags": [ - "floating-ips" - ], - "summary": "Fetch floating IP", - "operationId": "floating_ip_view", - "parameters": [ - { - "in": "path", - "name": "floating_ip", - "description": "Name or ID of the floating IP", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIp" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "floating-ips" - ], - "summary": "Update floating IP", - "operationId": "floating_ip_update", - "parameters": [ - { - "in": "path", - "name": "floating_ip", - "description": "Name or ID of the floating IP", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIpUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIp" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "floating-ips" - ], - "summary": "Delete floating IP", - "operationId": "floating_ip_delete", - "parameters": [ - { - "in": "path", - "name": "floating_ip", - "description": "Name or ID of the floating IP", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/floating-ips/{floating_ip}/attach": { - "post": { - "tags": [ - "floating-ips" - ], - "summary": "Attach floating IP", - "description": "Attach floating IP to an instance or other resource.", - "operationId": "floating_ip_attach", - "parameters": [ - { - "in": "path", - "name": "floating_ip", - "description": "Name or ID of the floating IP", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIpAttach" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIp" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/floating-ips/{floating_ip}/detach": { - "post": { - "tags": [ - "floating-ips" - ], - "summary": "Detach floating IP", - "operationId": "floating_ip_detach", - "parameters": [ - { - "in": "path", - "name": "floating_ip", - "description": "Name or ID of the floating IP", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIp" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/groups": { - "get": { - "tags": [ - "silos" - ], - "summary": "List groups", - "operationId": "group_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GroupResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/groups/{group_id}": { - "get": { - "tags": [ - "silos" - ], - "summary": "Fetch group", - "operationId": "group_view", - "parameters": [ - { - "in": "path", - "name": "group_id", - "description": "ID of the group", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Group" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/images": { - "get": { - "tags": [ - "images" - ], - "summary": "List images", - "description": "List images which are global or scoped to the specified project. The images are returned sorted by creation date, with the most recent images appearing first.", - "operationId": "image_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ImageResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "images" - ], - "summary": "Create image", - "description": "Create a new image in a project.", - "operationId": "image_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ImageCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Image" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/images/{image}": { - "get": { - "tags": [ - "images" - ], - "summary": "Fetch image", - "description": "Fetch the details for a specific image in a project.", - "operationId": "image_view", - "parameters": [ - { - "in": "path", - "name": "image", - "description": "Name or ID of the image", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Image" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "images" - ], - "summary": "Delete image", - "description": "Permanently delete an image from a project. This operation cannot be undone. Any instances in the project using the image will continue to run, however new instances can not be created with this image.", - "operationId": "image_delete", - "parameters": [ - { - "in": "path", - "name": "image", - "description": "Name or ID of the image", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/images/{image}/demote": { - "post": { - "tags": [ - "images" - ], - "summary": "Demote silo image", - "description": "Demote silo image to be visible only to a specified project", - "operationId": "image_demote", - "parameters": [ - { - "in": "path", - "name": "image", - "description": "Name or ID of the image", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Image" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/images/{image}/promote": { - "post": { - "tags": [ - "images" - ], - "summary": "Promote project image", - "description": "Promote project image to be visible to all projects in the silo", - "operationId": "image_promote", - "parameters": [ - { - "in": "path", - "name": "image", - "description": "Name or ID of the image", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Image" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances": { - "get": { - "tags": [ - "instances" - ], - "summary": "List instances", - "operationId": "instance_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "instances" - ], - "summary": "Create instance", - "operationId": "instance_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Instance" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}": { - "get": { - "tags": [ - "instances" - ], - "summary": "Fetch instance", - "operationId": "instance_view", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Instance" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "instances" - ], - "summary": "Update instance", - "operationId": "instance_update", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Instance" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "instances" - ], - "summary": "Delete instance", - "operationId": "instance_delete", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/affinity-groups": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List affinity groups containing instance", - "operationId": "instance_affinity_group_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroupResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/instances/{instance}/anti-affinity-groups": { - "get": { - "tags": [ - "instances" - ], - "summary": "List anti-affinity groups containing instance", - "operationId": "instance_anti_affinity_group_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroupResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/instances/{instance}/disks": { - "get": { - "tags": [ - "instances" - ], - "summary": "List disks for instance", - "operationId": "instance_disk_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/instances/{instance}/disks/attach": { - "post": { - "tags": [ - "instances" - ], - "summary": "Attach disk to instance", - "operationId": "instance_disk_attach", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskPath" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Disk" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/disks/detach": { - "post": { - "tags": [ - "instances" - ], - "summary": "Detach disk from instance", - "operationId": "instance_disk_detach", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskPath" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Disk" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/external-ips": { - "get": { - "tags": [ - "instances" - ], - "summary": "List external IP addresses", - "operationId": "instance_external_ip_list", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIpResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/external-ips/ephemeral": { - "post": { - "tags": [ - "instances" - ], - "summary": "Allocate and attach ephemeral IP to instance", - "operationId": "instance_ephemeral_ip_attach", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EphemeralIpCreate" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIp" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "instances" - ], - "summary": "Detach and deallocate ephemeral IP from instance", - "operationId": "instance_ephemeral_ip_detach", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/multicast-groups": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List multicast groups for instance", - "operationId": "instance_multicast_group_list", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupMemberResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/multicast-groups/{multicast_group}": { - "put": { - "tags": [ - "experimental" - ], - "summary": "Join multicast group.", - "description": "This is functionally equivalent to adding the instance via the group's member management endpoint or updating the instance's `multicast_groups` field. All approaches modify the same membership and trigger reconciliation.", - "operationId": "instance_multicast_group_join", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupMember" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "experimental" - ], - "summary": "Leave multicast group.", - "description": "This is functionally equivalent to removing the instance via the group's member management endpoint or updating the instance's `multicast_groups` field. All approaches modify the same membership and trigger reconciliation.", - "operationId": "instance_multicast_group_leave", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/reboot": { - "post": { - "tags": [ - "instances" - ], - "summary": "Reboot an instance", - "operationId": "instance_reboot", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Instance" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/serial-console": { - "get": { - "tags": [ - "instances" - ], - "summary": "Fetch instance serial console", - "operationId": "instance_serial_console", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "from_start", - "description": "Character index in the serial buffer from which to read, counting the bytes output since instance start. If this is not provided, `most_recent` must be provided, and if this *is* provided, `most_recent` must *not* be provided.", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - { - "in": "query", - "name": "max_bytes", - "description": "Maximum number of bytes of buffered serial console contents to return. If the requested range runs to the end of the available buffer, the data returned will be shorter than `max_bytes`.", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - { - "in": "query", - "name": "most_recent", - "description": "Character index in the serial buffer from which to read, counting *backward* from the most recently buffered data retrieved from the instance. (See note on `from_start` about mutual exclusivity)", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `instance` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceSerialConsoleData" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/serial-console/stream": { - "get": { - "tags": [ - "instances" - ], - "summary": "Stream instance serial console", - "operationId": "instance_serial_console_stream", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "most_recent", - "description": "Character index in the serial buffer from which to read, counting *backward* from the most recently buffered data retrieved from the instance.", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `instance` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - }, - "x-dropshot-websocket": {} - } - }, - "/v1/instances/{instance}/ssh-public-keys": { - "get": { - "tags": [ - "instances" - ], - "summary": "List SSH public keys for instance", - "description": "List SSH public keys injected via cloud-init during instance creation. Note that this list is a snapshot in time and will not reflect updates made after the instance is created.", - "operationId": "instance_ssh_public_key_list", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SshKeyResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/instances/{instance}/start": { - "post": { - "tags": [ - "instances" - ], - "summary": "Boot instance", - "operationId": "instance_start", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Instance" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/stop": { - "post": { - "tags": [ - "instances" - ], - "summary": "Stop instance", - "operationId": "instance_stop", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Instance" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/internet-gateway-ip-addresses": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List IP addresses attached to internet gateway", - "operationId": "internet_gateway_ip_address_list", - "parameters": [ - { - "in": "query", - "name": "gateway", - "description": "Name or ID of the internet gateway", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `gateway` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayIpAddressResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "gateway" - ] - } - }, - "post": { - "tags": [ - "vpcs" - ], - "summary": "Attach IP address to internet gateway", - "operationId": "internet_gateway_ip_address_create", - "parameters": [ - { - "in": "query", - "name": "gateway", - "description": "Name or ID of the internet gateway", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `gateway` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayIpAddressCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayIpAddress" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/internet-gateway-ip-addresses/{address}": { - "delete": { - "tags": [ - "vpcs" - ], - "summary": "Detach IP address from internet gateway", - "operationId": "internet_gateway_ip_address_delete", - "parameters": [ - { - "in": "path", - "name": "address", - "description": "Name or ID of the IP address", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "cascade", - "description": "Also delete routes targeting this gateway element.", - "schema": { - "type": "boolean" - } - }, - { - "in": "query", - "name": "gateway", - "description": "Name or ID of the internet gateway", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `gateway` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/internet-gateway-ip-pools": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List IP pools attached to internet gateway", - "operationId": "internet_gateway_ip_pool_list", - "parameters": [ - { - "in": "query", - "name": "gateway", - "description": "Name or ID of the internet gateway", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `gateway` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayIpPoolResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "gateway" - ] - } - }, - "post": { - "tags": [ - "vpcs" - ], - "summary": "Attach IP pool to internet gateway", - "operationId": "internet_gateway_ip_pool_create", - "parameters": [ - { - "in": "query", - "name": "gateway", - "description": "Name or ID of the internet gateway", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `gateway` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayIpPoolCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayIpPool" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/internet-gateway-ip-pools/{pool}": { - "delete": { - "tags": [ - "vpcs" - ], - "summary": "Detach IP pool from internet gateway", - "operationId": "internet_gateway_ip_pool_delete", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "cascade", - "description": "Also delete routes targeting this gateway element.", - "schema": { - "type": "boolean" - } - }, - { - "in": "query", - "name": "gateway", - "description": "Name or ID of the internet gateway", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `gateway` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/internet-gateways": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List internet gateways", - "operationId": "internet_gateway_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "vpc" - ] - } - }, - "post": { - "tags": [ - "vpcs" - ], - "summary": "Create VPC internet gateway", - "operationId": "internet_gateway_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGateway" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/internet-gateways/{gateway}": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "Fetch internet gateway", - "operationId": "internet_gateway_view", - "parameters": [ - { - "in": "path", - "name": "gateway", - "description": "Name or ID of the gateway", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGateway" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "vpcs" - ], - "summary": "Delete internet gateway", - "operationId": "internet_gateway_delete", - "parameters": [ - { - "in": "path", - "name": "gateway", - "description": "Name or ID of the gateway", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "cascade", - "description": "Also delete routes targeting this gateway.", - "schema": { - "type": "boolean" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/ip-pools": { - "get": { - "tags": [ - "projects" - ], - "summary": "List IP pools", - "operationId": "project_ip_pool_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloIpPoolResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/ip-pools/{pool}": { - "get": { - "tags": [ - "projects" - ], - "summary": "Fetch IP pool", - "operationId": "project_ip_pool_view", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloIpPool" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/login/{silo_name}/local": { - "post": { - "tags": [ - "login" - ], - "summary": "Authenticate a user via username and password", - "operationId": "login_local", - "parameters": [ - { - "in": "path", - "name": "silo_name", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UsernamePasswordCredentials" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/logout": { - "post": { - "tags": [ - "console-auth" - ], - "summary": "Log user out of web console by deleting session on client and server", - "operationId": "logout", - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/me": { - "get": { - "tags": [ - "current-user" - ], - "summary": "Fetch user for current session", - "operationId": "current_user_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CurrentUser" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/me/access-tokens": { - "get": { - "tags": [ - "tokens" - ], - "summary": "List access tokens", - "description": "List device access tokens for the currently authenticated user.", - "operationId": "current_user_access_token_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeviceAccessTokenResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/me/access-tokens/{token_id}": { - "delete": { - "tags": [ - "tokens" - ], - "summary": "Delete access token", - "description": "Delete a device access token for the currently authenticated user.", - "operationId": "current_user_access_token_delete", - "parameters": [ - { - "in": "path", - "name": "token_id", - "description": "ID of the token", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/me/groups": { - "get": { - "tags": [ - "current-user" - ], - "summary": "Fetch current user's groups", - "operationId": "current_user_groups", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GroupResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/me/ssh-keys": { - "get": { - "tags": [ - "current-user" - ], - "summary": "List SSH public keys", - "description": "Lists SSH public keys for the currently authenticated user.", - "operationId": "current_user_ssh_key_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SshKeyResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "current-user" - ], - "summary": "Create SSH public key", - "description": "Create an SSH public key for the currently authenticated user.", - "operationId": "current_user_ssh_key_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SshKeyCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SshKey" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/me/ssh-keys/{ssh_key}": { - "get": { - "tags": [ - "current-user" - ], - "summary": "Fetch SSH public key", - "description": "Fetch SSH public key associated with the currently authenticated user.", - "operationId": "current_user_ssh_key_view", - "parameters": [ - { - "in": "path", - "name": "ssh_key", - "description": "Name or ID of the SSH key", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SshKey" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "current-user" - ], - "summary": "Delete SSH public key", - "description": "Delete an SSH public key associated with the currently authenticated user.", - "operationId": "current_user_ssh_key_delete", - "parameters": [ - { - "in": "path", - "name": "ssh_key", - "description": "Name or ID of the SSH key", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/metrics/{metric_name}": { - "get": { - "tags": [ - "metrics" - ], - "summary": "View metrics", - "description": "View CPU, memory, or storage utilization metrics at the silo or project level.", - "operationId": "silo_metric", - "parameters": [ - { - "in": "path", - "name": "metric_name", - "required": true, - "schema": { - "$ref": "#/components/schemas/SystemMetricName" - } - }, - { - "in": "query", - "name": "end_time", - "description": "An exclusive end time of metrics.", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "order", - "description": "Query result order", - "schema": { - "$ref": "#/components/schemas/PaginationOrder" - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "start_time", - "description": "An inclusive start time of metrics.", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MeasurementResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "end_time", - "start_time" - ] - } - } - }, - "/v1/multicast-groups": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List all multicast groups.", - "operationId": "multicast_group_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "experimental" - ], - "summary": "Create a multicast group.", - "description": "Multicast groups are fleet-scoped resources that can be joined by instances across projects and silos. A single multicast IP serves all group members regardless of project or silo boundaries.", - "operationId": "multicast_group_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/multicast-groups/{multicast_group}": { - "get": { - "tags": [ - "experimental" - ], - "summary": "Fetch a multicast group.", - "operationId": "multicast_group_view", - "parameters": [ - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "experimental" - ], - "summary": "Update a multicast group.", - "operationId": "multicast_group_update", - "parameters": [ - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "experimental" - ], - "summary": "Delete a multicast group.", - "operationId": "multicast_group_delete", - "parameters": [ - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/multicast-groups/{multicast_group}/members": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List members of a multicast group.", - "operationId": "multicast_group_member_list", - "parameters": [ - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupMemberResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "experimental" - ], - "summary": "Add instance to a multicast group.", - "description": "Functionally equivalent to updating the instance's `multicast_groups` field. Both approaches modify the same underlying membership and trigger the same reconciliation logic.\n\nSpecify instance by name (requires `?project=`) or UUID.", - "operationId": "multicast_group_member_add", - "parameters": [ - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupMemberAdd" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupMember" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/multicast-groups/{multicast_group}/members/{instance}": { - "delete": { - "tags": [ - "experimental" - ], - "summary": "Remove instance from a multicast group.", - "description": "Functionally equivalent to removing the group from the instance's `multicast_groups` field. Both approaches modify the same underlying membership and trigger reconciliation.\n\nSpecify instance by name (requires `?project=`) or UUID.", - "operationId": "multicast_group_member_remove", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/network-interfaces": { - "get": { - "tags": [ - "instances" - ], - "summary": "List network interfaces", - "operationId": "instance_network_interface_list", - "parameters": [ - { - "in": "query", - "name": "instance", - "description": "Name or ID of the instance", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `instance` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceNetworkInterfaceResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "instance" - ] - } - }, - "post": { - "tags": [ - "instances" - ], - "summary": "Create network interface", - "operationId": "instance_network_interface_create", - "parameters": [ - { - "in": "query", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `instance` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceNetworkInterfaceCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceNetworkInterface" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/network-interfaces/{interface}": { - "get": { - "tags": [ - "instances" - ], - "summary": "Fetch network interface", - "operationId": "instance_network_interface_view", - "parameters": [ - { - "in": "path", - "name": "interface", - "description": "Name or ID of the network interface", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "instance", - "description": "Name or ID of the instance", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `instance` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceNetworkInterface" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "instances" - ], - "summary": "Update network interface", - "operationId": "instance_network_interface_update", - "parameters": [ - { - "in": "path", - "name": "interface", - "description": "Name or ID of the network interface", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "instance", - "description": "Name or ID of the instance", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `instance` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceNetworkInterfaceUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceNetworkInterface" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "instances" - ], - "summary": "Delete network interface", - "description": "Note that the primary interface for an instance cannot be deleted if there are any secondary interfaces. A new primary interface must be designated first. The primary interface can be deleted if there are no secondary interfaces.", - "operationId": "instance_network_interface_delete", - "parameters": [ - { - "in": "path", - "name": "interface", - "description": "Name or ID of the network interface", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "instance", - "description": "Name or ID of the instance", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `instance` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/ping": { - "get": { - "tags": [ - "system/status" - ], - "summary": "Ping API", - "description": "Always responds with Ok if it responds at all.", - "operationId": "ping", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Ping" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/policy": { - "get": { - "tags": [ - "silos" - ], - "summary": "Fetch current silo's IAM policy", - "operationId": "policy_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "silos" - ], - "summary": "Update current silo's IAM policy", - "operationId": "policy_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/projects": { - "get": { - "tags": [ - "projects" - ], - "summary": "List projects", - "operationId": "project_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "projects" - ], - "summary": "Create project", - "operationId": "project_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/projects/{project}": { - "get": { - "tags": [ - "projects" - ], - "summary": "Fetch project", - "operationId": "project_view", - "parameters": [ - { - "in": "path", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "projects" - ], - "summary": "Update a project", - "operationId": "project_update", - "parameters": [ - { - "in": "path", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "projects" - ], - "summary": "Delete project", - "operationId": "project_delete", - "parameters": [ - { - "in": "path", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/projects/{project}/policy": { - "get": { - "tags": [ - "projects" - ], - "summary": "Fetch project's IAM policy", - "operationId": "project_policy_view", - "parameters": [ - { - "in": "path", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "projects" - ], - "summary": "Update project's IAM policy", - "operationId": "project_policy_update", - "parameters": [ - { - "in": "path", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectRolePolicy" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/snapshots": { - "get": { - "tags": [ - "snapshots" - ], - "summary": "List snapshots", - "operationId": "snapshot_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SnapshotResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "snapshots" - ], - "summary": "Create snapshot", - "description": "Creates a point-in-time snapshot from a disk.", - "operationId": "snapshot_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SnapshotCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Snapshot" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/snapshots/{snapshot}": { - "get": { - "tags": [ - "snapshots" - ], - "summary": "Fetch snapshot", - "operationId": "snapshot_view", - "parameters": [ - { - "in": "path", - "name": "snapshot", - "description": "Name or ID of the snapshot", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Snapshot" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "snapshots" - ], - "summary": "Delete snapshot", - "operationId": "snapshot_delete", - "parameters": [ - { - "in": "path", - "name": "snapshot", - "description": "Name or ID of the snapshot", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/audit-log": { - "get": { - "tags": [ - "system/audit-log" - ], - "summary": "View audit log", - "description": "A single item in the audit log represents both the beginning and end of the logged operation (represented by `time_started` and `time_completed`) so that clients do not have to find multiple entries and match them up by request ID to get the full picture of an operation. Because timestamps may not be unique, entries have also have a unique `id` that can be used to deduplicate items fetched from overlapping time intervals.\n\nAudit log entries are designed to be immutable: once you see an entry, fetching it again will never get you a different result. The list is ordered by `time_completed`, not `time_started`. If you fetch the audit log for a time range that is fully in the past, the resulting list is guaranteed to be complete, i.e., fetching the same timespan again later will always produce the same set of entries.", - "operationId": "audit_log_list", - "parameters": [ - { - "in": "query", - "name": "end_time", - "description": "Exclusive", - "schema": { - "nullable": true, - "type": "string", - "format": "date-time" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/TimeAndIdSortMode" - } - }, - { - "in": "query", - "name": "start_time", - "description": "Required, inclusive", - "schema": { - "type": "string", - "format": "date-time" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AuditLogEntryResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "start_time" - ] - } - } - }, - "/v1/system/hardware/disks": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List physical disks", - "operationId": "physical_disk_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PhysicalDiskResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/disks/{disk_id}": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "Get a physical disk", - "operationId": "physical_disk_view", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "description": "ID of the physical disk", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PhysicalDisk" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/rack-switch-port/{rack_id}/{switch_location}/{port}/lldp/neighbors": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Fetch the LLDP neighbors seen on a switch port", - "operationId": "networking_switch_port_lldp_neighbors", - "parameters": [ - { - "in": "path", - "name": "port", - "description": "A name to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "path", - "name": "rack_id", - "description": "A rack id to use when selecting switch ports.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "switch_location", - "description": "A switch location to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LldpNeighborResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/racks": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List racks", - "operationId": "rack_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RackResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/racks/{rack_id}": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "Fetch rack", - "operationId": "rack_view", - "parameters": [ - { - "in": "path", - "name": "rack_id", - "description": "ID of the rack", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Rack" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/sleds": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List sleds", - "operationId": "sled_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/hardware" - ], - "summary": "Add sled to initialized rack", - "operationId": "sled_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UninitializedSledId" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledId" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/sleds/{sled_id}": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "Fetch sled", - "operationId": "sled_view", - "parameters": [ - { - "in": "path", - "name": "sled_id", - "description": "ID of the sled", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Sled" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/sleds/{sled_id}/disks": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List physical disks attached to sleds", - "operationId": "sled_physical_disk_list", - "parameters": [ - { - "in": "path", - "name": "sled_id", - "description": "ID of the sled", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PhysicalDiskResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/sleds/{sled_id}/instances": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List instances running on given sled", - "operationId": "sled_instance_list", - "parameters": [ - { - "in": "path", - "name": "sled_id", - "description": "ID of the sled", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledInstanceResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/sleds/{sled_id}/provision-policy": { - "put": { - "tags": [ - "system/hardware" - ], - "summary": "Set sled provision policy", - "operationId": "sled_set_provision_policy", - "parameters": [ - { - "in": "path", - "name": "sled_id", - "description": "ID of the sled", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledProvisionPolicyParams" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledProvisionPolicyResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/sleds-uninitialized": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List uninitialized sleds", - "operationId": "sled_list_uninitialized", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UninitializedSledResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/switch-port": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List switch ports", - "operationId": "networking_switch_port_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - }, - { - "in": "query", - "name": "switch_port_id", - "description": "An optional switch port id to use when listing switch ports.", - "schema": { - "nullable": true, - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPortResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/switch-port/{port}/lldp/config": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Fetch the LLDP configuration for a switch port", - "operationId": "networking_switch_port_lldp_config_view", - "parameters": [ - { - "in": "path", - "name": "port", - "description": "A name to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "query", - "name": "rack_id", - "description": "A rack id to use when selecting switch ports.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "switch_location", - "description": "A switch location to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LldpLinkConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "tags": [ - "system/networking" - ], - "summary": "Update the LLDP configuration for a switch port", - "operationId": "networking_switch_port_lldp_config_update", - "parameters": [ - { - "in": "path", - "name": "port", - "description": "A name to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "query", - "name": "rack_id", - "description": "A rack id to use when selecting switch ports.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "switch_location", - "description": "A switch location to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LldpLinkConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/switch-port/{port}/settings": { - "post": { - "tags": [ - "system/hardware" - ], - "summary": "Apply switch port settings", - "operationId": "networking_switch_port_apply_settings", - "parameters": [ - { - "in": "path", - "name": "port", - "description": "A name to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "query", - "name": "rack_id", - "description": "A rack id to use when selecting switch ports.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "switch_location", - "description": "A switch location to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPortApplySettings" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/hardware" - ], - "summary": "Clear switch port settings", - "operationId": "networking_switch_port_clear_settings", - "parameters": [ - { - "in": "path", - "name": "port", - "description": "A name to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "query", - "name": "rack_id", - "description": "A rack id to use when selecting switch ports.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "switch_location", - "description": "A switch location to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/switch-port/{port}/status": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "Get switch port status", - "operationId": "networking_switch_port_status", - "parameters": [ - { - "in": "path", - "name": "port", - "description": "A name to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "query", - "name": "rack_id", - "description": "A rack id to use when selecting switch ports.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "switch_location", - "description": "A switch location to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchLinkState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/switches": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List switches", - "operationId": "switch_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/switches/{switch_id}": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "Fetch switch", - "operationId": "switch_view", - "parameters": [ - { - "in": "path", - "name": "switch_id", - "description": "ID of the switch", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Switch" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/identity-providers": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "List identity providers for silo", - "description": "List identity providers for silo by silo name or ID.", - "operationId": "silo_identity_provider_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IdentityProviderResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "silo" - ] - } - } - }, - "/v1/system/identity-providers/local/users": { - "post": { - "tags": [ - "system/silos" - ], - "summary": "Create user", - "description": "Users can only be created in Silos with `provision_type` == `Fixed`. Otherwise, Silo users are just-in-time (JIT) provisioned when a user first logs in using an external Identity Provider.", - "operationId": "local_idp_user_create", - "parameters": [ - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/identity-providers/local/users/{user_id}": { - "delete": { - "tags": [ - "system/silos" - ], - "summary": "Delete user", - "operationId": "local_idp_user_delete", - "parameters": [ - { - "in": "path", - "name": "user_id", - "description": "The user's internal ID", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/identity-providers/local/users/{user_id}/set-password": { - "post": { - "tags": [ - "system/silos" - ], - "summary": "Set or invalidate user's password", - "description": "Passwords can only be updated for users in Silos with identity mode `LocalOnly`.", - "operationId": "local_idp_user_set_password", - "parameters": [ - { - "in": "path", - "name": "user_id", - "description": "The user's internal ID", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserPassword" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/identity-providers/saml": { - "post": { - "tags": [ - "system/silos" - ], - "summary": "Create SAML identity provider", - "operationId": "saml_identity_provider_create", - "parameters": [ - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SamlIdentityProviderCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SamlIdentityProvider" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/identity-providers/saml/{provider}": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch SAML identity provider", - "operationId": "saml_identity_provider_view", - "parameters": [ - { - "in": "path", - "name": "provider", - "description": "Name or ID of the SAML identity provider", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SamlIdentityProvider" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools": { - "get": { - "tags": [ - "system/ip-pools" - ], - "summary": "List IP pools", - "operationId": "ip_pool_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/ip-pools" - ], - "summary": "Create IP pool", - "description": "IPv6 is not yet supported for unicast pools.", - "operationId": "ip_pool_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPool" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools/{pool}": { - "get": { - "tags": [ - "system/ip-pools" - ], - "summary": "Fetch IP pool", - "operationId": "ip_pool_view", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPool" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "system/ip-pools" - ], - "summary": "Update IP pool", - "operationId": "ip_pool_update", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPool" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/ip-pools" - ], - "summary": "Delete IP pool", - "operationId": "ip_pool_delete", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools/{pool}/ranges": { - "get": { - "tags": [ - "system/ip-pools" - ], - "summary": "List ranges for IP pool", - "description": "Ranges are ordered by their first address.", - "operationId": "ip_pool_range_list", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolRangeResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/ip-pools/{pool}/ranges/add": { - "post": { - "tags": [ - "system/ip-pools" - ], - "summary": "Add range to IP pool.", - "description": "IPv6 ranges are not allowed yet for unicast pools.\n\nFor multicast pools, all ranges must be either Any-Source Multicast (ASM) or Source-Specific Multicast (SSM), but not both. Mixing ASM and SSM ranges in the same pool is not allowed.\n\nASM: IPv4 addresses outside 232.0.0.0/8, IPv6 addresses with flag field != 3 SSM: IPv4 addresses in 232.0.0.0/8, IPv6 addresses with flag field = 3", - "operationId": "ip_pool_range_add", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpRange" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolRange" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools/{pool}/ranges/remove": { - "post": { - "tags": [ - "system/ip-pools" - ], - "summary": "Remove range from IP pool", - "operationId": "ip_pool_range_remove", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpRange" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools/{pool}/silos": { - "get": { - "tags": [ - "system/ip-pools" - ], - "summary": "List IP pool's linked silos", - "operationId": "ip_pool_silo_list", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolSiloLinkResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/ip-pools" - ], - "summary": "Link IP pool to silo", - "description": "Users in linked silos can allocate external IPs from this pool for their instances. A silo can have at most one default pool. IPs are allocated from the default pool when users ask for one without specifying a pool.", - "operationId": "ip_pool_silo_link", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolLinkSilo" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolSiloLink" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools/{pool}/silos/{silo}": { - "put": { - "tags": [ - "system/ip-pools" - ], - "summary": "Make IP pool default for silo", - "description": "When a user asks for an IP (e.g., at instance create time) without specifying a pool, the IP comes from the default pool if a default is configured. When a pool is made the default for a silo, any existing default will remain linked to the silo, but will no longer be the default.", - "operationId": "ip_pool_silo_update", - "parameters": [ - { - "in": "path", - "name": "pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolSiloUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolSiloLink" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/ip-pools" - ], - "summary": "Unlink IP pool from silo", - "description": "Will fail if there are any outstanding IPs allocated in the silo.", - "operationId": "ip_pool_silo_unlink", - "parameters": [ - { - "in": "path", - "name": "pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools/{pool}/utilization": { - "get": { - "tags": [ - "system/ip-pools" - ], - "summary": "Fetch IP pool utilization", - "operationId": "ip_pool_utilization_view", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolUtilization" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools-service": { - "get": { - "tags": [ - "system/ip-pools" - ], - "summary": "Fetch Oxide service IP pool", - "operationId": "ip_pool_service_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPool" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools-service/ranges": { - "get": { - "tags": [ - "system/ip-pools" - ], - "summary": "List IP ranges for the Oxide service pool", - "description": "Ranges are ordered by their first address.", - "operationId": "ip_pool_service_range_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolRangeResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/ip-pools-service/ranges/add": { - "post": { - "tags": [ - "system/ip-pools" - ], - "summary": "Add IP range to Oxide service pool", - "description": "IPv6 ranges are not allowed yet.", - "operationId": "ip_pool_service_range_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpRange" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolRange" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools-service/ranges/remove": { - "post": { - "tags": [ - "system/ip-pools" - ], - "summary": "Remove IP range from Oxide service pool", - "operationId": "ip_pool_service_range_remove", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpRange" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/metrics/{metric_name}": { - "get": { - "tags": [ - "system/metrics" - ], - "summary": "View metrics", - "description": "View CPU, memory, or storage utilization metrics at the fleet or silo level.", - "operationId": "system_metric", - "parameters": [ - { - "in": "path", - "name": "metric_name", - "required": true, - "schema": { - "$ref": "#/components/schemas/SystemMetricName" - } - }, - { - "in": "query", - "name": "end_time", - "description": "An exclusive end time of metrics.", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "order", - "description": "Query result order", - "schema": { - "$ref": "#/components/schemas/PaginationOrder" - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "start_time", - "description": "An inclusive start time of metrics.", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MeasurementResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "end_time", - "start_time" - ] - } - } - }, - "/v1/system/multicast-groups/by-ip/{address}": { - "get": { - "tags": [ - "experimental" - ], - "summary": "Look up multicast group by IP address.", - "operationId": "lookup_multicast_group_by_ip", - "parameters": [ - { - "in": "path", - "name": "address", - "description": "IP address of the multicast group", - "required": true, - "schema": { - "type": "string", - "format": "ip" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/address-lot": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "List address lots", - "operationId": "networking_address_lot_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddressLotResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/networking" - ], - "summary": "Create address lot", - "operationId": "networking_address_lot_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddressLotCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddressLotCreateResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/address-lot/{address_lot}": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Fetch address lot", - "operationId": "networking_address_lot_view", - "parameters": [ - { - "in": "path", - "name": "address_lot", - "description": "Name or ID of the address lot", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddressLotViewResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/networking" - ], - "summary": "Delete address lot", - "operationId": "networking_address_lot_delete", - "parameters": [ - { - "in": "path", - "name": "address_lot", - "description": "Name or ID of the address lot", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/address-lot/{address_lot}/blocks": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "List blocks in address lot", - "operationId": "networking_address_lot_block_list", - "parameters": [ - { - "in": "path", - "name": "address_lot", - "description": "Name or ID of the address lot", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddressLotBlockResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/networking/allow-list": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get user-facing services IP allowlist", - "operationId": "networking_allow_list_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AllowList" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "system/networking" - ], - "summary": "Update user-facing services IP allowlist", - "operationId": "networking_allow_list_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AllowListUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AllowList" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bfd-disable": { - "post": { - "tags": [ - "system/networking" - ], - "summary": "Disable a BFD session", - "operationId": "networking_bfd_disable", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BfdSessionDisable" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bfd-enable": { - "post": { - "tags": [ - "system/networking" - ], - "summary": "Enable a BFD session", - "operationId": "networking_bfd_enable", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BfdSessionEnable" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bfd-status": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get BFD status", - "operationId": "networking_bfd_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_BfdStatus", - "type": "array", - "items": { - "$ref": "#/components/schemas/BfdStatus" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "List BGP configurations", - "operationId": "networking_bgp_config_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BgpConfigResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/networking" - ], - "summary": "Create new BGP configuration", - "operationId": "networking_bgp_config_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BgpConfigCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BgpConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/networking" - ], - "summary": "Delete BGP configuration", - "operationId": "networking_bgp_config_delete", - "parameters": [ - { - "in": "query", - "name": "name_or_id", - "description": "A name or id to use when selecting BGP config.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp-announce-set": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "List BGP announce sets", - "operationId": "networking_bgp_announce_set_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_BgpAnnounceSet", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpAnnounceSet" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "put": { - "tags": [ - "system/networking" - ], - "summary": "Update BGP announce set", - "description": "If the announce set exists, this endpoint replaces the existing announce set with the one specified.", - "operationId": "networking_bgp_announce_set_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BgpAnnounceSetCreate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BgpAnnounceSet" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp-announce-set/{announce_set}": { - "delete": { - "tags": [ - "system/networking" - ], - "summary": "Delete BGP announce set", - "operationId": "networking_bgp_announce_set_delete", - "parameters": [ - { - "in": "path", - "name": "announce_set", - "description": "Name or ID of the announce set", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp-announce-set/{announce_set}/announcement": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get originated routes for a specified BGP announce set", - "operationId": "networking_bgp_announcement_list", - "parameters": [ - { - "in": "path", - "name": "announce_set", - "description": "Name or ID of the announce set", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_BgpAnnouncement", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpAnnouncement" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp-exported": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get BGP exported routes", - "operationId": "networking_bgp_exported", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BgpExported" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp-message-history": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get BGP router message history", - "operationId": "networking_bgp_message_history", - "parameters": [ - { - "in": "query", - "name": "asn", - "description": "The ASN to filter on. Required.", - "required": true, - "schema": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AggregateBgpMessageHistory" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp-routes-ipv4": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get imported IPv4 BGP routes", - "operationId": "networking_bgp_imported_routes_ipv4", - "parameters": [ - { - "in": "query", - "name": "asn", - "description": "The ASN to filter on. Required.", - "required": true, - "schema": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_BgpImportedRouteIpv4", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpImportedRouteIpv4" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp-status": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get BGP peer status", - "operationId": "networking_bgp_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_BgpPeerStatus", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeerStatus" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/inbound-icmp": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Return whether API services can receive limited ICMP traffic", - "operationId": "networking_inbound_icmp_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ServiceIcmpConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "system/networking" - ], - "summary": "Set whether API services can receive limited ICMP traffic", - "operationId": "networking_inbound_icmp_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ServiceIcmpConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/loopback-address": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "List loopback addresses", - "operationId": "networking_loopback_address_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LoopbackAddressResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/networking" - ], - "summary": "Create loopback address", - "operationId": "networking_loopback_address_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LoopbackAddressCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LoopbackAddress" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/loopback-address/{rack_id}/{switch_location}/{address}/{subnet_mask}": { - "delete": { - "tags": [ - "system/networking" - ], - "summary": "Delete loopback address", - "operationId": "networking_loopback_address_delete", - "parameters": [ - { - "in": "path", - "name": "address", - "description": "The IP address and subnet mask to use when selecting the loopback address.", - "required": true, - "schema": { - "type": "string", - "format": "ip" - } - }, - { - "in": "path", - "name": "rack_id", - "description": "The rack to use when selecting the loopback address.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "subnet_mask", - "description": "The IP address and subnet mask to use when selecting the loopback address.", - "required": true, - "schema": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - { - "in": "path", - "name": "switch_location", - "description": "The switch location to use when selecting the loopback address.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/switch-port-settings": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "List switch port settings", - "operationId": "networking_switch_port_settings_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "port_settings", - "description": "An optional name or id to use when selecting port settings.", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPortSettingsIdentityResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/networking" - ], - "summary": "Create switch port settings", - "operationId": "networking_switch_port_settings_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPortSettingsCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPortSettings" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/networking" - ], - "summary": "Delete switch port settings", - "operationId": "networking_switch_port_settings_delete", - "parameters": [ - { - "in": "query", - "name": "port_settings", - "description": "An optional name or id to use when selecting port settings.", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/switch-port-settings/{port}": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get information about switch port", - "operationId": "networking_switch_port_settings_view", - "parameters": [ - { - "in": "path", - "name": "port", - "description": "A name or id to use when selecting switch port settings info objects.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPortSettings" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/policy": { - "get": { - "tags": [ - "policy" - ], - "summary": "Fetch top-level IAM policy", - "operationId": "system_policy_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FleetRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "policy" - ], - "summary": "Update top-level IAM policy", - "operationId": "system_policy_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FleetRolePolicy" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FleetRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/scim/tokens": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "List SCIM tokens", - "description": "Specify the silo by name or ID using the `silo` query parameter.", - "operationId": "scim_token_list", - "parameters": [ - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ScimClientBearerToken", - "type": "array", - "items": { - "$ref": "#/components/schemas/ScimClientBearerToken" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "tags": [ - "system/silos" - ], - "summary": "Create SCIM token", - "description": "Specify the silo by name or ID using the `silo` query parameter. Be sure to save the bearer token in the response. It will not be retrievable later through the token view and list endpoints.", - "operationId": "scim_token_create", - "parameters": [ - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ScimClientBearerTokenValue" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/scim/tokens/{token_id}": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch SCIM token", - "description": "Specify the silo by name or ID using the `silo` query parameter.", - "operationId": "scim_token_view", - "parameters": [ - { - "in": "path", - "name": "token_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ScimClientBearerToken" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/silos" - ], - "summary": "Delete SCIM token", - "description": "Specify the silo by name or ID using the `silo` query parameter.", - "operationId": "scim_token_delete", - "parameters": [ - { - "in": "path", - "name": "token_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/silo-quotas": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Lists resource quotas for all silos", - "operationId": "system_quotas_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloQuotasResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/silos": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "List silos", - "description": "Lists silos that are discoverable based on the current permissions.", - "operationId": "silo_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/silos" - ], - "summary": "Create a silo", - "operationId": "silo_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Silo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/silos/{silo}": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch silo", - "description": "Fetch silo by name or ID.", - "operationId": "silo_view", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Silo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/silos" - ], - "summary": "Delete a silo", - "description": "Delete a silo by name or ID.", - "operationId": "silo_delete", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/silos/{silo}/ip-pools": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "List IP pools linked to silo", - "description": "Linked IP pools are available to users in the specified silo. A silo can have at most one default pool. IPs are allocated from the default pool when users ask for one without specifying a pool.", - "operationId": "silo_ip_pool_list", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloIpPoolResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/silos/{silo}/policy": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch silo IAM policy", - "operationId": "silo_policy_view", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "system/silos" - ], - "summary": "Update silo IAM policy", - "operationId": "silo_policy_update", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/silos/{silo}/quotas": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch resource quotas for silo", - "operationId": "silo_quotas_view", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloQuotas" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "system/silos" - ], - "summary": "Update resource quotas for silo", - "description": "If a quota value is not specified, it will remain unchanged.", - "operationId": "silo_quotas_update", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloQuotasUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloQuotas" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/timeseries/query": { - "post": { - "tags": [ - "system/metrics" - ], - "summary": "Run timeseries query", - "description": "Queries are written in OxQL.", - "operationId": "system_timeseries_query", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeseriesQuery" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OxqlQueryResult" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/timeseries/schemas": { - "get": { - "tags": [ - "system/metrics" - ], - "summary": "List timeseries schemas", - "operationId": "system_timeseries_schema_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeseriesSchemaResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/update/repositories": { - "get": { - "tags": [ - "system/update" - ], - "summary": "List all TUF repositories", - "description": "Returns a paginated list of all TUF repositories ordered by system version (newest first by default).", - "operationId": "system_update_repository_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/VersionSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TufRepoResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "put": { - "tags": [ - "system/update" - ], - "summary": "Upload system release repository", - "description": "System release repositories are verified by the updates trust store.", - "operationId": "system_update_repository_upload", - "parameters": [ - { - "in": "query", - "name": "file_name", - "description": "The name of the uploaded file.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TufRepoUpload" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/update/repositories/{system_version}": { - "get": { - "tags": [ - "system/update" - ], - "summary": "Fetch system release repository by version", - "operationId": "system_update_repository_view", - "parameters": [ - { - "in": "path", - "name": "system_version", - "description": "The version to get.", - "required": true, - "schema": { - "type": "string", - "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TufRepo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/update/status": { - "get": { - "tags": [ - "system/update" - ], - "summary": "Fetch system update status", - "description": "Returns information about the current target release and the progress of system software updates.", - "operationId": "system_update_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/update/target-release": { - "put": { - "tags": [ - "system/update" - ], - "summary": "Set target release", - "description": "Set the current target release of the rack's system software. The rack reconfigurator will treat the software specified here as a goal state for the rack's software, and attempt to asynchronously update to that release. Use the update status endpoint to view the current target release.", - "operationId": "target_release_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SetTargetReleaseParams" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/update/trust-roots": { - "get": { - "tags": [ - "system/update" - ], - "summary": "List root roles in the updates trust store", - "description": "A root role is a JSON document describing the cryptographic keys that are trusted to sign system release repositories, as described by The Update Framework. Uploading a repository requires its metadata to be signed by keys trusted by the trust store.", - "operationId": "system_update_trust_root_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdatesTrustRootResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/update" - ], - "summary": "Add trusted root role to updates trust store", - "operationId": "system_update_trust_root_create", - "requestBody": { - "content": { - "application/json": { - "schema": {} - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdatesTrustRoot" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/update/trust-roots/{trust_root_id}": { - "get": { - "tags": [ - "system/update" - ], - "summary": "Fetch trusted root role", - "operationId": "system_update_trust_root_view", - "parameters": [ - { - "in": "path", - "name": "trust_root_id", - "description": "ID of the trust root", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdatesTrustRoot" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/update" - ], - "summary": "Delete trusted root role", - "description": "Note that this method does not currently check for any uploaded system release repositories that would become untrusted after deleting the root role.", - "operationId": "system_update_trust_root_delete", - "parameters": [ - { - "in": "path", - "name": "trust_root_id", - "description": "ID of the trust root", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/users": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "List built-in (system) users in silo", - "operationId": "silo_user_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "silo" - ] - } - } - }, - "/v1/system/users/{user_id}": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch built-in (system) user", - "operationId": "silo_user_view", - "parameters": [ - { - "in": "path", - "name": "user_id", - "description": "The user's internal ID", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/users-builtin": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "List built-in users", - "operationId": "user_builtin_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserBuiltinResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/users-builtin/{user}": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch built-in user", - "operationId": "user_builtin_view", - "parameters": [ - { - "in": "path", - "name": "user", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserBuiltin" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/utilization/silos": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "List current utilization state for all silos", - "operationId": "silo_utilization_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloUtilizationResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/utilization/silos/{silo}": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch current utilization for given silo", - "operationId": "silo_utilization_view", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloUtilization" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/timeseries/query": { - "post": { - "tags": [ - "experimental" - ], - "summary": "Run project-scoped timeseries query", - "description": "Queries are written in OxQL. Project must be specified by name or ID in URL query parameter. The OxQL query will only return timeseries data from the specified project.", - "operationId": "timeseries_query", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeseriesQuery" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OxqlQueryResult" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/users": { - "get": { - "tags": [ - "silos" - ], - "summary": "List users", - "operationId": "user_list", - "parameters": [ - { - "in": "query", - "name": "group", - "schema": { - "nullable": true, - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/users/{user_id}": { - "get": { - "tags": [ - "silos" - ], - "summary": "Fetch user", - "operationId": "user_view", - "parameters": [ - { - "in": "path", - "name": "user_id", - "description": "ID of the user", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/users/{user_id}/access-tokens": { - "get": { - "tags": [ - "silos" - ], - "summary": "List user's access tokens", - "operationId": "user_token_list", - "parameters": [ - { - "in": "path", - "name": "user_id", - "description": "ID of the user", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeviceAccessTokenResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/users/{user_id}/logout": { - "post": { - "tags": [ - "silos" - ], - "summary": "Log user out", - "description": "Silo admins can use this endpoint to log the specified user out by deleting all of their tokens AND sessions. This cannot be undone.", - "operationId": "user_logout", - "parameters": [ - { - "in": "path", - "name": "user_id", - "description": "ID of the user", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/users/{user_id}/sessions": { - "get": { - "tags": [ - "silos" - ], - "summary": "List user's console sessions", - "operationId": "user_session_list", - "parameters": [ - { - "in": "path", - "name": "user_id", - "description": "ID of the user", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConsoleSessionResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/utilization": { - "get": { - "tags": [ - "silos" - ], - "summary": "Fetch resource utilization for user's current silo", - "operationId": "utilization_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Utilization" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-firewall-rules": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List firewall rules", - "operationId": "vpc_firewall_rules_view", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRules" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "vpcs" - ], - "summary": "Replace firewall rules", - "description": "The maximum number of rules per VPC is 1024.\n\nTargets are used to specify the set of instances to which a firewall rule applies. You can target instances directly by name, or specify a VPC, VPC subnet, IP, or IP subnet, which will apply the rule to traffic going to all matching instances. Targets are additive: the rule applies to instances matching ANY target. The maximum number of targets is 256.\n\nFilters reduce the scope of a firewall rule. Without filters, the rule applies to all packets to the targets (or from the targets, if it's an outbound rule). With multiple filters, the rule applies only to packets matching ALL filters. The maximum number of each type of filter is 256.", - "operationId": "vpc_firewall_rules_update", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRuleUpdateParams" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRules" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-router-routes": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List routes", - "description": "List the routes associated with a router in a particular VPC.", - "operationId": "vpc_router_route_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "router", - "description": "Name or ID of the router", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `router` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RouterRouteResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "router" - ] - } - }, - "post": { - "tags": [ - "vpcs" - ], - "summary": "Create route", - "operationId": "vpc_router_route_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "router", - "description": "Name or ID of the router", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `router` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RouterRouteCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RouterRoute" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-router-routes/{route}": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "Fetch route", - "operationId": "vpc_router_route_view", - "parameters": [ - { - "in": "path", - "name": "route", - "description": "Name or ID of the route", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "router", - "description": "Name or ID of the router", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `router` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RouterRoute" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "vpcs" - ], - "summary": "Update route", - "operationId": "vpc_router_route_update", - "parameters": [ - { - "in": "path", - "name": "route", - "description": "Name or ID of the route", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "router", - "description": "Name or ID of the router", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `router` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RouterRouteUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RouterRoute" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "vpcs" - ], - "summary": "Delete route", - "operationId": "vpc_router_route_delete", - "parameters": [ - { - "in": "path", - "name": "route", - "description": "Name or ID of the route", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "router", - "description": "Name or ID of the router", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `router` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-routers": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List routers", - "operationId": "vpc_router_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcRouterResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "vpc" - ] - } - }, - "post": { - "tags": [ - "vpcs" - ], - "summary": "Create VPC router", - "operationId": "vpc_router_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcRouterCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcRouter" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-routers/{router}": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "Fetch router", - "operationId": "vpc_router_view", - "parameters": [ - { - "in": "path", - "name": "router", - "description": "Name or ID of the router", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcRouter" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "vpcs" - ], - "summary": "Update router", - "operationId": "vpc_router_update", - "parameters": [ - { - "in": "path", - "name": "router", - "description": "Name or ID of the router", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcRouterUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcRouter" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "vpcs" - ], - "summary": "Delete router", - "operationId": "vpc_router_delete", - "parameters": [ - { - "in": "path", - "name": "router", - "description": "Name or ID of the router", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-subnets": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List subnets", - "operationId": "vpc_subnet_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcSubnetResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "vpc" - ] - } - }, - "post": { - "tags": [ - "vpcs" - ], - "summary": "Create subnet", - "operationId": "vpc_subnet_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcSubnetCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcSubnet" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-subnets/{subnet}": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "Fetch subnet", - "operationId": "vpc_subnet_view", - "parameters": [ - { - "in": "path", - "name": "subnet", - "description": "Name or ID of the subnet", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcSubnet" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "vpcs" - ], - "summary": "Update subnet", - "operationId": "vpc_subnet_update", - "parameters": [ - { - "in": "path", - "name": "subnet", - "description": "Name or ID of the subnet", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcSubnetUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcSubnet" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "vpcs" - ], - "summary": "Delete subnet", - "operationId": "vpc_subnet_delete", - "parameters": [ - { - "in": "path", - "name": "subnet", - "description": "Name or ID of the subnet", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-subnets/{subnet}/network-interfaces": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List network interfaces", - "operationId": "vpc_subnet_list_network_interfaces", - "parameters": [ - { - "in": "path", - "name": "subnet", - "description": "Name or ID of the subnet", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceNetworkInterfaceResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/vpcs": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List VPCs", - "operationId": "vpc_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "vpcs" - ], - "summary": "Create VPC", - "operationId": "vpc_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Vpc" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpcs/{vpc}": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "Fetch VPC", - "operationId": "vpc_view", - "parameters": [ - { - "in": "path", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Vpc" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "vpcs" - ], - "summary": "Update a VPC", - "operationId": "vpc_update", - "parameters": [ - { - "in": "path", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Vpc" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "vpcs" - ], - "summary": "Delete VPC", - "operationId": "vpc_delete", - "parameters": [ - { - "in": "path", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/webhook-receivers": { - "post": { - "tags": [ - "system/alerts" - ], - "summary": "Create webhook receiver", - "operationId": "webhook_receiver_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookReceiver" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/webhook-receivers/{receiver}": { - "put": { - "tags": [ - "system/alerts" - ], - "summary": "Update webhook receiver", - "description": "Note that receiver secrets are NOT added or removed using this endpoint. Instead, use the `/v1/webhooks/{secrets}/?receiver={receiver}` endpoint to add and remove secrets.", - "operationId": "webhook_receiver_update", - "parameters": [ - { - "in": "path", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookReceiverUpdate" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/webhook-secrets": { - "get": { - "tags": [ - "system/alerts" - ], - "summary": "List webhook receiver secret IDs", - "operationId": "webhook_secrets_list", - "parameters": [ - { - "in": "query", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookSecrets" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "tags": [ - "system/alerts" - ], - "summary": "Add secret to webhook receiver", - "operationId": "webhook_secrets_add", - "parameters": [ - { - "in": "query", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookSecretCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookSecret" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/webhook-secrets/{secret_id}": { - "delete": { - "tags": [ - "system/alerts" - ], - "summary": "Remove secret from webhook receiver", - "operationId": "webhook_secrets_delete", - "parameters": [ - { - "in": "path", - "name": "secret_id", - "description": "ID of the secret.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "Address": { - "description": "An address tied to an address lot.", - "type": "object", - "properties": { - "address": { - "description": "The address and prefix length of this address.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "address_lot": { - "description": "The address lot this address is drawn from.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "vlan_id": { - "nullable": true, - "description": "Optional VLAN ID for this address", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "address", - "address_lot" - ] - }, - "AddressConfig": { - "description": "A set of addresses associated with a port configuration.", - "type": "object", - "properties": { - "addresses": { - "description": "The set of addresses assigned to the port configuration.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Address" - } - }, - "link_name": { - "description": "Link to assign the addresses to. On ports that are not broken out, this is always phy0. On a 2x breakout the options are phy0 and phy1, on 4x phy0-phy3, etc.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - }, - "required": [ - "addresses", - "link_name" - ] - }, - "AddressLot": { - "description": "Represents an address lot object, containing the id of the lot that can be used in other API calls.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "kind": { - "description": "Desired use of `AddressLot`", - "allOf": [ - { - "$ref": "#/components/schemas/AddressLotKind" - } - ] - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "kind", - "name", - "time_created", - "time_modified" - ] - }, - "AddressLotBlock": { - "description": "An address lot block is a part of an address lot and contains a range of addresses. The range is inclusive.", - "type": "object", - "properties": { - "first_address": { - "description": "The first address of the block (inclusive).", - "type": "string", - "format": "ip" - }, - "id": { - "description": "The id of the address lot block.", - "type": "string", - "format": "uuid" - }, - "last_address": { - "description": "The last address of the block (inclusive).", - "type": "string", - "format": "ip" - } - }, - "required": [ - "first_address", - "id", - "last_address" - ] - }, - "AddressLotBlockCreate": { - "description": "Parameters for creating an address lot block. Fist and last addresses are inclusive.", - "type": "object", - "properties": { - "first_address": { - "description": "The first address in the lot (inclusive).", - "type": "string", - "format": "ip" - }, - "last_address": { - "description": "The last address in the lot (inclusive).", - "type": "string", - "format": "ip" - } - }, - "required": [ - "first_address", - "last_address" - ] - }, - "AddressLotBlockResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AddressLotBlock" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AddressLotCreate": { - "description": "Parameters for creating an address lot.", - "type": "object", - "properties": { - "blocks": { - "description": "The blocks to add along with the new address lot.", - "type": "array", - "items": { - "$ref": "#/components/schemas/AddressLotBlockCreate" - } - }, - "description": { - "type": "string" - }, - "kind": { - "description": "The kind of address lot to create.", - "allOf": [ - { - "$ref": "#/components/schemas/AddressLotKind" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "blocks", - "description", - "kind", - "name" - ] - }, - "AddressLotCreateResponse": { - "description": "An address lot and associated blocks resulting from creating an address lot.", - "type": "object", - "properties": { - "blocks": { - "description": "The address lot blocks that were created.", - "type": "array", - "items": { - "$ref": "#/components/schemas/AddressLotBlock" - } - }, - "lot": { - "description": "The address lot that was created.", - "allOf": [ - { - "$ref": "#/components/schemas/AddressLot" - } - ] - } - }, - "required": [ - "blocks", - "lot" - ] - }, - "AddressLotKind": { - "description": "The kind associated with an address lot.", - "oneOf": [ - { - "description": "Infrastructure address lots are used for network infrastructure like addresses assigned to rack switches.", - "type": "string", - "enum": [ - "infra" - ] - }, - { - "description": "Pool address lots are used by IP pools.", - "type": "string", - "enum": [ - "pool" - ] - } - ] - }, - "AddressLotResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AddressLot" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AddressLotViewResponse": { - "description": "An address lot and associated blocks resulting from viewing an address lot.", - "type": "object", - "properties": { - "blocks": { - "description": "The address lot blocks.", - "type": "array", - "items": { - "$ref": "#/components/schemas/AddressLotBlock" - } - }, - "lot": { - "description": "The address lot.", - "allOf": [ - { - "$ref": "#/components/schemas/AddressLot" - } - ] - } - }, - "required": [ - "blocks", - "lot" - ] - }, - "AffinityGroup": { - "description": "View of an Affinity Group", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "failure_domain": { - "$ref": "#/components/schemas/FailureDomain" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "policy": { - "$ref": "#/components/schemas/AffinityPolicy" - }, - "project_id": { - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "failure_domain", - "id", - "name", - "policy", - "project_id", - "time_created", - "time_modified" - ] - }, - "AffinityGroupCreate": { - "description": "Create-time parameters for an `AffinityGroup`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "failure_domain": { - "$ref": "#/components/schemas/FailureDomain" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "policy": { - "$ref": "#/components/schemas/AffinityPolicy" - } - }, - "required": [ - "description", - "failure_domain", - "name", - "policy" - ] - }, - "AffinityGroupMember": { - "description": "A member of an Affinity Group\n\nMembership in a group is not exclusive - members may belong to multiple affinity / anti-affinity groups.\n\nAffinity Groups can contain up to 32 members.", - "oneOf": [ - { - "description": "An instance belonging to this group\n\nInstances can belong to up to 16 affinity groups.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "instance" - ] - }, - "value": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "run_state": { - "$ref": "#/components/schemas/InstanceState" - } - }, - "required": [ - "id", - "name", - "run_state" - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "AffinityGroupMemberResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AffinityGroupMember" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AffinityGroupResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AffinityGroup" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AffinityGroupUpdate": { - "description": "Updateable properties of an `AffinityGroup`", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "AffinityPolicy": { - "description": "Affinity policy used to describe \"what to do when a request cannot be satisfied\"\n\nUsed for both Affinity and Anti-Affinity Groups", - "oneOf": [ - { - "description": "If the affinity request cannot be satisfied, allow it anyway.\n\nThis enables a \"best-effort\" attempt to satisfy the affinity policy.", - "type": "string", - "enum": [ - "allow" - ] - }, - { - "description": "If the affinity request cannot be satisfied, fail explicitly.", - "type": "string", - "enum": [ - "fail" - ] - } - ] - }, - "AggregateBgpMessageHistory": { - "description": "BGP message history for rack switches.", - "type": "object", - "properties": { - "switch_histories": { - "description": "BGP history organized by switch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchBgpHistory" - } - } - }, - "required": [ - "switch_histories" - ] - }, - "AlertClass": { - "description": "An alert class.", - "type": "object", - "properties": { - "description": { - "description": "A description of what this alert class represents.", - "type": "string" - }, - "name": { - "description": "The name of the alert class.", - "type": "string" - } - }, - "required": [ - "description", - "name" - ] - }, - "AlertClassResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AlertClass" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AlertDelivery": { - "description": "A delivery of a webhook event.", - "type": "object", - "properties": { - "alert_class": { - "description": "The event class.", - "type": "string" - }, - "alert_id": { - "description": "The UUID of the event.", - "type": "string", - "format": "uuid" - }, - "attempts": { - "description": "Individual attempts to deliver this webhook event, and their outcomes.", - "allOf": [ - { - "$ref": "#/components/schemas/AlertDeliveryAttempts" - } - ] - }, - "id": { - "description": "The UUID of this delivery attempt.", - "type": "string", - "format": "uuid" - }, - "receiver_id": { - "description": "The UUID of the alert receiver that this event was delivered to.", - "type": "string", - "format": "uuid" - }, - "state": { - "description": "The state of this delivery.", - "allOf": [ - { - "$ref": "#/components/schemas/AlertDeliveryState" - } - ] - }, - "time_started": { - "description": "The time at which this delivery began (i.e. the event was dispatched to the receiver).", - "type": "string", - "format": "date-time" - }, - "trigger": { - "description": "Why this delivery was performed.", - "allOf": [ - { - "$ref": "#/components/schemas/AlertDeliveryTrigger" - } - ] - } - }, - "required": [ - "alert_class", - "alert_id", - "attempts", - "id", - "receiver_id", - "state", - "time_started", - "trigger" - ] - }, - "AlertDeliveryAttempts": { - "description": "A list of attempts to deliver an alert to a receiver.\n\nThe type of the delivery attempt model depends on the receiver type, as it may contain information specific to that delivery mechanism. For example, webhook delivery attempts contain the HTTP status code of the webhook request.", - "oneOf": [ - { - "description": "A list of attempts to deliver an alert to a webhook receiver.", - "type": "object", - "properties": { - "webhook": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WebhookDeliveryAttempt" - } - } - }, - "required": [ - "webhook" - ], - "additionalProperties": false - } - ] - }, - "AlertDeliveryId": { - "type": "object", - "properties": { - "delivery_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "delivery_id" - ] - }, - "AlertDeliveryResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AlertDelivery" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AlertDeliveryState": { - "description": "The state of a webhook delivery attempt.", - "oneOf": [ - { - "description": "The webhook event has not yet been delivered successfully.\n\nEither no delivery attempts have yet been performed, or the delivery has failed at least once but has retries remaining.", - "type": "string", - "enum": [ - "pending" - ] - }, - { - "description": "The webhook event has been delivered successfully.", - "type": "string", - "enum": [ - "delivered" - ] - }, - { - "description": "The webhook delivery attempt has failed permanently and will not be retried again.", - "type": "string", - "enum": [ - "failed" - ] - } - ] - }, - "AlertDeliveryTrigger": { - "description": "The reason an alert was delivered", - "oneOf": [ - { - "description": "Delivery was triggered by the alert itself.", - "type": "string", - "enum": [ - "alert" - ] - }, - { - "description": "Delivery was triggered by a request to resend the alert.", - "type": "string", - "enum": [ - "resend" - ] - }, - { - "description": "This delivery is a liveness probe.", - "type": "string", - "enum": [ - "probe" - ] - } - ] - }, - "AlertProbeResult": { - "description": "Data describing the result of an alert receiver liveness probe attempt.", - "type": "object", - "properties": { - "probe": { - "description": "The outcome of the probe delivery.", - "allOf": [ - { - "$ref": "#/components/schemas/AlertDelivery" - } - ] - }, - "resends_started": { - "nullable": true, - "description": "If the probe request succeeded, and resending failed deliveries on success was requested, the number of new delivery attempts started. Otherwise, if the probe did not succeed, or resending failed deliveries was not requested, this is null.\n\nNote that this may be 0, if there were no events found which had not been delivered successfully to this receiver.", - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "required": [ - "probe" - ] - }, - "AlertReceiver": { - "description": "The configuration for an alert receiver.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "kind": { - "description": "Configuration specific to the kind of alert receiver that this is.", - "allOf": [ - { - "$ref": "#/components/schemas/AlertReceiverKind" - } - ] - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "subscriptions": { - "description": "The list of alert classes to which this receiver is subscribed.", - "type": "array", - "items": { - "$ref": "#/components/schemas/AlertSubscription" - } - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "kind", - "name", - "subscriptions", - "time_created", - "time_modified" - ] - }, - "AlertReceiverKind": { - "description": "The possible alert delivery mechanisms for an alert receiver.", - "oneOf": [ - { - "description": "Webhook-specific alert receiver configuration.", - "type": "object", - "properties": { - "endpoint": { - "description": "The URL that webhook notification requests are sent to.", - "type": "string", - "format": "uri" - }, - "kind": { - "type": "string", - "enum": [ - "webhook" - ] - }, - "secrets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WebhookSecret" - } - } - }, - "required": [ - "endpoint", - "kind", - "secrets" - ] - } - ] - }, - "AlertReceiverResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AlertReceiver" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AlertSubscription": { - "title": "A webhook event class subscription", - "description": "A webhook event class subscription matches either a single event class exactly, or a glob pattern including wildcards that may match multiple event classes", - "type": "string", - "pattern": "^([a-zA-Z0-9_]+|\\*|\\*\\*)(\\.([a-zA-Z0-9_]+|\\*|\\*\\*))*$" - }, - "AlertSubscriptionCreate": { - "type": "object", - "properties": { - "subscription": { - "description": "The event class pattern to subscribe to.", - "allOf": [ - { - "$ref": "#/components/schemas/AlertSubscription" - } - ] - } - }, - "required": [ - "subscription" - ] - }, - "AlertSubscriptionCreated": { - "type": "object", - "properties": { - "subscription": { - "description": "The new subscription added to the receiver.", - "allOf": [ - { - "$ref": "#/components/schemas/AlertSubscription" - } - ] - } - }, - "required": [ - "subscription" - ] - }, - "AllowList": { - "description": "Allowlist of IPs or subnets that can make requests to user-facing services.", - "type": "object", - "properties": { - "allowed_ips": { - "description": "The allowlist of IPs or subnets.", - "allOf": [ - { - "$ref": "#/components/schemas/AllowedSourceIps" - } - ] - }, - "time_created": { - "description": "Time the list was created.", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "Time the list was last modified.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "allowed_ips", - "time_created", - "time_modified" - ] - }, - "AllowListUpdate": { - "description": "Parameters for updating allowed source IPs", - "type": "object", - "properties": { - "allowed_ips": { - "description": "The new list of allowed source IPs.", - "allOf": [ - { - "$ref": "#/components/schemas/AllowedSourceIps" - } - ] - } - }, - "required": [ - "allowed_ips" - ] - }, - "AllowedSourceIps": { - "description": "Description of source IPs allowed to reach rack services.", - "oneOf": [ - { - "description": "Allow traffic from any external IP address.", - "type": "object", - "properties": { - "allow": { - "type": "string", - "enum": [ - "any" - ] - } - }, - "required": [ - "allow" - ] - }, - { - "description": "Restrict access to a specific set of source IP addresses or subnets.\n\nAll others are prevented from reaching rack services.", - "type": "object", - "properties": { - "allow": { - "type": "string", - "enum": [ - "list" - ] - }, - "ips": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IpNet" - } - } - }, - "required": [ - "allow", - "ips" - ] - } - ] - }, - "AntiAffinityGroup": { - "description": "View of an Anti-Affinity Group", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "failure_domain": { - "$ref": "#/components/schemas/FailureDomain" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "policy": { - "$ref": "#/components/schemas/AffinityPolicy" - }, - "project_id": { - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "failure_domain", - "id", - "name", - "policy", - "project_id", - "time_created", - "time_modified" - ] - }, - "AntiAffinityGroupCreate": { - "description": "Create-time parameters for an `AntiAffinityGroup`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "failure_domain": { - "$ref": "#/components/schemas/FailureDomain" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "policy": { - "$ref": "#/components/schemas/AffinityPolicy" - } - }, - "required": [ - "description", - "failure_domain", - "name", - "policy" - ] - }, - "AntiAffinityGroupMember": { - "description": "A member of an Anti-Affinity Group\n\nMembership in a group is not exclusive - members may belong to multiple affinity / anti-affinity groups.\n\nAnti-Affinity Groups can contain up to 32 members.", - "oneOf": [ - { - "description": "An instance belonging to this group\n\nInstances can belong to up to 16 anti-affinity groups.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "instance" - ] - }, - "value": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "run_state": { - "$ref": "#/components/schemas/InstanceState" - } - }, - "required": [ - "id", - "name", - "run_state" - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "AntiAffinityGroupMemberResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AntiAffinityGroupMember" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AntiAffinityGroupResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AntiAffinityGroup" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AntiAffinityGroupUpdate": { - "description": "Updateable properties of an `AntiAffinityGroup`", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "AuditLogEntry": { - "description": "Audit log entry", - "type": "object", - "properties": { - "actor": { - "$ref": "#/components/schemas/AuditLogEntryActor" - }, - "auth_method": { - "nullable": true, - "description": "How the user authenticated the request. Possible values are \"session_cookie\" and \"access_token\". Optional because it will not be defined on unauthenticated requests like login attempts.", - "type": "string" - }, - "id": { - "description": "Unique identifier for the audit log entry", - "type": "string", - "format": "uuid" - }, - "operation_id": { - "description": "API endpoint ID, e.g., `project_create`", - "type": "string" - }, - "request_id": { - "description": "Request ID for tracing requests through the system", - "type": "string" - }, - "request_uri": { - "description": "URI of the request, truncated to 512 characters. Will only include host and scheme for HTTP/2 requests. For HTTP/1.1, the URI will consist of only the path and query.", - "type": "string" - }, - "result": { - "description": "Result of the operation", - "allOf": [ - { - "$ref": "#/components/schemas/AuditLogEntryResult" - } - ] - }, - "source_ip": { - "description": "IP address that made the request", - "type": "string", - "format": "ip" - }, - "time_completed": { - "description": "Time operation completed", - "type": "string", - "format": "date-time" - }, - "time_started": { - "description": "When the request was received", - "type": "string", - "format": "date-time" - }, - "user_agent": { - "nullable": true, - "description": "User agent string from the request, truncated to 256 characters.", - "type": "string" - } - }, - "required": [ - "actor", - "id", - "operation_id", - "request_id", - "request_uri", - "result", - "source_ip", - "time_completed", - "time_started" - ] - }, - "AuditLogEntryActor": { - "oneOf": [ - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "user_builtin" - ] - }, - "user_builtin_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "kind", - "user_builtin_id" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "silo_user" - ] - }, - "silo_id": { - "type": "string", - "format": "uuid" - }, - "silo_user_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "kind", - "silo_id", - "silo_user_id" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "scim" - ] - }, - "silo_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "kind", - "silo_id" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "unauthenticated" - ] - } - }, - "required": [ - "kind" - ] - } - ] - }, - "AuditLogEntryResult": { - "description": "Result of an audit log entry", - "oneOf": [ - { - "description": "The operation completed successfully", - "type": "object", - "properties": { - "http_status_code": { - "description": "HTTP status code", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "kind": { - "type": "string", - "enum": [ - "success" - ] - } - }, - "required": [ - "http_status_code", - "kind" - ] - }, - { - "description": "The operation failed", - "type": "object", - "properties": { - "error_code": { - "nullable": true, - "type": "string" - }, - "error_message": { - "type": "string" - }, - "http_status_code": { - "description": "HTTP status code", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "kind": { - "type": "string", - "enum": [ - "error" - ] - } - }, - "required": [ - "error_message", - "http_status_code", - "kind" - ] - }, - { - "description": "After the logged operation completed, our attempt to write the result to the audit log failed, so it was automatically marked completed later by a background job. This does not imply that the operation itself timed out or failed, only our attempts to log its result.", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "kind" - ] - } - ] - }, - "AuditLogEntryResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AuditLogEntry" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AuthzScope": { - "description": "Authorization scope for a timeseries.\n\nThis describes the level at which a user must be authorized to read data from a timeseries. For example, fleet-scoping means the data is only visible to an operator or fleet reader. Project-scoped, on the other hand, indicates that a user will see data limited to the projects on which they have read permissions.", - "oneOf": [ - { - "description": "Timeseries data is limited to fleet readers.", - "type": "string", - "enum": [ - "fleet" - ] - }, - { - "description": "Timeseries data is limited to the authorized silo for a user.", - "type": "string", - "enum": [ - "silo" - ] - }, - { - "description": "Timeseries data is limited to the authorized projects for a user.", - "type": "string", - "enum": [ - "project" - ] - }, - { - "description": "The timeseries is viewable to all without limitation.", - "type": "string", - "enum": [ - "viewable_to_all" - ] - } - ] - }, - "Baseboard": { - "description": "Properties that uniquely identify an Oxide hardware component", - "type": "object", - "properties": { - "part": { - "type": "string" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "serial": { - "type": "string" - } - }, - "required": [ - "part", - "revision", - "serial" - ] - }, - "BfdMode": { - "description": "BFD connection mode.", - "type": "string", - "enum": [ - "single_hop", - "multi_hop" - ] - }, - "BfdSessionDisable": { - "description": "Information needed to disable a BFD session", - "type": "object", - "properties": { - "remote": { - "description": "Address of the remote peer to disable a BFD session for.", - "type": "string", - "format": "ip" - }, - "switch": { - "description": "The switch to enable this session on. Must be `switch0` or `switch1`.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - }, - "required": [ - "remote", - "switch" - ] - }, - "BfdSessionEnable": { - "description": "Information about a bidirectional forwarding detection (BFD) session.", - "type": "object", - "properties": { - "detection_threshold": { - "description": "The negotiated Control packet transmission interval, multiplied by this variable, will be the Detection Time for this session (as seen by the remote system)", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "description": "Address the Oxide switch will listen on for BFD traffic. If `None` then the unspecified address (0.0.0.0 or ::) is used.", - "type": "string", - "format": "ip" - }, - "mode": { - "description": "Select either single-hop (RFC 5881) or multi-hop (RFC 5883)", - "allOf": [ - { - "$ref": "#/components/schemas/BfdMode" - } - ] - }, - "remote": { - "description": "Address of the remote peer to establish a BFD session with.", - "type": "string", - "format": "ip" - }, - "required_rx": { - "description": "The minimum interval, in microseconds, between received BFD Control packets that this system requires", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "description": "The switch to enable this session on. Must be `switch0` or `switch1`.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - }, - "required": [ - "detection_threshold", - "mode", - "remote", - "required_rx", - "switch" - ] - }, - "BfdState": { - "oneOf": [ - { - "description": "A stable down state. Non-responsive to incoming messages.", - "type": "string", - "enum": [ - "admin_down" - ] - }, - { - "description": "The initial state.", - "type": "string", - "enum": [ - "down" - ] - }, - { - "description": "The peer has detected a remote peer in the down state.", - "type": "string", - "enum": [ - "init" - ] - }, - { - "description": "The peer has detected a remote peer in the up or init state while in the init state.", - "type": "string", - "enum": [ - "up" - ] - } - ] - }, - "BfdStatus": { - "type": "object", - "properties": { - "detection_threshold": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "type": "string", - "format": "ip" - }, - "mode": { - "$ref": "#/components/schemas/BfdMode" - }, - "peer": { - "type": "string", - "format": "ip" - }, - "required_rx": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "state": { - "$ref": "#/components/schemas/BfdState" - }, - "switch": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "detection_threshold", - "mode", - "peer", - "required_rx", - "state", - "switch" - ] - }, - "BgpAnnounceSet": { - "description": "Represents a BGP announce set by id. The id can be used with other API calls to view and manage the announce set.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "name", - "time_created", - "time_modified" - ] - }, - "BgpAnnounceSetCreate": { - "description": "Parameters for creating a named set of BGP announcements.", - "type": "object", - "properties": { - "announcement": { - "description": "The announcements in this set.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpAnnouncementCreate" - } - }, - "description": { - "type": "string" - }, - "name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "announcement", - "description", - "name" - ] - }, - "BgpAnnouncement": { - "description": "A BGP announcement tied to an address lot block.", - "type": "object", - "properties": { - "address_lot_block_id": { - "description": "The address block the IP network being announced is drawn from.", - "type": "string", - "format": "uuid" - }, - "announce_set_id": { - "description": "The id of the set this announcement is a part of.", - "type": "string", - "format": "uuid" - }, - "network": { - "description": "The IP network being announced.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - } - }, - "required": [ - "address_lot_block_id", - "announce_set_id", - "network" - ] - }, - "BgpAnnouncementCreate": { - "description": "A BGP announcement tied to a particular address lot block.", - "type": "object", - "properties": { - "address_lot_block": { - "description": "Address lot this announcement is drawn from.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "network": { - "description": "The network being announced.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - } - }, - "required": [ - "address_lot_block", - "network" - ] - }, - "BgpConfig": { - "description": "A base BGP configuration.", - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number of this BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "vrf": { - "nullable": true, - "description": "Optional virtual routing and forwarding identifier for this BGP configuration.", - "type": "string" - } - }, - "required": [ - "asn", - "description", - "id", - "name", - "time_created", - "time_modified" - ] - }, - "BgpConfigCreate": { - "description": "Parameters for creating a BGP configuration. This includes and autonomous system number (ASN) and a virtual routing and forwarding (VRF) identifier.", - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number of this BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "bgp_announce_set_id": { - "$ref": "#/components/schemas/NameOrId" - }, - "description": { - "type": "string" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "vrf": { - "nullable": true, - "description": "Optional virtual routing and forwarding identifier for this BGP configuration.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - }, - "required": [ - "asn", - "bgp_announce_set_id", - "description", - "name" - ] - }, - "BgpConfigResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpConfig" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "BgpExported": { - "description": "The current status of a BGP peer.", - "type": "object", - "properties": { - "exports": { - "description": "Exported routes indexed by peer address.", - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - } - } - }, - "required": [ - "exports" - ] - }, - "BgpImportedRouteIpv4": { - "description": "A route imported from a BGP peer.", - "type": "object", - "properties": { - "id": { - "description": "BGP identifier of the originating router.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "nexthop": { - "description": "The nexthop the prefix is reachable through.", - "type": "string", - "format": "ipv4" - }, - "prefix": { - "description": "The destination network prefix.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv4Net" - } - ] - }, - "switch": { - "description": "Switch the route is imported into.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - } - }, - "required": [ - "id", - "nexthop", - "prefix", - "switch" - ] - }, - "BgpMessageHistory": {}, - "BgpPeer": { - "description": "A BGP peer configuration for an interface. Includes the set of announcements that will be advertised to the peer identified by `addr`. The `bgp_config` parameter is a reference to global BGP parameters. The `interface_name` indicates what interface the peer should be contacted on.", - "type": "object", - "properties": { - "addr": { - "description": "The address of the host to peer with.", - "type": "string", - "format": "ip" - }, - "allowed_export": { - "description": "Define export policy for a peer.", - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "allowed_import": { - "description": "Define import policy for a peer.", - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "bgp_config": { - "description": "The global BGP configuration used for establishing a session with this peer.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "communities": { - "description": "Include the provided communities in updates sent to the peer.", - "type": "array", - "items": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "connect_retry": { - "description": "How long to to wait between TCP connection retries (seconds).", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "delay_open": { - "description": "How long to delay sending an open request after establishing a TCP session (seconds).", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "enforce_first_as": { - "description": "Enforce that the first AS in paths received from this peer is the peer's AS.", - "type": "boolean" - }, - "hold_time": { - "description": "How long to hold peer connections between keepalives (seconds).", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "idle_hold_time": { - "description": "How long to hold a peer in idle before attempting a new session (seconds).", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "interface_name": { - "description": "The name of interface to peer on. This is relative to the port configuration this BGP peer configuration is a part of. For example this value could be phy0 to refer to a primary physical interface. Or it could be vlan47 to refer to a VLAN interface.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "keepalive": { - "description": "How often to send keepalive requests (seconds).", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "local_pref": { - "nullable": true, - "description": "Apply a local preference to routes received from this peer.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "md5_auth_key": { - "nullable": true, - "description": "Use the given key for TCP-MD5 authentication with the peer.", - "type": "string" - }, - "min_ttl": { - "nullable": true, - "description": "Require messages from a peer have a minimum IP time to live field.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "multi_exit_discriminator": { - "nullable": true, - "description": "Apply the provided multi-exit discriminator (MED) updates sent to the peer.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "remote_asn": { - "nullable": true, - "description": "Require that a peer has a specified ASN.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "Associate a VLAN ID with a peer.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "addr", - "allowed_export", - "allowed_import", - "bgp_config", - "communities", - "connect_retry", - "delay_open", - "enforce_first_as", - "hold_time", - "idle_hold_time", - "interface_name", - "keepalive" - ] - }, - "BgpPeerConfig": { - "type": "object", - "properties": { - "link_name": { - "description": "Link that the peer is reachable on. On ports that are not broken out, this is always phy0. On a 2x breakout the options are phy0 and phy1, on 4x phy0-phy3, etc.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "peers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeer" - } - } - }, - "required": [ - "link_name", - "peers" - ] - }, - "BgpPeerState": { - "description": "The current state of a BGP peer.", - "oneOf": [ - { - "description": "Initial state. Refuse all incoming BGP connections. No resources allocated to peer.", - "type": "string", - "enum": [ - "idle" - ] - }, - { - "description": "Waiting for the TCP connection to be completed.", - "type": "string", - "enum": [ - "connect" - ] - }, - { - "description": "Trying to acquire peer by listening for and accepting a TCP connection.", - "type": "string", - "enum": [ - "active" - ] - }, - { - "description": "Waiting for open message from peer.", - "type": "string", - "enum": [ - "open_sent" - ] - }, - { - "description": "Waiting for keepaliave or notification from peer.", - "type": "string", - "enum": [ - "open_confirm" - ] - }, - { - "description": "Synchronizing with peer.", - "type": "string", - "enum": [ - "session_setup" - ] - }, - { - "description": "Session established. Able to exchange update, notification and keepalive messages with peers.", - "type": "string", - "enum": [ - "established" - ] - } - ] - }, - "BgpPeerStatus": { - "description": "The current status of a BGP peer.", - "type": "object", - "properties": { - "addr": { - "description": "IP address of the peer.", - "type": "string", - "format": "ip" - }, - "local_asn": { - "description": "Local autonomous system number.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "remote_asn": { - "description": "Remote autonomous system number.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "state": { - "description": "State of the peer.", - "allOf": [ - { - "$ref": "#/components/schemas/BgpPeerState" - } - ] - }, - "state_duration_millis": { - "description": "Time of last state change.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "description": "Switch with the peer session.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - } - }, - "required": [ - "addr", - "local_asn", - "remote_asn", - "state", - "state_duration_millis", - "switch" - ] - }, - "BinRangedouble": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "number", - "format": "double" - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "number", - "format": "double" - }, - "start": { - "type": "number", - "format": "double" - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "number", - "format": "double" - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangefloat": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "number", - "format": "float" - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "number", - "format": "float" - }, - "start": { - "type": "number", - "format": "float" - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "number", - "format": "float" - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeint16": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int16" - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int16" - }, - "start": { - "type": "integer", - "format": "int16" - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "int16" - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeint32": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int32" - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int32" - }, - "start": { - "type": "integer", - "format": "int32" - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "int32" - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeint64": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int64" - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int64" - }, - "start": { - "type": "integer", - "format": "int64" - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "int64" - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeint8": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int8" - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int8" - }, - "start": { - "type": "integer", - "format": "int8" - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "int8" - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeuint16": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "start": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeuint32": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "start": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeuint64": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "start": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeuint8": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "start": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "Bindouble": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangedouble" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binfloat": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangefloat" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binint16": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeint16" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binint32": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeint32" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binint64": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeint64" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binint8": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeint8" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binuint16": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeuint16" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binuint32": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeuint32" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binuint64": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeuint64" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binuint8": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeuint8" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "BlockSize": { - "title": "disk block size in bytes", - "type": "integer", - "enum": [ - 512, - 2048, - 4096 - ] - }, - "ByteCount": { - "description": "Byte count to express memory or storage capacity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "Certificate": { - "description": "View of a Certificate", - "type": "object", - "properties": { - "cert": { - "description": "PEM-formatted string containing public certificate chain", - "type": "string" - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "service": { - "description": "The service using this certificate", - "allOf": [ - { - "$ref": "#/components/schemas/ServiceUsingCertificate" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "cert", - "description", - "id", - "name", - "service", - "time_created", - "time_modified" - ] - }, - "CertificateCreate": { - "description": "Create-time parameters for a `Certificate`", - "type": "object", - "properties": { - "cert": { - "description": "PEM-formatted string containing public certificate chain", - "type": "string" - }, - "description": { - "type": "string" - }, - "key": { - "description": "PEM-formatted string containing private key", - "type": "string" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "service": { - "description": "The service using this certificate", - "allOf": [ - { - "$ref": "#/components/schemas/ServiceUsingCertificate" - } - ] - } - }, - "required": [ - "cert", - "description", - "key", - "name", - "service" - ] - }, - "CertificateResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Certificate" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "ConsoleSession": { - "description": "View of a console session", - "type": "object", - "properties": { - "id": { - "description": "A unique, immutable, system-controlled identifier for the session", - "type": "string", - "format": "uuid" - }, - "time_created": { - "type": "string", - "format": "date-time" - }, - "time_last_used": { - "type": "string", - "format": "date-time" - } - }, - "required": [ - "id", - "time_created", - "time_last_used" - ] - }, - "ConsoleSessionResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/ConsoleSession" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "Cumulativedouble": { - "description": "A cumulative or counter data type.", - "type": "object", - "properties": { - "start_time": { - "type": "string", - "format": "date-time" - }, - "value": { - "type": "number", - "format": "double" - } - }, - "required": [ - "start_time", - "value" - ] - }, - "Cumulativefloat": { - "description": "A cumulative or counter data type.", - "type": "object", - "properties": { - "start_time": { - "type": "string", - "format": "date-time" - }, - "value": { - "type": "number", - "format": "float" - } - }, - "required": [ - "start_time", - "value" - ] - }, - "Cumulativeint64": { - "description": "A cumulative or counter data type.", - "type": "object", - "properties": { - "start_time": { - "type": "string", - "format": "date-time" - }, - "value": { - "type": "integer", - "format": "int64" - } - }, - "required": [ - "start_time", - "value" - ] - }, - "Cumulativeuint64": { - "description": "A cumulative or counter data type.", - "type": "object", - "properties": { - "start_time": { - "type": "string", - "format": "date-time" - }, - "value": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "start_time", - "value" - ] - }, - "CurrentUser": { - "description": "Info about the current user", - "type": "object", - "properties": { - "display_name": { - "description": "Human-readable name that can identify the user", - "type": "string" - }, - "fleet_viewer": { - "description": "Whether this user has the viewer role on the fleet. Used by the web console to determine whether to show system-level UI.", - "type": "boolean" - }, - "id": { - "type": "string", - "format": "uuid" - }, - "silo_admin": { - "description": "Whether this user has the admin role on their silo. Used by the web console to determine whether to show admin-only UI elements.", - "type": "boolean" - }, - "silo_id": { - "description": "Uuid of the silo to which this user belongs", - "type": "string", - "format": "uuid" - }, - "silo_name": { - "description": "Name of the silo to which this user belongs.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - }, - "required": [ - "display_name", - "fleet_viewer", - "id", - "silo_admin", - "silo_id", - "silo_name" - ] - }, - "Datum": { - "description": "A `Datum` is a single sampled data point from a metric.", - "oneOf": [ - { - "type": "object", - "properties": { - "datum": { - "type": "boolean" - }, - "type": { - "type": "string", - "enum": [ - "bool" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "int8" - }, - "type": { - "type": "string", - "enum": [ - "i8" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "u8" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "int16" - }, - "type": { - "type": "string", - "enum": [ - "i16" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "u16" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "int32" - }, - "type": { - "type": "string", - "enum": [ - "i32" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "u32" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "int64" - }, - "type": { - "type": "string", - "enum": [ - "i64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "u64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "number", - "format": "float" - }, - "type": { - "type": "string", - "enum": [ - "f32" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "number", - "format": "double" - }, - "type": { - "type": "string", - "enum": [ - "f64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "string" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "type": { - "type": "string", - "enum": [ - "bytes" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Cumulativeint64" - }, - "type": { - "type": "string", - "enum": [ - "cumulative_i64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Cumulativeuint64" - }, - "type": { - "type": "string", - "enum": [ - "cumulative_u64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Cumulativefloat" - }, - "type": { - "type": "string", - "enum": [ - "cumulative_f32" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Cumulativedouble" - }, - "type": { - "type": "string", - "enum": [ - "cumulative_f64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramint8" - }, - "type": { - "type": "string", - "enum": [ - "histogram_i8" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramuint8" - }, - "type": { - "type": "string", - "enum": [ - "histogram_u8" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramint16" - }, - "type": { - "type": "string", - "enum": [ - "histogram_i16" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramuint16" - }, - "type": { - "type": "string", - "enum": [ - "histogram_u16" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramint32" - }, - "type": { - "type": "string", - "enum": [ - "histogram_i32" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramuint32" - }, - "type": { - "type": "string", - "enum": [ - "histogram_u32" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramint64" - }, - "type": { - "type": "string", - "enum": [ - "histogram_i64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramuint64" - }, - "type": { - "type": "string", - "enum": [ - "histogram_u64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramfloat" - }, - "type": { - "type": "string", - "enum": [ - "histogram_f32" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramdouble" - }, - "type": { - "type": "string", - "enum": [ - "histogram_f64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/MissingDatum" - }, - "type": { - "type": "string", - "enum": [ - "missing" - ] - } - }, - "required": [ - "datum", - "type" - ] - } - ] - }, - "DatumType": { - "description": "The type of an individual datum of a metric.", - "type": "string", - "enum": [ - "bool", - "i8", - "u8", - "i16", - "u16", - "i32", - "u32", - "i64", - "u64", - "f32", - "f64", - "string", - "bytes", - "cumulative_i64", - "cumulative_u64", - "cumulative_f32", - "cumulative_f64", - "histogram_i8", - "histogram_u8", - "histogram_i16", - "histogram_u16", - "histogram_i32", - "histogram_u32", - "histogram_i64", - "histogram_u64", - "histogram_f32", - "histogram_f64" - ] - }, - "DerEncodedKeyPair": { - "type": "object", - "properties": { - "private_key": { - "description": "request signing RSA private key in PKCS#1 format (base64 encoded der file)", - "type": "string" - }, - "public_cert": { - "description": "request signing public certificate (base64 encoded der file)", - "type": "string" - } - }, - "required": [ - "private_key", - "public_cert" - ] - }, - "DeviceAccessToken": { - "description": "View of a device access token", - "type": "object", - "properties": { - "id": { - "description": "A unique, immutable, system-controlled identifier for the token. Note that this ID is not the bearer token itself, which starts with \"oxide-token-\"", - "type": "string", - "format": "uuid" - }, - "time_created": { - "type": "string", - "format": "date-time" - }, - "time_expires": { - "nullable": true, - "description": "Expiration timestamp. A null value means the token does not automatically expire.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "id", - "time_created" - ] - }, - "DeviceAccessTokenRequest": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "format": "uuid" - }, - "device_code": { - "type": "string" - }, - "grant_type": { - "type": "string" - } - }, - "required": [ - "client_id", - "device_code", - "grant_type" - ] - }, - "DeviceAccessTokenResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/DeviceAccessToken" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "DeviceAuthRequest": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "format": "uuid" - }, - "ttl_seconds": { - "nullable": true, - "description": "Optional lifetime for the access token in seconds.\n\nThis value will be validated during the confirmation step. If not specified, it defaults to the silo's max TTL, which can be seen at `/v1/auth-settings`. If specified, must not exceed the silo's max TTL.\n\nSome special logic applies when authenticating the confirmation request with an existing device token: the requested TTL must not produce an expiration time later than the authenticating token's expiration. If no TTL is specified, the expiration will be the lesser of the silo max and the authenticating token's expiration time. To get the longest allowed lifetime, omit the TTL and authenticate with a web console session.", - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - "required": [ - "client_id" - ] - }, - "DeviceAuthVerify": { - "type": "object", - "properties": { - "user_code": { - "type": "string" - } - }, - "required": [ - "user_code" - ] - }, - "Digest": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "sha256" - ] - }, - "value": { - "type": "string" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "Disk": { - "description": "View of a Disk", - "type": "object", - "properties": { - "block_size": { - "$ref": "#/components/schemas/ByteCount" - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "device_path": { - "type": "string" - }, - "disk_type": { - "$ref": "#/components/schemas/DiskType" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "image_id": { - "nullable": true, - "description": "ID of image from which disk was created, if any", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "project_id": { - "type": "string", - "format": "uuid" - }, - "size": { - "$ref": "#/components/schemas/ByteCount" - }, - "snapshot_id": { - "nullable": true, - "description": "ID of snapshot from which disk was created, if any", - "type": "string", - "format": "uuid" - }, - "state": { - "$ref": "#/components/schemas/DiskState" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "block_size", - "description", - "device_path", - "disk_type", - "id", - "name", - "project_id", - "size", - "state", - "time_created", - "time_modified" - ] - }, - "DiskCreate": { - "description": "Create-time parameters for a `Disk`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "disk_source": { - "description": "The initial source for this disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskSource" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "size": { - "description": "The total size of the Disk (in bytes)", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "description", - "disk_source", - "name", - "size" - ] - }, - "DiskPath": { - "type": "object", - "properties": { - "disk": { - "description": "Name or ID of the disk", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - } - }, - "required": [ - "disk" - ] - }, - "DiskResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Disk" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "DiskSource": { - "description": "Different sources for a disk", - "oneOf": [ - { - "description": "Create a blank disk", - "type": "object", - "properties": { - "block_size": { - "description": "size of blocks for this Disk. valid values are: 512, 2048, or 4096", - "allOf": [ - { - "$ref": "#/components/schemas/BlockSize" - } - ] - }, - "type": { - "type": "string", - "enum": [ - "blank" - ] - } - }, - "required": [ - "block_size", - "type" - ] - }, - { - "description": "Create a disk from a disk snapshot", - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - }, - "type": { - "type": "string", - "enum": [ - "snapshot" - ] - } - }, - "required": [ - "snapshot_id", - "type" - ] - }, - { - "description": "Create a disk from an image", - "type": "object", - "properties": { - "image_id": { - "type": "string", - "format": "uuid" - }, - "type": { - "type": "string", - "enum": [ - "image" - ] - } - }, - "required": [ - "image_id", - "type" - ] - }, - { - "description": "Create a blank disk that will accept bulk writes or pull blocks from an external source.", - "type": "object", - "properties": { - "block_size": { - "$ref": "#/components/schemas/BlockSize" - }, - "type": { - "type": "string", - "enum": [ - "importing_blocks" - ] - } - }, - "required": [ - "block_size", - "type" - ] - } - ] - }, - "DiskState": { - "description": "State of a Disk", - "oneOf": [ - { - "description": "Disk is being initialized", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "creating" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready but detached from any Instance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready to receive blocks from an external source", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "import_ready" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from a URL", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_url" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from bulk writes", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_bulk_writes" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being finalized to state Detached", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "finalizing" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is undergoing maintenance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "maintenance" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is being detached from the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "detaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk has been destroyed", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is unavailable", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskType": { - "type": "string", - "enum": [ - "crucible" - ] - }, - "Distributiondouble": { - "description": "A distribution is a sequence of bins and counts in those bins, and some statistical information tracked to compute the mean, standard deviation, and quantile estimates.\n\nMin, max, and the p-* quantiles are treated as optional due to the possibility of distribution operations, like subtraction.", - "type": "object", - "properties": { - "bins": { - "type": "array", - "items": { - "type": "number", - "format": "double" - } - }, - "counts": { - "type": "array", - "items": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "max": { - "nullable": true, - "type": "number", - "format": "double" - }, - "min": { - "nullable": true, - "type": "number", - "format": "double" - }, - "p50": { - "nullable": true, - "type": "number", - "format": "double" - }, - "p90": { - "nullable": true, - "type": "number", - "format": "double" - }, - "p99": { - "nullable": true, - "type": "number", - "format": "double" - }, - "squared_mean": { - "type": "number", - "format": "double" - }, - "sum_of_samples": { - "type": "number", - "format": "double" - } - }, - "required": [ - "bins", - "counts", - "squared_mean", - "sum_of_samples" - ] - }, - "Distributionint64": { - "description": "A distribution is a sequence of bins and counts in those bins, and some statistical information tracked to compute the mean, standard deviation, and quantile estimates.\n\nMin, max, and the p-* quantiles are treated as optional due to the possibility of distribution operations, like subtraction.", - "type": "object", - "properties": { - "bins": { - "type": "array", - "items": { - "type": "integer", - "format": "int64" - } - }, - "counts": { - "type": "array", - "items": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "max": { - "nullable": true, - "type": "integer", - "format": "int64" - }, - "min": { - "nullable": true, - "type": "integer", - "format": "int64" - }, - "p50": { - "nullable": true, - "type": "number", - "format": "double" - }, - "p90": { - "nullable": true, - "type": "number", - "format": "double" - }, - "p99": { - "nullable": true, - "type": "number", - "format": "double" - }, - "squared_mean": { - "type": "number", - "format": "double" - }, - "sum_of_samples": { - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "counts", - "squared_mean", - "sum_of_samples" - ] - }, - "EphemeralIpCreate": { - "description": "Parameters for creating an ephemeral IP address for an instance.", - "type": "object", - "properties": { - "pool": { - "nullable": true, - "description": "Name or ID of the IP pool used to allocate an address. If unspecified, the default IP pool will be used.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - } - } - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "ExternalIp": { - "oneOf": [ - { - "description": "A source NAT IP address.\n\nSNAT addresses are ephemeral addresses used only for outbound connectivity.", - "type": "object", - "properties": { - "first_port": { - "description": "The first usable port within the IP address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The IP address.", - "type": "string", - "format": "ip" - }, - "ip_pool_id": { - "description": "ID of the IP Pool from which the address is taken.", - "type": "string", - "format": "uuid" - }, - "kind": { - "type": "string", - "enum": [ - "snat" - ] - }, - "last_port": { - "description": "The last usable port within the IP address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "ip_pool_id", - "kind", - "last_port" - ] - }, - { - "type": "object", - "properties": { - "ip": { - "type": "string", - "format": "ip" - }, - "ip_pool_id": { - "type": "string", - "format": "uuid" - }, - "kind": { - "type": "string", - "enum": [ - "ephemeral" - ] - } - }, - "required": [ - "ip", - "ip_pool_id", - "kind" - ] - }, - { - "description": "A Floating IP is a well-known IP address which can be attached and detached from instances.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "instance_id": { - "nullable": true, - "description": "The ID of the instance that this Floating IP is attached to, if it is presently in use.", - "type": "string", - "format": "uuid" - }, - "ip": { - "description": "The IP address held by this resource.", - "type": "string", - "format": "ip" - }, - "ip_pool_id": { - "description": "The ID of the IP pool this resource belongs to.", - "type": "string", - "format": "uuid" - }, - "kind": { - "type": "string", - "enum": [ - "floating" - ] - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "project_id": { - "description": "The project this resource exists within.", - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "ip", - "ip_pool_id", - "kind", - "name", - "project_id", - "time_created", - "time_modified" - ] - } - ] - }, - "ExternalIpCreate": { - "description": "Parameters for creating an external IP address for instances.", - "oneOf": [ - { - "description": "An IP address providing both inbound and outbound access. The address is automatically assigned from the provided IP pool or the default IP pool if not specified.", - "type": "object", - "properties": { - "pool": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "type": { - "type": "string", - "enum": [ - "ephemeral" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "An IP address providing both inbound and outbound access. The address is an existing floating IP object assigned to the current project.\n\nThe floating IP must not be in use by another instance or service.", - "type": "object", - "properties": { - "floating_ip": { - "$ref": "#/components/schemas/NameOrId" - }, - "type": { - "type": "string", - "enum": [ - "floating" - ] - } - }, - "required": [ - "floating_ip", - "type" - ] - } - ] - }, - "ExternalIpResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalIp" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "FailureDomain": { - "description": "Describes the scope of affinity for the purposes of co-location.", - "oneOf": [ - { - "description": "Instances are considered co-located if they are on the same sled", - "type": "string", - "enum": [ - "sled" - ] - } - ] - }, - "FieldSchema": { - "description": "The name and type information for a field of a timeseries schema.", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "field_type": { - "$ref": "#/components/schemas/FieldType" - }, - "name": { - "type": "string" - }, - "source": { - "$ref": "#/components/schemas/FieldSource" - } - }, - "required": [ - "description", - "field_type", - "name", - "source" - ] - }, - "FieldSource": { - "description": "The source from which a field is derived, the target or metric.", - "type": "string", - "enum": [ - "target", - "metric" - ] - }, - "FieldType": { - "description": "The `FieldType` identifies the data type of a target or metric field.", - "type": "string", - "enum": [ - "string", - "i8", - "u8", - "i16", - "u16", - "i32", - "u32", - "i64", - "u64", - "ip_addr", - "uuid", - "bool" - ] - }, - "FieldValue": { - "description": "The `FieldValue` contains the value of a target or metric field.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "string" - ] - }, - "value": { - "type": "string" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i8" - ] - }, - "value": { - "type": "integer", - "format": "int8" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "u8" - ] - }, - "value": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i16" - ] - }, - "value": { - "type": "integer", - "format": "int16" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "u16" - ] - }, - "value": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i32" - ] - }, - "value": { - "type": "integer", - "format": "int32" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "u32" - ] - }, - "value": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i64" - ] - }, - "value": { - "type": "integer", - "format": "int64" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "u64" - ] - }, - "value": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip_addr" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "uuid" - ] - }, - "value": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bool" - ] - }, - "value": { - "type": "boolean" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "FinalizeDisk": { - "description": "Parameters for finalizing a disk", - "type": "object", - "properties": { - "snapshot_name": { - "nullable": true, - "description": "If specified a snapshot of the disk will be created with the given name during finalization. If not specified, a snapshot for the disk will _not_ be created. A snapshot can be manually created once the disk transitions into the `Detached` state.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "FleetRole": { - "type": "string", - "enum": [ - "admin", - "collaborator", - "viewer" - ] - }, - "FleetRolePolicy": { - "description": "Policy for a particular resource\n\nNote that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource.", - "type": "object", - "properties": { - "role_assignments": { - "description": "Roles directly assigned on this resource", - "type": "array", - "items": { - "$ref": "#/components/schemas/FleetRoleRoleAssignment" - } - } - }, - "required": [ - "role_assignments" - ] - }, - "FleetRoleRoleAssignment": { - "description": "Describes the assignment of a particular role on a particular resource to a particular identity (user, group, etc.)\n\nThe resource is not part of this structure. Rather, `RoleAssignment`s are put into a `Policy` and that Policy is applied to a particular resource.", - "type": "object", - "properties": { - "identity_id": { - "type": "string", - "format": "uuid" - }, - "identity_type": { - "$ref": "#/components/schemas/IdentityType" - }, - "role_name": { - "$ref": "#/components/schemas/FleetRole" - } - }, - "required": [ - "identity_id", - "identity_type", - "role_name" - ] - }, - "FloatingIp": { - "description": "A Floating IP is a well-known IP address which can be attached and detached from instances.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "instance_id": { - "nullable": true, - "description": "The ID of the instance that this Floating IP is attached to, if it is presently in use.", - "type": "string", - "format": "uuid" - }, - "ip": { - "description": "The IP address held by this resource.", - "type": "string", - "format": "ip" - }, - "ip_pool_id": { - "description": "The ID of the IP pool this resource belongs to.", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "project_id": { - "description": "The project this resource exists within.", - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "ip", - "ip_pool_id", - "name", - "project_id", - "time_created", - "time_modified" - ] - }, - "FloatingIpAttach": { - "description": "Parameters for attaching a floating IP address to another resource", - "type": "object", - "properties": { - "kind": { - "description": "The type of `parent`'s resource", - "allOf": [ - { - "$ref": "#/components/schemas/FloatingIpParentKind" - } - ] - }, - "parent": { - "description": "Name or ID of the resource that this IP address should be attached to", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - } - }, - "required": [ - "kind", - "parent" - ] - }, - "FloatingIpCreate": { - "description": "Parameters for creating a new floating IP address for instances.", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "ip": { - "nullable": true, - "description": "An IP address to reserve for use as a floating IP. This field is optional: when not set, an address will be automatically chosen from `pool`. If set, then the IP must be available in the resolved `pool`.", - "type": "string", - "format": "ip" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "pool": { - "nullable": true, - "description": "The parent IP pool that a floating IP is pulled from. If unset, the default pool is selected.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - } - }, - "required": [ - "description", - "name" - ] - }, - "FloatingIpParentKind": { - "description": "The type of resource that a floating IP is attached to", - "type": "string", - "enum": [ - "instance" - ] - }, - "FloatingIpResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/FloatingIp" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "FloatingIpUpdate": { - "description": "Updateable identity-related parameters", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "Group": { - "description": "View of a Group", - "type": "object", - "properties": { - "display_name": { - "description": "Human-readable name that can identify the group", - "type": "string" - }, - "id": { - "type": "string", - "format": "uuid" - }, - "silo_id": { - "description": "Uuid of the silo to which this group belongs", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "display_name", - "id", - "silo_id" - ] - }, - "GroupResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Group" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "Histogramdouble": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Bindouble" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "number", - "format": "double" - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "number", - "format": "double" - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "number", - "format": "double" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramfloat": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binfloat" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "number", - "format": "float" - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "number", - "format": "float" - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "number", - "format": "double" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramint16": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binint16" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "int16" - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "int16" - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramint32": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binint32" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "int32" - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "int32" - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramint64": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binint64" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "int64" - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "int64" - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramint8": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binint8" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "int8" - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "int8" - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramuint16": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binuint16" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramuint32": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binuint32" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramuint64": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binuint64" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramuint8": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binuint8" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Hostname": { - "title": "An RFC-1035-compliant hostname", - "description": "A hostname identifies a host on a network, and is usually a dot-delimited sequence of labels, where each label contains only letters, digits, or the hyphen. See RFCs 1035 and 952 for more details.", - "type": "string", - "pattern": "^([a-zA-Z0-9]+[a-zA-Z0-9\\-]*(? 2**53 addresses), integer precision will be lost, in exchange for representing the entire range. In such a case the pool still has many available addresses.", - "type": "object", - "properties": { - "capacity": { - "description": "The total number of addresses in the pool.", - "type": "number", - "format": "double" - }, - "remaining": { - "description": "The number of remaining addresses in the pool.", - "type": "number", - "format": "double" - } - }, - "required": [ - "capacity", - "remaining" - ] - }, - "IpRange": { - "oneOf": [ - { - "title": "v4", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv4Range" - } - ] - }, - { - "title": "v6", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Range" - } - ] - } - ] - }, - "IpVersion": { - "description": "The IP address version.", - "type": "string", - "enum": [ - "v4", - "v6" - ] - }, - "Ipv4Net": { - "example": "192.168.1.0/24", - "title": "An IPv4 subnet", - "description": "An IPv4 subnet, including prefix and prefix length", - "x-rust-type": { - "crate": "oxnet", - "path": "oxnet::Ipv4Net", - "version": "0.1.0" - }, - "type": "string", - "pattern": "^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|1[0-9]|2[0-9]|3[0-2])$" - }, - "Ipv4Range": { - "description": "A non-decreasing IPv4 address range, inclusive of both ends.\n\nThe first address must be less than or equal to the last address.", - "type": "object", - "properties": { - "first": { - "type": "string", - "format": "ipv4" - }, - "last": { - "type": "string", - "format": "ipv4" - } - }, - "required": [ - "first", - "last" - ] - }, - "Ipv6Net": { - "example": "fd12:3456::/64", - "title": "An IPv6 subnet", - "description": "An IPv6 subnet, including prefix and subnet mask", - "x-rust-type": { - "crate": "oxnet", - "path": "oxnet::Ipv6Net", - "version": "0.1.0" - }, - "type": "string", - "pattern": "^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])$" - }, - "Ipv6Range": { - "description": "A non-decreasing IPv6 address range, inclusive of both ends.\n\nThe first address must be less than or equal to the last address.", - "type": "object", - "properties": { - "first": { - "type": "string", - "format": "ipv6" - }, - "last": { - "type": "string", - "format": "ipv6" - } - }, - "required": [ - "first", - "last" - ] - }, - "L4PortRange": { - "example": "22", - "title": "A range of IP ports", - "description": "An inclusive-inclusive range of IP ports. The second port may be omitted to represent a single port.", - "type": "string", - "pattern": "^[0-9]{1,5}(-[0-9]{1,5})?$", - "minLength": 1, - "maxLength": 11 - }, - "LinkConfigCreate": { - "description": "Switch link configuration.", - "type": "object", - "properties": { - "autoneg": { - "description": "Whether or not to set autonegotiation.", - "type": "boolean" - }, - "fec": { - "nullable": true, - "description": "The requested forward-error correction method. If this is not specified, the standard FEC for the underlying media will be applied if it can be determined.", - "allOf": [ - { - "$ref": "#/components/schemas/LinkFec" - } - ] - }, - "link_name": { - "description": "Link name. On ports that are not broken out, this is always phy0. On a 2x breakout the options are phy0 and phy1, on 4x phy0-phy3, etc.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "lldp": { - "description": "The link-layer discovery protocol (LLDP) configuration for the link.", - "allOf": [ - { - "$ref": "#/components/schemas/LldpLinkConfigCreate" - } - ] - }, - "mtu": { - "description": "Maximum transmission unit for the link.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "speed": { - "description": "The speed of the link.", - "allOf": [ - { - "$ref": "#/components/schemas/LinkSpeed" - } - ] - }, - "tx_eq": { - "nullable": true, - "description": "Optional tx_eq settings.", - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - } - }, - "required": [ - "autoneg", - "link_name", - "lldp", - "mtu", - "speed" - ] - }, - "LinkFec": { - "description": "The forward error correction mode of a link.", - "oneOf": [ - { - "description": "Firecode forward error correction.", - "type": "string", - "enum": [ - "firecode" - ] - }, - { - "description": "No forward error correction.", - "type": "string", - "enum": [ - "none" - ] - }, - { - "description": "Reed-Solomon forward error correction.", - "type": "string", - "enum": [ - "rs" - ] - } - ] - }, - "LinkSpeed": { - "description": "The speed of a link.", - "oneOf": [ - { - "description": "Zero gigabits per second.", - "type": "string", - "enum": [ - "speed0_g" - ] - }, - { - "description": "1 gigabit per second.", - "type": "string", - "enum": [ - "speed1_g" - ] - }, - { - "description": "10 gigabits per second.", - "type": "string", - "enum": [ - "speed10_g" - ] - }, - { - "description": "25 gigabits per second.", - "type": "string", - "enum": [ - "speed25_g" - ] - }, - { - "description": "40 gigabits per second.", - "type": "string", - "enum": [ - "speed40_g" - ] - }, - { - "description": "50 gigabits per second.", - "type": "string", - "enum": [ - "speed50_g" - ] - }, - { - "description": "100 gigabits per second.", - "type": "string", - "enum": [ - "speed100_g" - ] - }, - { - "description": "200 gigabits per second.", - "type": "string", - "enum": [ - "speed200_g" - ] - }, - { - "description": "400 gigabits per second.", - "type": "string", - "enum": [ - "speed400_g" - ] - } - ] - }, - "LldpLinkConfig": { - "description": "A link layer discovery protocol (LLDP) service configuration.", - "type": "object", - "properties": { - "chassis_id": { - "nullable": true, - "description": "The LLDP chassis identifier TLV.", - "type": "string" - }, - "enabled": { - "description": "Whether or not the LLDP service is enabled.", - "type": "boolean" - }, - "id": { - "description": "The id of this LLDP service instance.", - "type": "string", - "format": "uuid" - }, - "link_description": { - "nullable": true, - "description": "The LLDP link description TLV.", - "type": "string" - }, - "link_name": { - "nullable": true, - "description": "The LLDP link name TLV.", - "type": "string" - }, - "management_ip": { - "nullable": true, - "description": "The LLDP management IP TLV.", - "type": "string", - "format": "ip" - }, - "system_description": { - "nullable": true, - "description": "The LLDP system description TLV.", - "type": "string" - }, - "system_name": { - "nullable": true, - "description": "The LLDP system name TLV.", - "type": "string" - } - }, - "required": [ - "enabled", - "id" - ] - }, - "LldpLinkConfigCreate": { - "description": "The LLDP configuration associated with a port.", - "type": "object", - "properties": { - "chassis_id": { - "nullable": true, - "description": "The LLDP chassis identifier TLV.", - "type": "string" - }, - "enabled": { - "description": "Whether or not LLDP is enabled.", - "type": "boolean" - }, - "link_description": { - "nullable": true, - "description": "The LLDP link description TLV.", - "type": "string" - }, - "link_name": { - "nullable": true, - "description": "The LLDP link name TLV.", - "type": "string" - }, - "management_ip": { - "nullable": true, - "description": "The LLDP management IP TLV.", - "type": "string", - "format": "ip" - }, - "system_description": { - "nullable": true, - "description": "The LLDP system description TLV.", - "type": "string" - }, - "system_name": { - "nullable": true, - "description": "The LLDP system name TLV.", - "type": "string" - } - }, - "required": [ - "enabled" - ] - }, - "LldpNeighbor": { - "description": "Information about LLDP advertisements from other network entities directly connected to a switch port. This structure contains both metadata about when and where the neighbor was seen, as well as the specific information the neighbor was advertising.", - "type": "object", - "properties": { - "chassis_id": { - "description": "The LLDP chassis identifier advertised by the neighbor", - "type": "string" - }, - "first_seen": { - "description": "Initial sighting of this LldpNeighbor", - "type": "string", - "format": "date-time" - }, - "last_seen": { - "description": "Most recent sighting of this LldpNeighbor", - "type": "string", - "format": "date-time" - }, - "link_description": { - "nullable": true, - "description": "The LLDP link description advertised by the neighbor", - "type": "string" - }, - "link_name": { - "description": "The LLDP link name advertised by the neighbor", - "type": "string" - }, - "local_port": { - "description": "The port on which the neighbor was seen", - "type": "string" - }, - "management_ip": { - "description": "The LLDP management IP(s) advertised by the neighbor", - "type": "array", - "items": { - "$ref": "#/components/schemas/ManagementAddress" - } - }, - "system_description": { - "nullable": true, - "description": "The LLDP system description advertised by the neighbor", - "type": "string" - }, - "system_name": { - "nullable": true, - "description": "The LLDP system name advertised by the neighbor", - "type": "string" - } - }, - "required": [ - "chassis_id", - "first_seen", - "last_seen", - "link_name", - "local_port", - "management_ip" - ] - }, - "LldpNeighborResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/LldpNeighbor" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "LoopbackAddress": { - "description": "A loopback address is an address that is assigned to a rack switch but is not associated with any particular port.", - "type": "object", - "properties": { - "address": { - "description": "The loopback IP address and prefix length.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "address_lot_block_id": { - "description": "The address lot block this address came from.", - "type": "string", - "format": "uuid" - }, - "id": { - "description": "The id of the loopback address.", - "type": "string", - "format": "uuid" - }, - "rack_id": { - "description": "The id of the rack where this loopback address is assigned.", - "type": "string", - "format": "uuid" - }, - "switch_location": { - "description": "Switch location where this loopback address is assigned.", - "type": "string" - } - }, - "required": [ - "address", - "address_lot_block_id", - "id", - "rack_id", - "switch_location" - ] - }, - "LoopbackAddressCreate": { - "description": "Parameters for creating a loopback address on a particular rack switch.", - "type": "object", - "properties": { - "address": { - "description": "The address to create.", - "type": "string", - "format": "ip" - }, - "address_lot": { - "description": "The name or id of the address lot this loopback address will pull an address from.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "anycast": { - "description": "Address is an anycast address. This allows the address to be assigned to multiple locations simultaneously.", - "type": "boolean" - }, - "mask": { - "description": "The subnet mask to use for the address.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "rack_id": { - "description": "The rack containing the switch this loopback address will be configured on.", - "type": "string", - "format": "uuid" - }, - "switch_location": { - "description": "The location of the switch within the rack this loopback address will be configured on.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - }, - "required": [ - "address", - "address_lot", - "anycast", - "mask", - "rack_id", - "switch_location" - ] - }, - "LoopbackAddressResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/LoopbackAddress" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "MacAddr": { - "example": "ff:ff:ff:ff:ff:ff", - "title": "A MAC address", - "description": "A Media Access Control address, in EUI-48 format", - "type": "string", - "pattern": "^([0-9a-fA-F]{0,2}:){5}[0-9a-fA-F]{0,2}$", - "minLength": 5, - "maxLength": 17 - }, - "ManagementAddress": { - "type": "object", - "properties": { - "addr": { - "$ref": "#/components/schemas/NetworkAddress" - }, - "interface_num": { - "$ref": "#/components/schemas/InterfaceNum" - }, - "oid": { - "nullable": true, - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "required": [ - "addr", - "interface_num" - ] - }, - "Measurement": { - "description": "A `Measurement` is a timestamped datum from a single metric", - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Datum" - }, - "timestamp": { - "type": "string", - "format": "date-time" - } - }, - "required": [ - "datum", - "timestamp" - ] - }, - "MeasurementResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Measurement" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "MetricType": { - "description": "The type of the metric itself, indicating what its values represent.", - "oneOf": [ - { - "description": "The value represents an instantaneous measurement in time.", - "type": "string", - "enum": [ - "gauge" - ] - }, - { - "description": "The value represents a difference between two points in time.", - "type": "string", - "enum": [ - "delta" - ] - }, - { - "description": "The value represents an accumulation between two points in time.", - "type": "string", - "enum": [ - "cumulative" - ] - } - ] - }, - "MissingDatum": { - "type": "object", - "properties": { - "datum_type": { - "$ref": "#/components/schemas/DatumType" - }, - "start_time": { - "nullable": true, - "type": "string", - "format": "date-time" - } - }, - "required": [ - "datum_type" - ] - }, - "MulticastGroup": { - "description": "View of a Multicast Group", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "ip_pool_id": { - "description": "The ID of the IP pool this resource belongs to.", - "type": "string", - "format": "uuid" - }, - "multicast_ip": { - "description": "The multicast IP address held by this resource.", - "type": "string", - "format": "ip" - }, - "mvlan": { - "nullable": true, - "description": "Multicast VLAN (MVLAN) for egress multicast traffic to upstream networks. None means no VLAN tagging on egress.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "source_ips": { - "description": "Source IP addresses for Source-Specific Multicast (SSM). Empty array means any source is allowed.", - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - }, - "state": { - "description": "Current state of the multicast group.", - "type": "string" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "ip_pool_id", - "multicast_ip", - "name", - "source_ips", - "state", - "time_created", - "time_modified" - ] - }, - "MulticastGroupCreate": { - "description": "Create-time parameters for a multicast group.", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "multicast_ip": { - "nullable": true, - "description": "The multicast IP address to allocate. If None, one will be allocated from the default pool.", - "default": null, - "type": "string", - "format": "ip" - }, - "mvlan": { - "nullable": true, - "description": "Multicast VLAN (MVLAN) for egress multicast traffic to upstream networks. Tags packets leaving the rack to traverse VLAN-segmented upstream networks.\n\nValid range: 2-4094 (VLAN IDs 0-1 are reserved by IEEE 802.1Q standard).", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "pool": { - "nullable": true, - "description": "Name or ID of the IP pool to allocate from. If None, uses the default multicast pool.", - "default": null, - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "source_ips": { - "nullable": true, - "description": "Source IP addresses for Source-Specific Multicast (SSM).\n\nNone uses default behavior (Any-Source Multicast). Empty list explicitly allows any source (Any-Source Multicast). Non-empty list restricts to specific sources (SSM).", - "default": null, - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - } - }, - "required": [ - "description", - "name" - ] - }, - "MulticastGroupMember": { - "description": "View of a Multicast Group Member (instance belonging to a multicast group)", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "instance_id": { - "description": "The ID of the instance that is a member of this group.", - "type": "string", - "format": "uuid" - }, - "multicast_group_id": { - "description": "The ID of the multicast group this member belongs to.", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "state": { - "description": "Current state of the multicast group membership.", - "type": "string" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "instance_id", - "multicast_group_id", - "name", - "state", - "time_created", - "time_modified" - ] - }, - "MulticastGroupMemberAdd": { - "description": "Parameters for adding an instance to a multicast group.", - "type": "object", - "properties": { - "instance": { - "description": "Name or ID of the instance to add to the multicast group", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - } - }, - "required": [ - "instance" - ] - }, - "MulticastGroupMemberResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/MulticastGroupMember" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "MulticastGroupResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/MulticastGroup" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "MulticastGroupUpdate": { - "description": "Update-time parameters for a multicast group.", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "mvlan": { - "nullable": true, - "description": "Multicast VLAN (MVLAN) for egress multicast traffic to upstream networks. Set to null to clear the MVLAN. Valid range: 2-4094 when provided. Omit the field to leave mvlan unchanged.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "source_ips": { - "nullable": true, - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - } - } - }, - "Name": { - "title": "A name unique within the parent collection", - "description": "Names must begin with a lower case ASCII letter, be composed exclusively of lowercase ASCII, uppercase ASCII, numbers, and '-', and may not end with a '-'. Names cannot be a UUID, but they may contain a UUID. They can be at most 63 characters long.", - "type": "string", - "pattern": "^(?![0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$)^[a-z]([a-zA-Z0-9-]*[a-zA-Z0-9]+)?$", - "minLength": 1, - "maxLength": 63 - }, - "NameOrId": { - "oneOf": [ - { - "title": "id", - "allOf": [ - { - "type": "string", - "format": "uuid" - } - ] - }, - { - "title": "name", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - ] - }, - "NetworkAddress": { - "oneOf": [ - { - "type": "object", - "properties": { - "ip_addr": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "ip_addr" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "i_e_e_e802": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "required": [ - "i_e_e_e802" - ], - "additionalProperties": false - } - ] - }, - "NetworkInterface": { - "description": "Information required to construct a virtual network interface", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "ip": { - "type": "string", - "format": "ip" - }, - "kind": { - "$ref": "#/components/schemas/NetworkInterfaceKind" - }, - "mac": { - "$ref": "#/components/schemas/MacAddr" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "primary": { - "type": "boolean" - }, - "slot": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "subnet": { - "$ref": "#/components/schemas/IpNet" - }, - "transit_ips": { - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/IpNet" - } - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "id", - "ip", - "kind", - "mac", - "name", - "primary", - "slot", - "subnet", - "vni" - ] - }, - "NetworkInterfaceKind": { - "description": "The type of network interface", - "oneOf": [ - { - "description": "A vNIC attached to a guest instance", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "type": { - "type": "string", - "enum": [ - "instance" - ] - } - }, - "required": [ - "id", - "type" - ] - }, - { - "description": "A vNIC associated with an internal service", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "type": { - "type": "string", - "enum": [ - "service" - ] - } - }, - "required": [ - "id", - "type" - ] - }, - { - "description": "A vNIC associated with a probe", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "type": { - "type": "string", - "enum": [ - "probe" - ] - } - }, - "required": [ - "id", - "type" - ] - } - ] - }, - "OxqlQueryResult": { - "description": "The result of a successful OxQL query.", - "type": "object", - "properties": { - "tables": { - "description": "Tables resulting from the query, each containing timeseries.", - "type": "array", - "items": { - "$ref": "#/components/schemas/OxqlTable" - } - } - }, - "required": [ - "tables" - ] - }, - "OxqlTable": { - "description": "A table represents one or more timeseries with the same schema.\n\nA table is the result of an OxQL query. It contains a name, usually the name of the timeseries schema from which the data is derived, and any number of timeseries, which contain the actual data.", - "type": "object", - "properties": { - "name": { - "description": "The name of the table.", - "type": "string" - }, - "timeseries": { - "description": "The set of timeseries in the table, ordered by key.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Timeseries" - } - } - }, - "required": [ - "name", - "timeseries" - ] - }, - "Password": { - "title": "A password used to authenticate a user", - "description": "Passwords may be subject to additional constraints.", - "type": "string", - "maxLength": 512 - }, - "PhysicalDisk": { - "description": "View of a Physical Disk\n\nPhysical disks reside in a particular sled and are used to store both Instance Disk data as well as internal metadata.", - "type": "object", - "properties": { - "form_factor": { - "$ref": "#/components/schemas/PhysicalDiskKind" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "model": { - "type": "string" - }, - "policy": { - "description": "The operator-defined policy for a physical disk.", - "allOf": [ - { - "$ref": "#/components/schemas/PhysicalDiskPolicy" - } - ] - }, - "serial": { - "type": "string" - }, - "sled_id": { - "nullable": true, - "description": "The sled to which this disk is attached, if any.", - "type": "string", - "format": "uuid" - }, - "state": { - "description": "The current state Nexus believes the disk to be in.", - "allOf": [ - { - "$ref": "#/components/schemas/PhysicalDiskState" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "vendor": { - "type": "string" - } - }, - "required": [ - "form_factor", - "id", - "model", - "policy", - "serial", - "state", - "time_created", - "time_modified", - "vendor" - ] - }, - "PhysicalDiskKind": { - "description": "Describes the form factor of physical disks.", - "type": "string", - "enum": [ - "m2", - "u2" - ] - }, - "PhysicalDiskPolicy": { - "description": "The operator-defined policy of a physical disk.", - "oneOf": [ - { - "description": "The operator has indicated that the disk is in-service.", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "in_service" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "description": "The operator has indicated that the disk has been permanently removed from service.\n\nThis is a terminal state: once a particular disk ID is expunged, it will never return to service. (The actual hardware may be reused, but it will be treated as a brand-new disk.)\n\nAn expunged disk is always non-provisionable.", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "expunged" - ] - } - }, - "required": [ - "kind" - ] - } - ] - }, - "PhysicalDiskResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/PhysicalDisk" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "PhysicalDiskState": { - "description": "The current state of the disk, as determined by Nexus.", - "oneOf": [ - { - "description": "The disk is currently active, and has resources allocated on it.", - "type": "string", - "enum": [ - "active" - ] - }, - { - "description": "The disk has been permanently removed from service.\n\nThis is a terminal state: once a particular disk ID is decommissioned, it will never return to service. (The actual hardware may be reused, but it will be treated as a brand-new disk.)", - "type": "string", - "enum": [ - "decommissioned" - ] - } - ] - }, - "Ping": { - "type": "object", - "properties": { - "status": { - "description": "Whether the external API is reachable. Will always be Ok if the endpoint returns anything at all.", - "allOf": [ - { - "$ref": "#/components/schemas/PingStatus" - } - ] - } - }, - "required": [ - "status" - ] - }, - "PingStatus": { - "type": "string", - "enum": [ - "ok" - ] - }, - "Points": { - "description": "Timepoints and values for one timeseries.", - "type": "object", - "properties": { - "start_times": { - "nullable": true, - "type": "array", - "items": { - "type": "string", - "format": "date-time" - } - }, - "timestamps": { - "type": "array", - "items": { - "type": "string", - "format": "date-time" - } - }, - "values": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Values" - } - } - }, - "required": [ - "timestamps", - "values" - ] - }, - "Probe": { - "description": "Identity-related metadata that's included in nearly all public API objects", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "sled": { - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "name", - "sled", - "time_created", - "time_modified" - ] - }, - "ProbeCreate": { - "description": "Create time parameters for probes.", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "ip_pool": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "sled": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "description", - "name", - "sled" - ] - }, - "ProbeExternalIp": { - "type": "object", - "properties": { - "first_port": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "type": "string", - "format": "ip" - }, - "kind": { - "$ref": "#/components/schemas/ProbeExternalIpKind" - }, - "last_port": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "kind", - "last_port" - ] - }, - "ProbeExternalIpKind": { - "type": "string", - "enum": [ - "snat", - "floating", - "ephemeral" - ] - }, - "ProbeInfo": { - "type": "object", - "properties": { - "external_ips": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProbeExternalIp" - } - }, - "id": { - "type": "string", - "format": "uuid" - }, - "interface": { - "$ref": "#/components/schemas/NetworkInterface" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "sled": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "external_ips", - "id", - "interface", - "name", - "sled" - ] - }, - "ProbeInfoResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/ProbeInfo" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "Project": { - "description": "View of a Project", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "name", - "time_created", - "time_modified" - ] - }, - "ProjectCreate": { - "description": "Create-time parameters for a `Project`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "description", - "name" - ] - }, - "ProjectResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Project" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "ProjectRole": { - "type": "string", - "enum": [ - "admin", - "collaborator", - "limited_collaborator", - "viewer" - ] - }, - "ProjectRolePolicy": { - "description": "Policy for a particular resource\n\nNote that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource.", - "type": "object", - "properties": { - "role_assignments": { - "description": "Roles directly assigned on this resource", - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectRoleRoleAssignment" - } - } - }, - "required": [ - "role_assignments" - ] - }, - "ProjectRoleRoleAssignment": { - "description": "Describes the assignment of a particular role on a particular resource to a particular identity (user, group, etc.)\n\nThe resource is not part of this structure. Rather, `RoleAssignment`s are put into a `Policy` and that Policy is applied to a particular resource.", - "type": "object", - "properties": { - "identity_id": { - "type": "string", - "format": "uuid" - }, - "identity_type": { - "$ref": "#/components/schemas/IdentityType" - }, - "role_name": { - "$ref": "#/components/schemas/ProjectRole" - } - }, - "required": [ - "identity_id", - "identity_type", - "role_name" - ] - }, - "ProjectUpdate": { - "description": "Updateable properties of a `Project`", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "Quantile": { - "description": "Structure for estimating the p-quantile of a population.\n\nThis is based on the P² algorithm for estimating quantiles using constant space.\n\nThe algorithm consists of maintaining five markers: the minimum, the p/2-, p-, and (1 + p)/2 quantiles, and the maximum.", - "type": "object", - "properties": { - "desired_marker_positions": { - "description": "The desired marker positions.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "minItems": 5, - "maxItems": 5 - }, - "marker_heights": { - "description": "The heights of the markers.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "minItems": 5, - "maxItems": 5 - }, - "marker_positions": { - "description": "The positions of the markers.\n\nWe track sample size in the 5th position, as useful observations won't start until we've filled the heights at the 6th sample anyway This does deviate from the paper, but it's a more useful representation that works according to the paper's algorithm.", - "type": "array", - "items": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "minItems": 5, - "maxItems": 5 - }, - "p": { - "description": "The p value for the quantile.", - "type": "number", - "format": "double" - } - }, - "required": [ - "desired_marker_positions", - "marker_heights", - "marker_positions", - "p" - ] - }, - "Rack": { - "description": "View of an Rack", - "type": "object", - "properties": { - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "id", - "time_created", - "time_modified" - ] - }, - "RackResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Rack" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "Route": { - "description": "A route to a destination network through a gateway address.", - "type": "object", - "properties": { - "dst": { - "description": "The route destination.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "gw": { - "description": "The route gateway.", - "type": "string", - "format": "ip" - }, - "rib_priority": { - "nullable": true, - "description": "Route RIB priority. Higher priority indicates precedence within and across protocols.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "vid": { - "nullable": true, - "description": "VLAN id the gateway is reachable over.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "dst", - "gw" - ] - }, - "RouteConfig": { - "description": "Route configuration data associated with a switch port configuration.", - "type": "object", - "properties": { - "link_name": { - "description": "Link name. On ports that are not broken out, this is always phy0. On a 2x breakout the options are phy0 and phy1, on 4x phy0-phy3, etc.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "routes": { - "description": "The set of routes assigned to a switch port.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Route" - } - } - }, - "required": [ - "link_name", - "routes" - ] - }, - "RouteDestination": { - "description": "A `RouteDestination` is used to match traffic with a routing rule based on the destination of that traffic.\n\nWhen traffic is to be sent to a destination that is within a given `RouteDestination`, the corresponding `RouterRoute` applies, and traffic will be forward to the `RouteTarget` for that rule.", - "oneOf": [ - { - "description": "Route applies to traffic destined for the specified IP address", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Route applies to traffic destined for the specified IP subnet", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip_net" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Route applies to traffic destined for the specified VPC", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Route applies to traffic destined for the specified VPC subnet", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "RouteTarget": { - "description": "A `RouteTarget` describes the possible locations that traffic matching a route destination can be sent.", - "oneOf": [ - { - "description": "Forward traffic to a particular IP address.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Forward traffic to a VPC", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Forward traffic to a VPC Subnet", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Forward traffic to a specific instance", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "instance" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Forward traffic to an internet gateway", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "internet_gateway" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Drop matching traffic", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "drop" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "RouterRoute": { - "description": "A route defines a rule that governs where traffic should be sent based on its destination.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "destination": { - "description": "Selects which traffic this routing rule will apply to", - "allOf": [ - { - "$ref": "#/components/schemas/RouteDestination" - } - ] - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "kind": { - "description": "Describes the kind of router. Set at creation. `read-only`", - "allOf": [ - { - "$ref": "#/components/schemas/RouterRouteKind" - } - ] - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "target": { - "description": "The location that matched packets should be forwarded to", - "allOf": [ - { - "$ref": "#/components/schemas/RouteTarget" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "vpc_router_id": { - "description": "The ID of the VPC Router to which the route belongs", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "description", - "destination", - "id", - "kind", - "name", - "target", - "time_created", - "time_modified", - "vpc_router_id" - ] - }, - "RouterRouteCreate": { - "description": "Create-time parameters for a `RouterRoute`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "destination": { - "description": "Selects which traffic this routing rule will apply to.", - "allOf": [ - { - "$ref": "#/components/schemas/RouteDestination" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "target": { - "description": "The location that matched packets should be forwarded to.", - "allOf": [ - { - "$ref": "#/components/schemas/RouteTarget" - } - ] - } - }, - "required": [ - "description", - "destination", - "name", - "target" - ] - }, - "RouterRouteKind": { - "description": "The kind of a `RouterRoute`\n\nThe kind determines certain attributes such as if the route is modifiable and describes how or where the route was created.", - "oneOf": [ - { - "description": "Determines the default destination of traffic, such as whether it goes to the internet or not.\n\n`Destination: An Internet Gateway` `Modifiable: true`", - "type": "string", - "enum": [ - "default" - ] - }, - { - "description": "Automatically added for each VPC Subnet in the VPC\n\n`Destination: A VPC Subnet` `Modifiable: false`", - "type": "string", - "enum": [ - "vpc_subnet" - ] - }, - { - "description": "Automatically added when VPC peering is established\n\n`Destination: A different VPC` `Modifiable: false`", - "type": "string", - "enum": [ - "vpc_peering" - ] - }, - { - "description": "Created by a user; see `RouteTarget`\n\n`Destination: User defined` `Modifiable: true`", - "type": "string", - "enum": [ - "custom" - ] - } - ] - }, - "RouterRouteResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/RouterRoute" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "RouterRouteUpdate": { - "description": "Updateable properties of a `RouterRoute`", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "destination": { - "description": "Selects which traffic this routing rule will apply to.", - "allOf": [ - { - "$ref": "#/components/schemas/RouteDestination" - } - ] - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "target": { - "description": "The location that matched packets should be forwarded to.", - "allOf": [ - { - "$ref": "#/components/schemas/RouteTarget" - } - ] - } - }, - "required": [ - "destination", - "target" - ] - }, - "SamlIdentityProvider": { - "description": "Identity-related metadata that's included in nearly all public API objects", - "type": "object", - "properties": { - "acs_url": { - "description": "Service provider endpoint where the response will be sent", - "type": "string" - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "group_attribute_name": { - "nullable": true, - "description": "If set, attributes with this name will be considered to denote a user's group membership, where the values will be the group names.", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "idp_entity_id": { - "description": "IdP's entity id", - "type": "string" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "public_cert": { - "nullable": true, - "description": "Optional request signing public certificate (base64 encoded der file)", - "type": "string" - }, - "slo_url": { - "description": "Service provider endpoint where the idp should send log out requests", - "type": "string" - }, - "sp_client_id": { - "description": "SP's client id", - "type": "string" - }, - "technical_contact_email": { - "description": "Customer's technical contact for saml configuration", - "type": "string" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "acs_url", - "description", - "id", - "idp_entity_id", - "name", - "slo_url", - "sp_client_id", - "technical_contact_email", - "time_created", - "time_modified" - ] - }, - "SamlIdentityProviderCreate": { - "description": "Create-time identity-related parameters", - "type": "object", - "properties": { - "acs_url": { - "description": "service provider endpoint where the response will be sent", - "type": "string" - }, - "description": { - "type": "string" - }, - "group_attribute_name": { - "nullable": true, - "description": "If set, SAML attributes with this name will be considered to denote a user's group membership, where the attribute value(s) should be a comma-separated list of group names.", - "type": "string" - }, - "idp_entity_id": { - "description": "idp's entity id", - "type": "string" - }, - "idp_metadata_source": { - "description": "the source of an identity provider metadata descriptor", - "allOf": [ - { - "$ref": "#/components/schemas/IdpMetadataSource" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "signing_keypair": { - "nullable": true, - "description": "request signing key pair", - "default": null, - "allOf": [ - { - "$ref": "#/components/schemas/DerEncodedKeyPair" - } - ] - }, - "slo_url": { - "description": "service provider endpoint where the idp should send log out requests", - "type": "string" - }, - "sp_client_id": { - "description": "sp's client id", - "type": "string" - }, - "technical_contact_email": { - "description": "customer's technical contact for saml configuration", - "type": "string" - } - }, - "required": [ - "acs_url", - "description", - "idp_entity_id", - "idp_metadata_source", - "name", - "slo_url", - "sp_client_id", - "technical_contact_email" - ] - }, - "ScimClientBearerToken": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "time_created": { - "type": "string", - "format": "date-time" - }, - "time_expires": { - "nullable": true, - "type": "string", - "format": "date-time" - } - }, - "required": [ - "id", - "time_created" - ] - }, - "ScimClientBearerTokenValue": { - "description": "The POST response is the only time the generated bearer token is returned to the client.", - "type": "object", - "properties": { - "bearer_token": { - "type": "string" - }, - "id": { - "type": "string", - "format": "uuid" - }, - "time_created": { - "type": "string", - "format": "date-time" - }, - "time_expires": { - "nullable": true, - "type": "string", - "format": "date-time" - } - }, - "required": [ - "bearer_token", - "id", - "time_created" - ] - }, - "ServiceIcmpConfig": { - "description": "Configuration of inbound ICMP allowed by API services.", - "type": "object", - "properties": { - "enabled": { - "description": "When enabled, Nexus is able to receive ICMP Destination Unreachable type 3 (port unreachable) and type 4 (fragmentation needed), Redirect, and Time Exceeded messages. These enable Nexus to perform Path MTU discovery and better cope with fragmentation issues. Otherwise all inbound ICMP traffic will be dropped.", - "type": "boolean" - } - }, - "required": [ - "enabled" - ] - }, - "ServiceUsingCertificate": { - "description": "The service intended to use this certificate.", - "oneOf": [ - { - "description": "This certificate is intended for access to the external API.", - "type": "string", - "enum": [ - "external_api" - ] - } - ] - }, - "SetTargetReleaseParams": { - "description": "Parameters for PUT requests to `/v1/system/update/target-release`.", - "type": "object", - "properties": { - "system_version": { - "description": "Version of the system software to make the target release.", - "type": "string", - "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$" - } - }, - "required": [ - "system_version" - ] - }, - "Silo": { - "description": "View of a Silo\n\nA Silo is the highest level unit of isolation.", - "type": "object", - "properties": { - "admin_group_name": { - "nullable": true, - "description": "Optionally, silos can have a group name that is automatically granted the silo admin role.", - "type": "string" - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "discoverable": { - "description": "A silo where discoverable is false can be retrieved only by its id - it will not be part of the \"list all silos\" output.", - "type": "boolean" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "identity_mode": { - "description": "How users and groups are managed in this Silo", - "allOf": [ - { - "$ref": "#/components/schemas/SiloIdentityMode" - } - ] - }, - "mapped_fleet_roles": { - "description": "Mapping of which Fleet roles are conferred by each Silo role\n\nThe default is that no Fleet roles are conferred by any Silo roles unless there's a corresponding entry in this map.", - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FleetRole" - }, - "uniqueItems": true - } - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "discoverable", - "id", - "identity_mode", - "mapped_fleet_roles", - "name", - "time_created", - "time_modified" - ] - }, - "SiloAuthSettings": { - "description": "View of silo authentication settings", - "type": "object", - "properties": { - "device_token_max_ttl_seconds": { - "nullable": true, - "description": "Maximum lifetime of a device token in seconds. If set to null, users will be able to create tokens that do not expire.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "silo_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "silo_id" - ] - }, - "SiloAuthSettingsUpdate": { - "description": "Updateable properties of a silo's settings.", - "type": "object", - "properties": { - "device_token_max_ttl_seconds": { - "nullable": true, - "description": "Maximum lifetime of a device token in seconds. If set to null, users will be able to create tokens that do not expire.", - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - "required": [ - "device_token_max_ttl_seconds" - ] - }, - "SiloCreate": { - "description": "Create-time parameters for a `Silo`", - "type": "object", - "properties": { - "admin_group_name": { - "nullable": true, - "description": "If set, this group will be created during Silo creation and granted the \"Silo Admin\" role. Identity providers can assert that users belong to this group and those users can log in and further initialize the Silo.\n\nNote that if configuring a SAML based identity provider, group_attribute_name must be set for users to be considered part of a group. See `SamlIdentityProviderCreate` for more information.", - "type": "string" - }, - "description": { - "type": "string" - }, - "discoverable": { - "type": "boolean" - }, - "identity_mode": { - "$ref": "#/components/schemas/SiloIdentityMode" - }, - "mapped_fleet_roles": { - "description": "Mapping of which Fleet roles are conferred by each Silo role\n\nThe default is that no Fleet roles are conferred by any Silo roles unless there's a corresponding entry in this map.", - "default": {}, - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FleetRole" - }, - "uniqueItems": true - } - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "quotas": { - "description": "Limits the amount of provisionable CPU, memory, and storage in the Silo. CPU and memory are only consumed by running instances, while storage is consumed by any disk or snapshot. A value of 0 means that resource is *not* provisionable.", - "allOf": [ - { - "$ref": "#/components/schemas/SiloQuotasCreate" - } - ] - }, - "tls_certificates": { - "description": "Initial TLS certificates to be used for the new Silo's console and API endpoints. These should be valid for the Silo's DNS name(s).", - "type": "array", - "items": { - "$ref": "#/components/schemas/CertificateCreate" - } - } - }, - "required": [ - "description", - "discoverable", - "identity_mode", - "name", - "quotas", - "tls_certificates" - ] - }, - "SiloIdentityMode": { - "description": "Describes how identities are managed and users are authenticated in this Silo", - "oneOf": [ - { - "description": "Users are authenticated with SAML using an external authentication provider. The system updates information about users and groups only during successful authentication (i.e,. \"JIT provisioning\" of users and groups).", - "type": "string", - "enum": [ - "saml_jit" - ] - }, - { - "description": "The system is the source of truth about users. There is no linkage to an external authentication provider or identity provider.", - "type": "string", - "enum": [ - "local_only" - ] - }, - { - "description": "Users are authenticated with SAML using an external authentication provider. Users and groups are managed with SCIM API calls, likely from the same authentication provider.", - "type": "string", - "enum": [ - "saml_scim" - ] - } - ] - }, - "SiloIpPool": { - "description": "An IP pool in the context of a silo", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "is_default": { - "description": "When a pool is the default for a silo, floating IPs and instance ephemeral IPs will come from that pool when no other pool is specified. There can be at most one default for a given silo.", - "type": "boolean" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "is_default", - "name", - "time_created", - "time_modified" - ] - }, - "SiloIpPoolResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SiloIpPool" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SiloQuotas": { - "description": "A collection of resource counts used to set the virtual capacity of a silo", - "type": "object", - "properties": { - "cpus": { - "description": "Number of virtual CPUs", - "type": "integer", - "format": "int64" - }, - "memory": { - "description": "Amount of memory in bytes", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "silo_id": { - "type": "string", - "format": "uuid" - }, - "storage": { - "description": "Amount of disk storage in bytes", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "cpus", - "memory", - "silo_id", - "storage" - ] - }, - "SiloQuotasCreate": { - "description": "The amount of provisionable resources for a Silo", - "type": "object", - "properties": { - "cpus": { - "description": "The amount of virtual CPUs available for running instances in the Silo", - "type": "integer", - "format": "int64" - }, - "memory": { - "description": "The amount of RAM (in bytes) available for running instances in the Silo", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "storage": { - "description": "The amount of storage (in bytes) available for disks or snapshots", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "cpus", - "memory", - "storage" - ] - }, - "SiloQuotasResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SiloQuotas" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SiloQuotasUpdate": { - "description": "Updateable properties of a Silo's resource limits. If a value is omitted it will not be updated.", - "type": "object", - "properties": { - "cpus": { - "nullable": true, - "description": "The amount of virtual CPUs available for running instances in the Silo", - "type": "integer", - "format": "int64" - }, - "memory": { - "nullable": true, - "description": "The amount of RAM (in bytes) available for running instances in the Silo", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "storage": { - "nullable": true, - "description": "The amount of storage (in bytes) available for disks or snapshots", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - } - }, - "SiloResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Silo" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SiloRole": { - "type": "string", - "enum": [ - "admin", - "collaborator", - "limited_collaborator", - "viewer" - ] - }, - "SiloRolePolicy": { - "description": "Policy for a particular resource\n\nNote that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource.", - "type": "object", - "properties": { - "role_assignments": { - "description": "Roles directly assigned on this resource", - "type": "array", - "items": { - "$ref": "#/components/schemas/SiloRoleRoleAssignment" - } - } - }, - "required": [ - "role_assignments" - ] - }, - "SiloRoleRoleAssignment": { - "description": "Describes the assignment of a particular role on a particular resource to a particular identity (user, group, etc.)\n\nThe resource is not part of this structure. Rather, `RoleAssignment`s are put into a `Policy` and that Policy is applied to a particular resource.", - "type": "object", - "properties": { - "identity_id": { - "type": "string", - "format": "uuid" - }, - "identity_type": { - "$ref": "#/components/schemas/IdentityType" - }, - "role_name": { - "$ref": "#/components/schemas/SiloRole" - } - }, - "required": [ - "identity_id", - "identity_type", - "role_name" - ] - }, - "SiloUtilization": { - "description": "View of a silo's resource utilization and capacity", - "type": "object", - "properties": { - "allocated": { - "description": "Accounts for the total amount of resources reserved for silos via their quotas", - "allOf": [ - { - "$ref": "#/components/schemas/VirtualResourceCounts" - } - ] - }, - "provisioned": { - "description": "Accounts for resources allocated by in silos like CPU or memory for running instances and storage for disks and snapshots Note that CPU and memory resources associated with a stopped instances are not counted here", - "allOf": [ - { - "$ref": "#/components/schemas/VirtualResourceCounts" - } - ] - }, - "silo_id": { - "type": "string", - "format": "uuid" - }, - "silo_name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "allocated", - "provisioned", - "silo_id", - "silo_name" - ] - }, - "SiloUtilizationResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SiloUtilization" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "Sled": { - "description": "An operator's view of a Sled.", - "type": "object", - "properties": { - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "policy": { - "description": "The operator-defined policy of a sled.", - "allOf": [ - { - "$ref": "#/components/schemas/SledPolicy" - } - ] - }, - "rack_id": { - "description": "The rack to which this Sled is currently attached", - "type": "string", - "format": "uuid" - }, - "state": { - "description": "The current state of the sled.", - "allOf": [ - { - "$ref": "#/components/schemas/SledState" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "usable_hardware_threads": { - "description": "The number of hardware threads which can execute on this sled", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "usable_physical_ram": { - "description": "Amount of RAM which may be used by the Sled's OS", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "baseboard", - "id", - "policy", - "rack_id", - "state", - "time_created", - "time_modified", - "usable_hardware_threads", - "usable_physical_ram" - ] - }, - "SledId": { - "description": "The unique ID of a sled.", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "id" - ] - }, - "SledInstance": { - "description": "An operator's view of an instance running on a given sled", - "type": "object", - "properties": { - "active_sled_id": { - "type": "string", - "format": "uuid" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "memory": { - "type": "integer", - "format": "int64" - }, - "migration_id": { - "nullable": true, - "type": "string", - "format": "uuid" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "ncpus": { - "type": "integer", - "format": "int64" - }, - "project_name": { - "$ref": "#/components/schemas/Name" - }, - "silo_name": { - "$ref": "#/components/schemas/Name" - }, - "state": { - "$ref": "#/components/schemas/InstanceState" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "active_sled_id", - "id", - "memory", - "name", - "ncpus", - "project_name", - "silo_name", - "state", - "time_created", - "time_modified" - ] - }, - "SledInstanceResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledInstance" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SledPolicy": { - "description": "The operator-defined policy of a sled.", - "oneOf": [ - { - "description": "The operator has indicated that the sled is in-service.", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "in_service" - ] - }, - "provision_policy": { - "description": "Determines whether new resources can be provisioned onto the sled.", - "allOf": [ - { - "$ref": "#/components/schemas/SledProvisionPolicy" - } - ] - } - }, - "required": [ - "kind", - "provision_policy" - ] - }, - { - "description": "The operator has indicated that the sled has been permanently removed from service.\n\nThis is a terminal state: once a particular sled ID is expunged, it will never return to service. (The actual hardware may be reused, but it will be treated as a brand-new sled.)\n\nAn expunged sled is always non-provisionable.", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "expunged" - ] - } - }, - "required": [ - "kind" - ] - } - ] - }, - "SledProvisionPolicy": { - "description": "The operator-defined provision policy of a sled.\n\nThis controls whether new resources are going to be provisioned on this sled.", - "oneOf": [ - { - "description": "New resources will be provisioned on this sled.", - "type": "string", - "enum": [ - "provisionable" - ] - }, - { - "description": "New resources will not be provisioned on this sled. However, if the sled is currently in service, existing resources will continue to be on this sled unless manually migrated off.", - "type": "string", - "enum": [ - "non_provisionable" - ] - } - ] - }, - "SledProvisionPolicyParams": { - "description": "Parameters for `sled_set_provision_policy`.", - "type": "object", - "properties": { - "state": { - "description": "The provision state.", - "allOf": [ - { - "$ref": "#/components/schemas/SledProvisionPolicy" - } - ] - } - }, - "required": [ - "state" - ] - }, - "SledProvisionPolicyResponse": { - "description": "Response to `sled_set_provision_policy`.", - "type": "object", - "properties": { - "new_state": { - "description": "The new provision state.", - "allOf": [ - { - "$ref": "#/components/schemas/SledProvisionPolicy" - } - ] - }, - "old_state": { - "description": "The old provision state.", - "allOf": [ - { - "$ref": "#/components/schemas/SledProvisionPolicy" - } - ] - } - }, - "required": [ - "new_state", - "old_state" - ] - }, - "SledResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Sled" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SledState": { - "description": "The current state of the sled.", - "oneOf": [ - { - "description": "The sled is currently active, and has resources allocated on it.", - "type": "string", - "enum": [ - "active" - ] - }, - { - "description": "The sled has been permanently removed from service.\n\nThis is a terminal state: once a particular sled ID is decommissioned, it will never return to service. (The actual hardware may be reused, but it will be treated as a brand-new sled.)", - "type": "string", - "enum": [ - "decommissioned" - ] - } - ] - }, - "Snapshot": { - "description": "View of a Snapshot", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "disk_id": { - "type": "string", - "format": "uuid" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "project_id": { - "type": "string", - "format": "uuid" - }, - "size": { - "$ref": "#/components/schemas/ByteCount" - }, - "state": { - "$ref": "#/components/schemas/SnapshotState" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "disk_id", - "id", - "name", - "project_id", - "size", - "state", - "time_created", - "time_modified" - ] - }, - "SnapshotCreate": { - "description": "Create-time parameters for a `Snapshot`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "disk": { - "description": "The disk to be snapshotted", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "description", - "disk", - "name" - ] - }, - "SnapshotResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Snapshot" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SnapshotState": { - "type": "string", - "enum": [ - "creating", - "ready", - "faulted", - "destroyed" - ] - }, - "SshKey": { - "description": "View of an SSH Key", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "public_key": { - "description": "SSH public key, e.g., `\"ssh-ed25519 AAAAC3NzaC...\"`", - "type": "string" - }, - "silo_user_id": { - "description": "The user to whom this key belongs", - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "name", - "public_key", - "silo_user_id", - "time_created", - "time_modified" - ] - }, - "SshKeyCreate": { - "description": "Create-time parameters for an `SshKey`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "public_key": { - "description": "SSH public key, e.g., `\"ssh-ed25519 AAAAC3NzaC...\"`", - "type": "string" - } - }, - "required": [ - "description", - "name", - "public_key" - ] - }, - "SshKeyResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SshKey" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SupportBundleCreate": { - "type": "object", - "properties": { - "user_comment": { - "nullable": true, - "description": "User comment for the support bundle", - "type": "string" - } - } - }, - "SupportBundleInfo": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "reason_for_creation": { - "type": "string" - }, - "reason_for_failure": { - "nullable": true, - "type": "string" - }, - "state": { - "$ref": "#/components/schemas/SupportBundleState" - }, - "time_created": { - "type": "string", - "format": "date-time" - }, - "user_comment": { - "nullable": true, - "type": "string" - } - }, - "required": [ - "id", - "reason_for_creation", - "state", - "time_created" - ] - }, - "SupportBundleInfoResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportBundleInfo" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SupportBundleState": { - "oneOf": [ - { - "description": "Support Bundle still actively being collected.\n\nThis is the initial state for a Support Bundle, and it will automatically transition to either \"Failing\" or \"Active\".\n\nIf a user no longer wants to access a Support Bundle, they can request cancellation, which will transition to the \"Destroying\" state.", - "type": "string", - "enum": [ - "collecting" - ] - }, - { - "description": "Support Bundle is being destroyed.\n\nOnce backing storage has been freed, this bundle is destroyed.", - "type": "string", - "enum": [ - "destroying" - ] - }, - { - "description": "Support Bundle was not created successfully, or was created and has lost backing storage.\n\nThe record of the bundle still exists for readability, but the only valid operation on these bundles is to destroy them.", - "type": "string", - "enum": [ - "failed" - ] - }, - { - "description": "Support Bundle has been processed, and is ready for usage.", - "type": "string", - "enum": [ - "active" - ] - } - ] - }, - "SupportBundleUpdate": { - "type": "object", - "properties": { - "user_comment": { - "nullable": true, - "description": "User comment for the support bundle", - "type": "string" - } - } - }, - "Switch": { - "description": "An operator's view of a Switch.", - "type": "object", - "properties": { - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "rack_id": { - "description": "The rack to which this Switch is currently attached", - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "baseboard", - "id", - "rack_id", - "time_created", - "time_modified" - ] - }, - "SwitchBgpHistory": { - "description": "BGP message history for a particular switch.", - "type": "object", - "properties": { - "history": { - "description": "Message history indexed by peer address.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/BgpMessageHistory" - } - }, - "switch": { - "description": "Switch this message history is associated with.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - } - }, - "required": [ - "history", - "switch" - ] - }, - "SwitchInterfaceConfig": { - "description": "A switch port interface configuration for a port settings object.", - "type": "object", - "properties": { - "id": { - "description": "A unique identifier for this switch interface.", - "type": "string", - "format": "uuid" - }, - "interface_name": { - "description": "The name of this switch interface.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "kind": { - "description": "The switch interface kind.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchInterfaceKind2" - } - ] - }, - "port_settings_id": { - "description": "The port settings object this switch interface configuration belongs to.", - "type": "string", - "format": "uuid" - }, - "v6_enabled": { - "description": "Whether or not IPv6 is enabled on this interface.", - "type": "boolean" - } - }, - "required": [ - "id", - "interface_name", - "kind", - "port_settings_id", - "v6_enabled" - ] - }, - "SwitchInterfaceConfigCreate": { - "description": "A layer-3 switch interface configuration. When IPv6 is enabled, a link local address will be created for the interface.", - "type": "object", - "properties": { - "kind": { - "description": "What kind of switch interface this configuration represents.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchInterfaceKind" - } - ] - }, - "link_name": { - "description": "Link name. On ports that are not broken out, this is always phy0. On a 2x breakout the options are phy0 and phy1, on 4x phy0-phy3, etc.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "v6_enabled": { - "description": "Whether or not IPv6 is enabled.", - "type": "boolean" - } - }, - "required": [ - "kind", - "link_name", - "v6_enabled" - ] - }, - "SwitchInterfaceKind": { - "description": "Indicates the kind for a switch interface.", - "oneOf": [ - { - "description": "Primary interfaces are associated with physical links. There is exactly one primary interface per physical link.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "primary" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "VLAN interfaces allow physical interfaces to be multiplexed onto multiple logical links, each distinguished by a 12-bit 802.1Q Ethernet tag.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vlan" - ] - }, - "vid": { - "description": "The virtual network id (VID) that distinguishes this interface and is used for producing and consuming 802.1Q Ethernet tags. This field has a maximum value of 4095 as 802.1Q tags are twelve bits.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "type", - "vid" - ] - }, - { - "description": "Loopback interfaces are anchors for IP addresses that are not specific to any particular port.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "loopback" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "SwitchInterfaceKind2": { - "description": "Describes the kind of an switch interface.", - "oneOf": [ - { - "description": "Primary interfaces are associated with physical links. There is exactly one primary interface per physical link.", - "type": "string", - "enum": [ - "primary" - ] - }, - { - "description": "VLAN interfaces allow physical interfaces to be multiplexed onto multiple logical links, each distinguished by a 12-bit 802.1Q Ethernet tag.", - "type": "string", - "enum": [ - "vlan" - ] - }, - { - "description": "Loopback interfaces are anchors for IP addresses that are not specific to any particular port.", - "type": "string", - "enum": [ - "loopback" - ] - } - ] - }, - "SwitchLinkState": {}, - "SwitchLocation": { - "description": "Identifies switch physical location", - "oneOf": [ - { - "description": "Switch in upper slot", - "type": "string", - "enum": [ - "switch0" - ] - }, - { - "description": "Switch in lower slot", - "type": "string", - "enum": [ - "switch1" - ] - } - ] - }, - "SwitchPort": { - "description": "A switch port represents a physical external port on a rack switch.", - "type": "object", - "properties": { - "id": { - "description": "The id of the switch port.", - "type": "string", - "format": "uuid" - }, - "port_name": { - "description": "The name of this switch port.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "port_settings_id": { - "nullable": true, - "description": "The primary settings group of this switch port. Will be `None` until this switch port is configured.", - "type": "string", - "format": "uuid" - }, - "rack_id": { - "description": "The rack this switch port belongs to.", - "type": "string", - "format": "uuid" - }, - "switch_location": { - "description": "The switch location of this switch port.", - "type": "string" - } - }, - "required": [ - "id", - "port_name", - "rack_id", - "switch_location" - ] - }, - "SwitchPortAddressView": { - "description": "An IP address configuration for a port settings object.", - "type": "object", - "properties": { - "address": { - "description": "The IP address and prefix.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "address_lot_block_id": { - "description": "The id of the address lot block this address is drawn from.", - "type": "string", - "format": "uuid" - }, - "address_lot_id": { - "description": "The id of the address lot this address is drawn from.", - "type": "string", - "format": "uuid" - }, - "address_lot_name": { - "description": "The name of the address lot this address is drawn from.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "interface_name": { - "description": "The interface name this address belongs to.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "port_settings_id": { - "description": "The port settings object this address configuration belongs to.", - "type": "string", - "format": "uuid" - }, - "vlan_id": { - "nullable": true, - "description": "An optional VLAN ID", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "address", - "address_lot_block_id", - "address_lot_id", - "address_lot_name", - "interface_name", - "port_settings_id" - ] - }, - "SwitchPortApplySettings": { - "description": "Parameters for applying settings to switch ports.", - "type": "object", - "properties": { - "port_settings": { - "description": "A name or id to use when applying switch port settings.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - } - }, - "required": [ - "port_settings" - ] - }, - "SwitchPortConfig": { - "description": "A physical port configuration for a port settings object.", - "type": "object", - "properties": { - "geometry": { - "description": "The physical link geometry of the port.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchPortGeometry2" - } - ] - }, - "port_settings_id": { - "description": "The id of the port settings object this configuration belongs to.", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "geometry", - "port_settings_id" - ] - }, - "SwitchPortConfigCreate": { - "description": "Physical switch port configuration.", - "type": "object", - "properties": { - "geometry": { - "description": "Link geometry for the switch port.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchPortGeometry" - } - ] - } - }, - "required": [ - "geometry" - ] - }, - "SwitchPortGeometry": { - "description": "The link geometry associated with a switch port.", - "oneOf": [ - { - "description": "The port contains a single QSFP28 link with four lanes.", - "type": "string", - "enum": [ - "qsfp28x1" - ] - }, - { - "description": "The port contains two QSFP28 links each with two lanes.", - "type": "string", - "enum": [ - "qsfp28x2" - ] - }, - { - "description": "The port contains four SFP28 links each with one lane.", - "type": "string", - "enum": [ - "sfp28x4" - ] - } - ] - }, - "SwitchPortGeometry2": { - "description": "The link geometry associated with a switch port.", - "oneOf": [ - { - "description": "The port contains a single QSFP28 link with four lanes.", - "type": "string", - "enum": [ - "qsfp28x1" - ] - }, - { - "description": "The port contains two QSFP28 links each with two lanes.", - "type": "string", - "enum": [ - "qsfp28x2" - ] - }, - { - "description": "The port contains four SFP28 links each with one lane.", - "type": "string", - "enum": [ - "sfp28x4" - ] - } - ] - }, - "SwitchPortLinkConfig": { - "description": "A link configuration for a port settings object.", - "type": "object", - "properties": { - "autoneg": { - "description": "Whether or not the link has autonegotiation enabled.", - "type": "boolean" - }, - "fec": { - "nullable": true, - "description": "The requested forward-error correction method. If this is not specified, the standard FEC for the underlying media will be applied if it can be determined.", - "allOf": [ - { - "$ref": "#/components/schemas/LinkFec" - } - ] - }, - "link_name": { - "description": "The name of this link.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "lldp_link_config": { - "nullable": true, - "description": "The link-layer discovery protocol service configuration for this link.", - "allOf": [ - { - "$ref": "#/components/schemas/LldpLinkConfig" - } - ] - }, - "mtu": { - "description": "The maximum transmission unit for this link.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "port_settings_id": { - "description": "The port settings this link configuration belongs to.", - "type": "string", - "format": "uuid" - }, - "speed": { - "description": "The configured speed of the link.", - "allOf": [ - { - "$ref": "#/components/schemas/LinkSpeed" - } - ] - }, - "tx_eq_config": { - "nullable": true, - "description": "The tx_eq configuration for this link.", - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig2" - } - ] - } - }, - "required": [ - "autoneg", - "link_name", - "mtu", - "port_settings_id", - "speed" - ] - }, - "SwitchPortResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchPort" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SwitchPortRouteConfig": { - "description": "A route configuration for a port settings object.", - "type": "object", - "properties": { - "dst": { - "description": "The route's destination network.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "gw": { - "description": "The route's gateway address.", - "type": "string", - "format": "ip" - }, - "interface_name": { - "description": "The interface name this route configuration is assigned to.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "port_settings_id": { - "description": "The port settings object this route configuration belongs to.", - "type": "string", - "format": "uuid" - }, - "rib_priority": { - "nullable": true, - "description": "Route RIB priority. Higher priority indicates precedence within and across protocols.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN identifier for the route. Use this if the gateway is reachable over an 802.1Q tagged L2 segment.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "dst", - "gw", - "interface_name", - "port_settings_id" - ] - }, - "SwitchPortSettings": { - "description": "This structure contains all port settings information in one place. It's a convenience data structure for getting a complete view of a particular port's settings.", - "type": "object", - "properties": { - "addresses": { - "description": "Layer 3 IP address settings.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchPortAddressView" - } - }, - "bgp_peers": { - "description": "BGP peer settings.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeer" - } - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "groups": { - "description": "Switch port settings included from other switch port settings groups.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchPortSettingsGroups" - } - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "interfaces": { - "description": "Layer 3 interface settings.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchInterfaceConfig" - } - }, - "links": { - "description": "Layer 2 link settings.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchPortLinkConfig" - } - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "port": { - "description": "Layer 1 physical port settings.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchPortConfig" - } - ] - }, - "routes": { - "description": "IP route settings.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchPortRouteConfig" - } - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "vlan_interfaces": { - "description": "Vlan interface settings.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchVlanInterfaceConfig" - } - } - }, - "required": [ - "addresses", - "bgp_peers", - "description", - "groups", - "id", - "interfaces", - "links", - "name", - "port", - "routes", - "time_created", - "time_modified", - "vlan_interfaces" - ] - }, - "SwitchPortSettingsCreate": { - "description": "Parameters for creating switch port settings. Switch port settings are the central data structure for setting up external networking. Switch port settings include link, interface, route, address and dynamic network protocol configuration.", - "type": "object", - "properties": { - "addresses": { - "description": "Address configurations.", - "type": "array", - "items": { - "$ref": "#/components/schemas/AddressConfig" - } - }, - "bgp_peers": { - "description": "BGP peer configurations.", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeerConfig" - } - }, - "description": { - "type": "string" - }, - "groups": { - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/NameOrId" - } - }, - "interfaces": { - "description": "Interface configurations.", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchInterfaceConfigCreate" - } - }, - "links": { - "description": "Link configurations.", - "type": "array", - "items": { - "$ref": "#/components/schemas/LinkConfigCreate" - } - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "port_config": { - "$ref": "#/components/schemas/SwitchPortConfigCreate" - }, - "routes": { - "description": "Route configurations.", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/RouteConfig" - } - } - }, - "required": [ - "addresses", - "description", - "links", - "name", - "port_config" - ] - }, - "SwitchPortSettingsGroups": { - "description": "This structure maps a port settings object to a port settings groups. Port settings objects may inherit settings from groups. This mapping defines the relationship between settings objects and the groups they reference.", - "type": "object", - "properties": { - "port_settings_group_id": { - "description": "The id of a port settings group being referenced by a port settings object.", - "type": "string", - "format": "uuid" - }, - "port_settings_id": { - "description": "The id of a port settings object referencing a port settings group.", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "port_settings_group_id", - "port_settings_id" - ] - }, - "SwitchPortSettingsIdentity": { - "description": "A switch port settings identity whose id may be used to view additional details.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "name", - "time_created", - "time_modified" - ] - }, - "SwitchPortSettingsIdentityResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchPortSettingsIdentity" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SwitchResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Switch" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SwitchVlanInterfaceConfig": { - "description": "A switch port VLAN interface configuration for a port settings object.", - "type": "object", - "properties": { - "interface_config_id": { - "description": "The switch interface configuration this VLAN interface configuration belongs to.", - "type": "string", - "format": "uuid" - }, - "vlan_id": { - "description": "The virtual network id for this interface that is used for producing and consuming 802.1Q Ethernet tags. This field has a maximum value of 4095 as 802.1Q tags are twelve bits.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "interface_config_id", - "vlan_id" - ] - }, - "TargetRelease": { - "description": "View of a system software target release", - "type": "object", - "properties": { - "time_requested": { - "description": "Time this was set as the target release", - "type": "string", - "format": "date-time" - }, - "version": { - "description": "The specified release of the rack's system software", - "type": "string", - "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$" - } - }, - "required": [ - "time_requested", - "version" - ] - }, - "Timeseries": { - "description": "A timeseries contains a timestamped set of values from one source.\n\nThis includes the typed key-value pairs that uniquely identify it, and the set of timestamps and data values from it.", - "type": "object", - "properties": { - "fields": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/FieldValue" - } - }, - "points": { - "$ref": "#/components/schemas/Points" - } - }, - "required": [ - "fields", - "points" - ] - }, - "TimeseriesDescription": { - "description": "Text descriptions for the target and metric of a timeseries.", - "type": "object", - "properties": { - "metric": { - "type": "string" - }, - "target": { - "type": "string" - } - }, - "required": [ - "metric", - "target" - ] - }, - "TimeseriesName": { - "title": "The name of a timeseries", - "description": "Names are constructed by concatenating the target and metric names with ':'. Target and metric names must be lowercase alphanumeric characters with '_' separating words.", - "type": "string", - "pattern": "^(([a-z]+[a-z0-9]*)(_([a-z0-9]+))*):(([a-z]+[a-z0-9]*)(_([a-z0-9]+))*)$" - }, - "TimeseriesQuery": { - "description": "A timeseries query string, written in the Oximeter query language.", - "type": "object", - "properties": { - "query": { - "description": "A timeseries query string, written in the Oximeter query language.", - "type": "string" - } - }, - "required": [ - "query" - ] - }, - "TimeseriesSchema": { - "description": "The schema for a timeseries.\n\nThis includes the name of the timeseries, as well as the datum type of its metric and the schema for each field.", - "type": "object", - "properties": { - "authz_scope": { - "$ref": "#/components/schemas/AuthzScope" - }, - "created": { - "type": "string", - "format": "date-time" - }, - "datum_type": { - "$ref": "#/components/schemas/DatumType" - }, - "description": { - "$ref": "#/components/schemas/TimeseriesDescription" - }, - "field_schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FieldSchema" - }, - "uniqueItems": true - }, - "timeseries_name": { - "$ref": "#/components/schemas/TimeseriesName" - }, - "units": { - "$ref": "#/components/schemas/Units" - }, - "version": { - "type": "integer", - "format": "uint8", - "minimum": 1 - } - }, - "required": [ - "authz_scope", - "created", - "datum_type", - "description", - "field_schema", - "timeseries_name", - "units", - "version" - ] - }, - "TimeseriesSchemaResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/TimeseriesSchema" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "TufRepo": { - "description": "Metadata about a TUF repository", - "type": "object", - "properties": { - "file_name": { - "description": "The file name of the repository, as reported by the client that uploaded it\n\nThis is intended for debugging. The file name may not match any particular pattern, and even if it does, it may not be accurate since it's just what the client reported.", - "type": "string" - }, - "hash": { - "description": "The hash of the repository", - "type": "string", - "format": "hex string (32 bytes)" - }, - "system_version": { - "description": "The system version for this repository\n\nThe system version is a top-level version number applied to all the software in the repository.", - "type": "string", - "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$" - }, - "time_created": { - "description": "Time the repository was uploaded", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "file_name", - "hash", - "system_version", - "time_created" - ] - }, - "TufRepoResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/TufRepo" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "TufRepoUpload": { - "type": "object", - "properties": { - "repo": { - "$ref": "#/components/schemas/TufRepo" - }, - "status": { - "$ref": "#/components/schemas/TufRepoUploadStatus" - } - }, - "required": [ - "repo", - "status" - ] - }, - "TufRepoUploadStatus": { - "description": "Whether the uploaded TUF repo already existed or was new and had to be inserted. Part of `TufRepoUpload`.", - "oneOf": [ - { - "description": "The repository already existed in the database", - "type": "string", - "enum": [ - "already_exists" - ] - }, - { - "description": "The repository did not exist, and was inserted into the database", - "type": "string", - "enum": [ - "inserted" - ] - } - ] - }, - "TxEqConfig": { - "description": "Per-port tx-eq overrides. This can be used to fine-tune the transceiver equalization settings to improve signal integrity.", - "type": "object", - "properties": { - "main": { - "nullable": true, - "description": "Main tap", - "type": "integer", - "format": "int32" - }, - "post1": { - "nullable": true, - "description": "Post-cursor tap1", - "type": "integer", - "format": "int32" - }, - "post2": { - "nullable": true, - "description": "Post-cursor tap2", - "type": "integer", - "format": "int32" - }, - "pre1": { - "nullable": true, - "description": "Pre-cursor tap1", - "type": "integer", - "format": "int32" - }, - "pre2": { - "nullable": true, - "description": "Pre-cursor tap2", - "type": "integer", - "format": "int32" - } - } - }, - "TxEqConfig2": { - "description": "Per-port tx-eq overrides. This can be used to fine-tune the transceiver equalization settings to improve signal integrity.", - "type": "object", - "properties": { - "main": { - "nullable": true, - "description": "Main tap", - "type": "integer", - "format": "int32" - }, - "post1": { - "nullable": true, - "description": "Post-cursor tap1", - "type": "integer", - "format": "int32" - }, - "post2": { - "nullable": true, - "description": "Post-cursor tap2", - "type": "integer", - "format": "int32" - }, - "pre1": { - "nullable": true, - "description": "Pre-cursor tap1", - "type": "integer", - "format": "int32" - }, - "pre2": { - "nullable": true, - "description": "Pre-cursor tap2", - "type": "integer", - "format": "int32" - } - } - }, - "UninitializedSled": { - "description": "A sled that has not been added to an initialized rack yet", - "type": "object", - "properties": { - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - }, - "cubby": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "rack_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "baseboard", - "cubby", - "rack_id" - ] - }, - "UninitializedSledId": { - "description": "The unique hardware ID for a sled", - "type": "object", - "properties": { - "part": { - "type": "string" - }, - "serial": { - "type": "string" - } - }, - "required": [ - "part", - "serial" - ] - }, - "UninitializedSledResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/UninitializedSled" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "Units": { - "description": "Measurement units for timeseries samples.", - "oneOf": [ - { - "type": "string", - "enum": [ - "count", - "bytes", - "seconds", - "nanoseconds", - "volts", - "amps", - "watts", - "degrees_celsius" - ] - }, - { - "description": "No meaningful units, e.g. a dimensionless quanity.", - "type": "string", - "enum": [ - "none" - ] - }, - { - "description": "Rotations per minute.", - "type": "string", - "enum": [ - "rpm" - ] - } - ] - }, - "UpdateStatus": { - "type": "object", - "properties": { - "components_by_release_version": { - "description": "Count of components running each release version\n\nKeys will be either:\n\n* Semver-like release version strings * \"install dataset\", representing the initial rack software before any updates * \"unknown\", which means there is no TUF repo uploaded that matches the software running on the component)", - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "suspended": { - "description": "Whether automatic update is suspended due to manual update activity\n\nAfter a manual support procedure that changes the system software, automatic update activity is suspended to avoid undoing the change. To resume automatic update, first upload the TUF repository matching the manually applied update, then set that as the target release.", - "type": "boolean" - }, - "target_release": { - "nullable": true, - "description": "Current target release of the system software\n\nThis may not correspond to the actual system software running at the time of request; it is instead the release that the system should be moving towards as a goal state. The system asynchronously updates software to match this target release.\n\nWill only be null if a target release has never been set. In that case, the system is not automatically attempting to manage software versions.", - "allOf": [ - { - "$ref": "#/components/schemas/TargetRelease" - } - ] - }, - "time_last_step_planned": { - "description": "Time of most recent update planning activity\n\nThis is intended as a rough indicator of the last time something happened in the update planner.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "components_by_release_version", - "suspended", - "target_release", - "time_last_step_planned" - ] - }, - "UpdatesTrustRoot": { - "description": "Trusted root role used by the update system to verify update repositories.", - "type": "object", - "properties": { - "id": { - "description": "The UUID of this trusted root role.", - "type": "string", - "format": "uuid" - }, - "root_role": { - "description": "The trusted root role itself, a JSON document as described by The Update Framework." - }, - "time_created": { - "description": "Time the trusted root role was added.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "id", - "root_role", - "time_created" - ] - }, - "UpdatesTrustRootResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/UpdatesTrustRoot" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "User": { - "description": "View of a User", - "type": "object", - "properties": { - "display_name": { - "description": "Human-readable name that can identify the user", - "type": "string" - }, - "id": { - "type": "string", - "format": "uuid" - }, - "silo_id": { - "description": "Uuid of the silo to which this user belongs", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "display_name", - "id", - "silo_id" - ] - }, - "UserBuiltin": { - "description": "View of a Built-in User\n\nBuilt-in users are identities internal to the system, used when the control plane performs actions autonomously", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "name", - "time_created", - "time_modified" - ] - }, - "UserBuiltinResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/UserBuiltin" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "UserCreate": { - "description": "Create-time parameters for a `User`", - "type": "object", - "properties": { - "external_id": { - "description": "username used to log in", - "allOf": [ - { - "$ref": "#/components/schemas/UserId" - } - ] - }, - "password": { - "description": "how to set the user's login password", - "allOf": [ - { - "$ref": "#/components/schemas/UserPassword" - } - ] - } - }, - "required": [ - "external_id", - "password" - ] - }, - "UserId": { - "title": "A username for a local-only user", - "description": "Usernames must begin with a lower case ASCII letter, be composed exclusively of lowercase ASCII, uppercase ASCII, numbers, and '-', and may not end with a '-'. Usernames cannot be a UUID, but they may contain a UUID. They can be at most 63 characters long.", - "type": "string", - "pattern": "^(?![0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$)^[a-z]([a-zA-Z0-9-]*[a-zA-Z0-9]+)?$", - "minLength": 1, - "maxLength": 63 - }, - "UserPassword": { - "description": "Parameters for setting a user's password", - "oneOf": [ - { - "description": "Sets the user's password to the provided value", - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "password" - ] - }, - "value": { - "$ref": "#/components/schemas/Password" - } - }, - "required": [ - "mode", - "value" - ] - }, - { - "description": "Invalidates any current password (disabling password authentication)", - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "login_disallowed" - ] - } - }, - "required": [ - "mode" - ] - } - ] - }, - "UserResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "UsernamePasswordCredentials": { - "description": "Credentials for local user login", - "type": "object", - "properties": { - "password": { - "$ref": "#/components/schemas/Password" - }, - "username": { - "$ref": "#/components/schemas/UserId" - } - }, - "required": [ - "password", - "username" - ] - }, - "Utilization": { - "description": "View of the current silo's resource utilization and capacity", - "type": "object", - "properties": { - "capacity": { - "description": "The total amount of resources that can be provisioned in this silo Actions that would exceed this limit will fail", - "allOf": [ - { - "$ref": "#/components/schemas/VirtualResourceCounts" - } - ] - }, - "provisioned": { - "description": "Accounts for resources allocated to running instances or storage allocated via disks or snapshots Note that CPU and memory resources associated with a stopped instances are not counted here whereas associated disks will still be counted", - "allOf": [ - { - "$ref": "#/components/schemas/VirtualResourceCounts" - } - ] - } - }, - "required": [ - "capacity", - "provisioned" - ] - }, - "ValueArray": { - "description": "List of data values for one timeseries.\n\nEach element is an option, where `None` represents a missing sample.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "integer" - ] - }, - "values": { - "type": "array", - "items": { - "nullable": true, - "type": "integer", - "format": "int64" - } - } - }, - "required": [ - "type", - "values" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "double" - ] - }, - "values": { - "type": "array", - "items": { - "nullable": true, - "type": "number", - "format": "double" - } - } - }, - "required": [ - "type", - "values" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "boolean" - ] - }, - "values": { - "type": "array", - "items": { - "nullable": true, - "type": "boolean" - } - } - }, - "required": [ - "type", - "values" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "string" - ] - }, - "values": { - "type": "array", - "items": { - "nullable": true, - "type": "string" - } - } - }, - "required": [ - "type", - "values" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "integer_distribution" - ] - }, - "values": { - "type": "array", - "items": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Distributionint64" - } - ] - } - } - }, - "required": [ - "type", - "values" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "double_distribution" - ] - }, - "values": { - "type": "array", - "items": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Distributiondouble" - } - ] - } - } - }, - "required": [ - "type", - "values" - ] - } - ] - }, - "Values": { - "description": "A single list of values, for one dimension of a timeseries.", - "type": "object", - "properties": { - "metric_type": { - "description": "The type of this metric.", - "allOf": [ - { - "$ref": "#/components/schemas/MetricType" - } - ] - }, - "values": { - "description": "The data values.", - "allOf": [ - { - "$ref": "#/components/schemas/ValueArray" - } - ] - } - }, - "required": [ - "metric_type", - "values" - ] - }, - "VirtualResourceCounts": { - "description": "A collection of resource counts used to describe capacity and utilization", - "type": "object", - "properties": { - "cpus": { - "description": "Number of virtual CPUs", - "type": "integer", - "format": "int64" - }, - "memory": { - "description": "Amount of memory in bytes", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "storage": { - "description": "Amount of disk storage in bytes", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "cpus", - "memory", - "storage" - ] - }, - "Vni": { - "description": "A Geneve Virtual Network Identifier", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "Vpc": { - "description": "View of a VPC", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "dns_name": { - "description": "The name used for the VPC in DNS.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "ipv6_prefix": { - "description": "The unique local IPv6 address range for subnets in this VPC", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Net" - } - ] - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "project_id": { - "description": "id for the project containing this VPC", - "type": "string", - "format": "uuid" - }, - "system_router_id": { - "description": "id for the system router where subnet default routes are registered", - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "dns_name", - "id", - "ipv6_prefix", - "name", - "project_id", - "system_router_id", - "time_created", - "time_modified" - ] - }, - "VpcCreate": { - "description": "Create-time parameters for a `Vpc`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "dns_name": { - "$ref": "#/components/schemas/Name" - }, - "ipv6_prefix": { - "nullable": true, - "description": "The IPv6 prefix for this VPC\n\nAll IPv6 subnets created from this VPC must be taken from this range, which should be a Unique Local Address in the range `fd00::/48`. The default VPC Subnet will have the first `/64` range from this prefix.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Net" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "description", - "dns_name", - "name" - ] - }, - "VpcFirewallIcmpFilter": { - "type": "object", - "properties": { - "code": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/IcmpParamRange" - } - ] - }, - "icmp_type": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "icmp_type" - ] - }, - "VpcFirewallRule": { - "description": "A single rule in a VPC firewall", - "type": "object", - "properties": { - "action": { - "description": "Whether traffic matching the rule should be allowed or dropped", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleAction" - } - ] - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "direction": { - "description": "Whether this rule is for incoming or outgoing traffic", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleDirection" - } - ] - }, - "filters": { - "description": "Reductions on the scope of the rule", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleFilter" - } - ] - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "priority": { - "description": "The relative priority of this rule", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "status": { - "description": "Whether this rule is in effect", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleStatus" - } - ] - }, - "targets": { - "description": "Determine the set of instances that the rule applies to", - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleTarget" - } - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "vpc_id": { - "description": "The VPC to which this rule belongs", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "action", - "description", - "direction", - "filters", - "id", - "name", - "priority", - "status", - "targets", - "time_created", - "time_modified", - "vpc_id" - ] - }, - "VpcFirewallRuleAction": { - "type": "string", - "enum": [ - "allow", - "deny" - ] - }, - "VpcFirewallRuleDirection": { - "type": "string", - "enum": [ - "inbound", - "outbound" - ] - }, - "VpcFirewallRuleFilter": { - "description": "Filters reduce the scope of a firewall rule. Without filters, the rule applies to all packets to the targets (or from the targets, if it's an outbound rule). With multiple filters, the rule applies only to packets matching ALL filters. The maximum number of each type of filter is 256.", - "type": "object", - "properties": { - "hosts": { - "nullable": true, - "description": "If present, host filters match the \"other end\" of traffic from the target’s perspective: for an inbound rule, they match the source of traffic. For an outbound rule, they match the destination.", - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleHostFilter" - }, - "maxItems": 256 - }, - "ports": { - "nullable": true, - "description": "If present, the destination ports or port ranges this rule applies to.", - "type": "array", - "items": { - "$ref": "#/components/schemas/L4PortRange" - }, - "maxItems": 256 - }, - "protocols": { - "nullable": true, - "description": "If present, the networking protocols this rule applies to.", - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleProtocol" - }, - "maxItems": 256 - } - } - }, - "VpcFirewallRuleHostFilter": { - "description": "The `VpcFirewallRuleHostFilter` is used to filter traffic on the basis of its source or destination host.", - "oneOf": [ - { - "description": "The rule applies to traffic from/to all instances in the VPC", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to traffic from/to all instances in the VPC Subnet", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to traffic from/to this specific instance", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "instance" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to traffic from/to a specific IP address", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to traffic from/to a specific IP subnet", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip_net" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleProtocol": { - "description": "The protocols that may be specified in a firewall rule's filter", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "tcp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "udp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "icmp" - ] - }, - "value": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallIcmpFilter" - } - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleStatus": { - "type": "string", - "enum": [ - "disabled", - "enabled" - ] - }, - "VpcFirewallRuleTarget": { - "description": "A `VpcFirewallRuleTarget` is used to specify the set of instances to which a firewall rule applies. You can target instances directly by name, or specify a VPC, VPC subnet, IP, or IP subnet, which will apply the rule to traffic going to all matching instances. Targets are additive: the rule applies to instances matching ANY target.", - "oneOf": [ - { - "description": "The rule applies to all instances in the VPC", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to all instances in the VPC Subnet", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to this specific instance", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "instance" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to a specific IP address", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to a specific IP subnet", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip_net" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleUpdate": { - "description": "A single rule in a VPC firewall", - "type": "object", - "properties": { - "action": { - "description": "Whether traffic matching the rule should be allowed or dropped", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleAction" - } - ] - }, - "description": { - "description": "Human-readable free-form text about a resource", - "type": "string" - }, - "direction": { - "description": "Whether this rule is for incoming or outgoing traffic", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleDirection" - } - ] - }, - "filters": { - "description": "Reductions on the scope of the rule", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleFilter" - } - ] - }, - "name": { - "description": "Name of the rule, unique to this VPC", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "priority": { - "description": "The relative priority of this rule", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "status": { - "description": "Whether this rule is in effect", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleStatus" - } - ] - }, - "targets": { - "description": "Determine the set of instances that the rule applies to", - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleTarget" - }, - "maxItems": 256 - } - }, - "required": [ - "action", - "description", - "direction", - "filters", - "name", - "priority", - "status", - "targets" - ] - }, - "VpcFirewallRuleUpdateParams": { - "description": "Updated list of firewall rules. Will replace all existing rules.", - "type": "object", - "properties": { - "rules": { - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleUpdate" - }, - "maxItems": 1024 - } - } - }, - "VpcFirewallRules": { - "description": "Collection of a Vpc's firewall rules", - "type": "object", - "properties": { - "rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRule" - } - } - }, - "required": [ - "rules" - ] - }, - "VpcResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Vpc" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "VpcRouter": { - "description": "A VPC router defines a series of rules that indicate where traffic should be sent depending on its destination.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "kind": { - "$ref": "#/components/schemas/VpcRouterKind" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "vpc_id": { - "description": "The VPC to which the router belongs.", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "description", - "id", - "kind", - "name", - "time_created", - "time_modified", - "vpc_id" - ] - }, - "VpcRouterCreate": { - "description": "Create-time parameters for a `VpcRouter`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "description", - "name" - ] - }, - "VpcRouterKind": { - "type": "string", - "enum": [ - "system", - "custom" - ] - }, - "VpcRouterResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcRouter" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "VpcRouterUpdate": { - "description": "Updateable properties of a `VpcRouter`", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "VpcSubnet": { - "description": "A VPC subnet represents a logical grouping for instances that allows network traffic between them, within a IPv4 subnetwork or optionally an IPv6 subnetwork.", - "type": "object", - "properties": { - "custom_router_id": { - "nullable": true, - "description": "ID for an attached custom router.", - "type": "string", - "format": "uuid" - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "ipv4_block": { - "description": "The IPv4 subnet CIDR block.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv4Net" - } - ] - }, - "ipv6_block": { - "description": "The IPv6 subnet CIDR block.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Net" - } - ] - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "vpc_id": { - "description": "The VPC to which the subnet belongs.", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "description", - "id", - "ipv4_block", - "ipv6_block", - "name", - "time_created", - "time_modified", - "vpc_id" - ] - }, - "VpcSubnetCreate": { - "description": "Create-time parameters for a `VpcSubnet`", - "type": "object", - "properties": { - "custom_router": { - "nullable": true, - "description": "An optional router, used to direct packets sent from hosts in this subnet to any destination address.\n\nCustom routers apply in addition to the VPC-wide *system* router, and have higher priority than the system router for an otherwise equal-prefix-length match.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "description": { - "type": "string" - }, - "ipv4_block": { - "description": "The IPv4 address range for this subnet.\n\nIt must be allocated from an RFC 1918 private address range, and must not overlap with any other existing subnet in the VPC.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv4Net" - } - ] - }, - "ipv6_block": { - "nullable": true, - "description": "The IPv6 address range for this subnet.\n\nIt must be allocated from the RFC 4193 Unique Local Address range, with the prefix equal to the parent VPC's prefix. A random `/64` block will be assigned if one is not provided. It must not overlap with any existing subnet in the VPC.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Net" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "description", - "ipv4_block", - "name" - ] - }, - "VpcSubnetResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcSubnet" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "VpcSubnetUpdate": { - "description": "Updateable properties of a `VpcSubnet`", - "type": "object", - "properties": { - "custom_router": { - "nullable": true, - "description": "An optional router, used to direct packets sent from hosts in this subnet to any destination address.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "description": { - "nullable": true, - "type": "string" - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "VpcUpdate": { - "description": "Updateable properties of a `Vpc`", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "dns_name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "WebhookCreate": { - "description": "Create-time identity-related parameters", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "endpoint": { - "description": "The URL that webhook notification requests should be sent to", - "type": "string", - "format": "uri" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "secrets": { - "description": "A non-empty list of secret keys used to sign webhook payloads.", - "type": "array", - "items": { - "type": "string" - } - }, - "subscriptions": { - "description": "A list of webhook event class subscriptions.\n\nIf this list is empty or is not included in the request body, the webhook will not be subscribed to any events.", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/AlertSubscription" - } - } - }, - "required": [ - "description", - "endpoint", - "name", - "secrets" - ] - }, - "WebhookDeliveryAttempt": { - "description": "An individual delivery attempt for a webhook event.\n\nThis represents a single HTTP request that was sent to the receiver, and its outcome.", - "type": "object", - "properties": { - "attempt": { - "description": "The attempt number.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "response": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/WebhookDeliveryResponse" - } - ] - }, - "result": { - "description": "The outcome of this delivery attempt: either the event was delivered successfully, or the request failed for one of several reasons.", - "allOf": [ - { - "$ref": "#/components/schemas/WebhookDeliveryAttemptResult" - } - ] - }, - "time_sent": { - "description": "The time at which the webhook delivery was attempted.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "attempt", - "result", - "time_sent" - ] - }, - "WebhookDeliveryAttemptResult": { - "oneOf": [ - { - "description": "The webhook event has been delivered successfully.", - "type": "string", - "enum": [ - "succeeded" - ] - }, - { - "description": "A webhook request was sent to the endpoint, and it returned a HTTP error status code indicating an error.", - "type": "string", - "enum": [ - "failed_http_error" - ] - }, - { - "description": "The webhook request could not be sent to the receiver endpoint.", - "type": "string", - "enum": [ - "failed_unreachable" - ] - }, - { - "description": "A connection to the receiver endpoint was successfully established, but no response was received within the delivery timeout.", - "type": "string", - "enum": [ - "failed_timeout" - ] - } - ] - }, - "WebhookDeliveryResponse": { - "description": "The response received from a webhook receiver endpoint.", - "type": "object", - "properties": { - "duration_ms": { - "description": "The response time of the webhook endpoint, in milliseconds.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "status": { - "description": "The HTTP status code returned from the webhook endpoint.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "duration_ms", - "status" - ] - }, - "WebhookReceiver": { - "description": "The configuration for a webhook alert receiver.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "endpoint": { - "description": "The URL that webhook notification requests are sent to.", - "type": "string", - "format": "uri" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "secrets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WebhookSecret" - } - }, - "subscriptions": { - "description": "The list of alert classes to which this receiver is subscribed.", - "type": "array", - "items": { - "$ref": "#/components/schemas/AlertSubscription" - } - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "endpoint", - "id", - "name", - "secrets", - "subscriptions", - "time_created", - "time_modified" - ] - }, - "WebhookReceiverUpdate": { - "description": "Parameters to update a webhook configuration.", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "endpoint": { - "nullable": true, - "description": "The URL that webhook notification requests should be sent to", - "type": "string", - "format": "uri" - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "WebhookSecret": { - "description": "A view of a shared secret key assigned to a webhook receiver.\n\nOnce a secret is created, the value of the secret is not available in the API, as it must remain secret. Instead, secrets are referenced by their unique IDs assigned when they are created.", - "type": "object", - "properties": { - "id": { - "description": "The public unique ID of the secret.", - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "The UTC timestamp at which this secret was created.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "id", - "time_created" - ] - }, - "WebhookSecretCreate": { - "type": "object", - "properties": { - "secret": { - "description": "The value of the shared secret key.", - "type": "string" - } - }, - "required": [ - "secret" - ] - }, - "WebhookSecrets": { - "description": "A list of the IDs of secrets associated with a webhook receiver.", - "type": "object", - "properties": { - "secrets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WebhookSecret" - } - } - }, - "required": [ - "secrets" - ] - }, - "NameOrIdSortMode": { - "description": "Supported set of sort modes for scanning by name or id", - "oneOf": [ - { - "description": "sort in increasing order of \"name\"", - "type": "string", - "enum": [ - "name_ascending" - ] - }, - { - "description": "sort in decreasing order of \"name\"", - "type": "string", - "enum": [ - "name_descending" - ] - }, - { - "description": "sort in increasing order of \"id\"", - "type": "string", - "enum": [ - "id_ascending" - ] - } - ] - }, - "TimeAndIdSortMode": { - "description": "Supported set of sort modes for scanning by timestamp and ID", - "oneOf": [ - { - "description": "sort in increasing order of timestamp and ID, i.e., earliest first", - "type": "string", - "enum": [ - "time_and_id_ascending" - ] - }, - { - "description": "sort in increasing order of timestamp and ID, i.e., most recent first", - "type": "string", - "enum": [ - "time_and_id_descending" - ] - } - ] - }, - "IdSortMode": { - "description": "Supported set of sort modes for scanning by id only.\n\nCurrently, we only support scanning in ascending order.", - "oneOf": [ - { - "description": "sort in increasing order of \"id\"", - "type": "string", - "enum": [ - "id_ascending" - ] - } - ] - }, - "SystemMetricName": { - "type": "string", - "enum": [ - "virtual_disk_space_provisioned", - "cpus_provisioned", - "ram_provisioned" - ] - }, - "PaginationOrder": { - "description": "The order in which the client wants to page through the requested collection", - "type": "string", - "enum": [ - "ascending", - "descending" - ] - }, - "VersionSortMode": { - "description": "Supported sort modes when scanning by semantic version", - "oneOf": [ - { - "description": "Sort in increasing semantic version order (oldest first)", - "type": "string", - "enum": [ - "version_ascending" - ] - }, - { - "description": "Sort in decreasing semantic version order (newest first)", - "type": "string", - "enum": [ - "version_descending" - ] - } - ] - }, - "NameSortMode": { - "description": "Supported set of sort modes for scanning by name only\n\nCurrently, we only support scanning in ascending order.", - "oneOf": [ - { - "description": "sort in increasing order of \"name\"", - "type": "string", - "enum": [ - "name_ascending" - ] - } - ] - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - }, - "tags": [ - { - "name": "affinity", - "description": "Anti-affinity groups give control over instance placement.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/affinity" - } - }, - { - "name": "console-auth", - "description": "API for console authentication", - "externalDocs": { - "url": "http://docs.oxide.computer/api/console-auth" - } - }, - { - "name": "current-user", - "description": "Information pertaining to the current user.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/current-user" - } - }, - { - "name": "disks", - "description": "Virtual disks are used to store instance-local data which includes the operating system.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/disks" - } - }, - { - "name": "experimental", - "description": "Experimental, unstable interfaces, primarily for use by Oxide personnel", - "externalDocs": { - "url": "http://docs.oxide.computer/api/experimental" - } - }, - { - "name": "floating-ips", - "description": "Floating IPs allow a project to allocate well-known IPs to instances.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/floating-ips" - } - }, - { - "name": "images", - "description": "Images are read-only virtual disks that may be used to boot virtual machines.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/images" - } - }, - { - "name": "instances", - "description": "Virtual machine instances are the basic unit of computation. These operations are used for provisioning, controlling, and destroying instances.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/instances" - } - }, - { - "name": "login", - "description": "Authentication endpoints", - "externalDocs": { - "url": "http://docs.oxide.computer/api/login" - } - }, - { - "name": "metrics", - "description": "Silo-scoped metrics", - "externalDocs": { - "url": "http://docs.oxide.computer/api/metrics" - } - }, - { - "name": "multicast-groups", - "description": "Multicast groups provide efficient one-to-many network communication.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/multicast-groups" - } - }, - { - "name": "policy", - "description": "System-wide IAM policy", - "externalDocs": { - "url": "http://docs.oxide.computer/api/policy" - } - }, - { - "name": "projects", - "description": "Projects are a grouping of associated resources such as instances and disks within a silo for purposes of billing and access control.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/projects" - } - }, - { - "name": "silos", - "description": "Silos represent a logical partition of users and resources.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/silos" - } - }, - { - "name": "snapshots", - "description": "Snapshots of virtual disks at a particular point in time.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/snapshots" - } - }, - { - "name": "system/alerts", - "description": "Alerts deliver notifications for events that occur on the Oxide rack", - "externalDocs": { - "url": "http://docs.oxide.computer/api/alerts" - } - }, - { - "name": "system/audit-log", - "description": "These endpoints relate to audit logs.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-audit-log" - } - }, - { - "name": "system/hardware", - "description": "These operations pertain to hardware inventory and management. Racks are the unit of expansion of an Oxide deployment. Racks are in turn composed of sleds, switches, power supplies, and a cabled backplane.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-hardware" - } - }, - { - "name": "system/ip-pools", - "description": "IP pools are collections of external IPs that can be assigned to silos. When a pool is linked to a silo, users in that silo can allocate IPs from the pool for their instances.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-ip-pools" - } - }, - { - "name": "system/metrics", - "description": "Metrics provide insight into the operation of the Oxide deployment. These include telemetry on hardware and software components that can be used to understand the current state as well as to diagnose issues.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-metrics" - } - }, - { - "name": "system/networking", - "description": "This provides rack-level network configuration.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-networking" - } - }, - { - "name": "system/probes", - "description": "Probes for testing network connectivity", - "externalDocs": { - "url": "http://docs.oxide.computer/api/probes" - } - }, - { - "name": "system/silos", - "description": "Silos represent a logical partition of users and resources.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-silos" - } - }, - { - "name": "system/status", - "description": "Endpoints related to system health", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-status" - } - }, - { - "name": "system/update", - "description": "Upload and manage system updates", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-update" - } - }, - { - "name": "tokens", - "description": "API clients use device access tokens for authentication.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/tokens" - } - }, - { - "name": "vpcs", - "description": "Virtual Private Clouds (VPCs) provide isolated network environments for managing and deploying services.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/vpcs" - } - } - ] -} diff --git a/openapi/nexus/nexus-2025112000.0.0-53f3c8.json.gitref b/openapi/nexus/nexus-2025112000.0.0-53f3c8.json.gitref new file mode 100644 index 00000000000..b415dae019e --- /dev/null +++ b/openapi/nexus/nexus-2025112000.0.0-53f3c8.json.gitref @@ -0,0 +1 @@ +f65b0e47d593c7e6a7f328d7130b0361d85cab9a:openapi/nexus/nexus-2025112000.0.0-53f3c8.json \ No newline at end of file diff --git a/openapi/nexus/nexus-2025120300.0.0-dfe193.json b/openapi/nexus/nexus-2025120300.0.0-dfe193.json deleted file mode 100644 index a07c61c30df..00000000000 --- a/openapi/nexus/nexus-2025120300.0.0-dfe193.json +++ /dev/null @@ -1,29233 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Region API", - "description": "API for interacting with the Oxide control plane", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "2025120300.0.0" - }, - "paths": { - "/device/auth": { - "post": { - "tags": [ - "console-auth" - ], - "summary": "Start an OAuth 2.0 Device Authorization Grant", - "description": "This endpoint is designed to be accessed from an *unauthenticated* API client. It generates and records a `device_code` and `user_code` which must be verified and confirmed prior to a token being granted.", - "operationId": "device_auth_request", - "requestBody": { - "content": { - "application/x-www-form-urlencoded": { - "schema": { - "$ref": "#/components/schemas/DeviceAuthRequest" - } - } - }, - "required": true - }, - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/device/confirm": { - "post": { - "tags": [ - "console-auth" - ], - "summary": "Confirm an OAuth 2.0 Device Authorization Grant", - "description": "This endpoint is designed to be accessed by the user agent (browser), not the client requesting the token. So we do not actually return the token here; it will be returned in response to the poll on `/device/token`.\n\nSome special logic applies when authenticating this request with an existing device token instead of a console session: the requested TTL must not produce an expiration time later than the authenticating token's expiration. If no TTL was specified in the initial grant request, the expiration will be the lesser of the silo max and the authenticating token's expiration time. To get the longest allowed lifetime, omit the TTL and authenticate with a web console session.", - "operationId": "device_auth_confirm", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeviceAuthVerify" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/device/token": { - "post": { - "tags": [ - "console-auth" - ], - "summary": "Request a device access token", - "description": "This endpoint should be polled by the client until the user code is verified and the grant is confirmed.", - "operationId": "device_access_token", - "requestBody": { - "content": { - "application/x-www-form-urlencoded": { - "schema": { - "$ref": "#/components/schemas/DeviceAccessTokenRequest" - } - } - }, - "required": true - }, - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/experimental/v1/probes": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List instrumentation probes", - "operationId": "probe_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProbeInfoResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "experimental" - ], - "summary": "Create instrumentation probe", - "operationId": "probe_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProbeCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Probe" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/experimental/v1/probes/{probe}": { - "get": { - "tags": [ - "experimental" - ], - "summary": "View instrumentation probe", - "operationId": "probe_view", - "parameters": [ - { - "in": "path", - "name": "probe", - "description": "Name or ID of the probe", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProbeInfo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "experimental" - ], - "summary": "Delete instrumentation probe", - "operationId": "probe_delete", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "probe", - "description": "Name or ID of the probe", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/experimental/v1/system/support-bundles": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List all support bundles", - "operationId": "support_bundle_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/TimeAndIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleInfoResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "experimental" - ], - "summary": "Create a new support bundle", - "operationId": "support_bundle_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleInfo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/experimental/v1/system/support-bundles/{bundle_id}": { - "get": { - "tags": [ - "experimental" - ], - "summary": "View a support bundle", - "operationId": "support_bundle_view", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleInfo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "experimental" - ], - "summary": "Update a support bundle", - "operationId": "support_bundle_update", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleInfo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "experimental" - ], - "summary": "Delete an existing support bundle", - "description": "May also be used to cancel a support bundle which is currently being collected, or to remove metadata for a support bundle that has failed.", - "operationId": "support_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/experimental/v1/system/support-bundles/{bundle_id}/download": { - "get": { - "tags": [ - "experimental" - ], - "summary": "Download the contents of a support bundle", - "operationId": "support_bundle_download", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "tags": [ - "experimental" - ], - "summary": "Download the metadata of a support bundle", - "operationId": "support_bundle_head", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/experimental/v1/system/support-bundles/{bundle_id}/download/{file}": { - "get": { - "tags": [ - "experimental" - ], - "summary": "Download a file within a support bundle", - "operationId": "support_bundle_download_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The file within the bundle to download", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "tags": [ - "experimental" - ], - "summary": "Download the metadata of a file within the support bundle", - "operationId": "support_bundle_head_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The file within the bundle to download", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/experimental/v1/system/support-bundles/{bundle_id}/index": { - "get": { - "tags": [ - "experimental" - ], - "summary": "Download the index of a support bundle", - "operationId": "support_bundle_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "bundle_id", - "description": "ID of the support bundle", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/login/{silo_name}/saml/{provider_name}": { - "post": { - "tags": [ - "login" - ], - "summary": "Authenticate a user via SAML", - "operationId": "login_saml", - "parameters": [ - { - "in": "path", - "name": "provider_name", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "path", - "name": "silo_name", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "303": { - "description": "redirect (see other)", - "headers": { - "location": { - "description": "HTTP \"Location\" header", - "style": "simple", - "required": true, - "schema": { - "type": "string" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/affinity-groups": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List affinity groups", - "operationId": "affinity_group_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroupResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "experimental" - ], - "summary": "Create affinity group", - "operationId": "affinity_group_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroupCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/affinity-groups/{affinity_group}": { - "get": { - "tags": [ - "experimental" - ], - "summary": "Fetch affinity group", - "operationId": "affinity_group_view", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "affinity_group", - "description": "Name or ID of the affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "experimental" - ], - "summary": "Update affinity group", - "operationId": "affinity_group_update", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "affinity_group", - "description": "Name or ID of the affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroupUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "experimental" - ], - "summary": "Delete affinity group", - "operationId": "affinity_group_delete", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "affinity_group", - "description": "Name or ID of the affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/affinity-groups/{affinity_group}/members": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List affinity group members", - "operationId": "affinity_group_member_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "path", - "name": "affinity_group", - "description": "Name or ID of the affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroupMemberResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/affinity-groups/{affinity_group}/members/instance/{instance}": { - "get": { - "tags": [ - "experimental" - ], - "summary": "Fetch affinity group member", - "operationId": "affinity_group_member_instance_view", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "affinity_group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroupMember" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "tags": [ - "experimental" - ], - "summary": "Add member to affinity group", - "operationId": "affinity_group_member_instance_add", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "affinity_group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroupMember" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "experimental" - ], - "summary": "Remove member from affinity group", - "operationId": "affinity_group_member_instance_delete", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "affinity_group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/alert-classes": { - "get": { - "tags": [ - "system/alerts" - ], - "summary": "List alert classes", - "operationId": "alert_class_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "filter", - "description": "An optional glob pattern for filtering alert class names.\n\nIf provided, only alert classes which match this glob pattern will be included in the response.", - "schema": { - "$ref": "#/components/schemas/AlertSubscription" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertClassResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/alert-receivers": { - "get": { - "tags": [ - "system/alerts" - ], - "summary": "List alert receivers", - "operationId": "alert_receiver_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertReceiverResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/alert-receivers/{receiver}": { - "get": { - "tags": [ - "system/alerts" - ], - "summary": "Fetch alert receiver", - "operationId": "alert_receiver_view", - "parameters": [ - { - "in": "path", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertReceiver" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/alerts" - ], - "summary": "Delete alert receiver", - "operationId": "alert_receiver_delete", - "parameters": [ - { - "in": "path", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/alert-receivers/{receiver}/deliveries": { - "get": { - "tags": [ - "system/alerts" - ], - "summary": "List delivery attempts to alert receiver", - "description": "Optional query parameters to this endpoint may be used to filter deliveries by state. If none of the `failed`, `pending` or `delivered` query parameters are present, all deliveries are returned. If one or more of these parameters are provided, only those which are set to \"true\" are included in the response.", - "operationId": "alert_delivery_list", - "parameters": [ - { - "in": "path", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "delivered", - "description": "If true, include deliveries which have succeeded.\n\nIf any of the \"pending\", \"failed\", or \"delivered\" query parameters are set to true, only deliveries matching those state(s) will be included in the response. If NO state filter parameters are set, then all deliveries are included.", - "schema": { - "nullable": true, - "type": "boolean" - } - }, - { - "in": "query", - "name": "failed", - "description": "If true, include deliveries which have failed permanently.\n\nIf any of the \"pending\", \"failed\", or \"delivered\" query parameters are set to true, only deliveries matching those state(s) will be included in the response. If NO state filter parameters are set, then all deliveries are included.\n\nA delivery fails permanently when the retry limit of three total attempts is reached without a successful delivery.", - "schema": { - "nullable": true, - "type": "boolean" - } - }, - { - "in": "query", - "name": "pending", - "description": "If true, include deliveries which are currently in progress.\n\nIf any of the \"pending\", \"failed\", or \"delivered\" query parameters are set to true, only deliveries matching those state(s) will be included in the response. If NO state filter parameters are set, then all deliveries are included.\n\nA delivery is considered \"pending\" if it has not yet been sent at all, or if a delivery attempt has failed but the delivery has retries remaining.", - "schema": { - "nullable": true, - "type": "boolean" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/TimeAndIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertDeliveryResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/alert-receivers/{receiver}/probe": { - "post": { - "tags": [ - "system/alerts" - ], - "summary": "Send liveness probe to alert receiver", - "description": "This endpoint synchronously sends a liveness probe to the selected alert receiver. The response message describes the outcome of the probe: either the successful response (as appropriate), or indication of why the probe failed.\n\nThe result of the probe is represented as an `AlertDelivery` model. Details relating to the status of the probe depend on the alert delivery mechanism, and are included in the `AlertDeliveryAttempts` model. For example, webhook receiver liveness probes include the HTTP status code returned by the receiver endpoint.\n\nNote that the response status is `200 OK` as long as a probe request was able to be sent to the receiver endpoint. If an HTTP-based receiver, such as a webhook, responds to the another status code, including an error, this will be indicated by the response body, *not* the status of the response.\n\nThe `resend` query parameter can be used to request re-delivery of failed events if the liveness probe succeeds. If it is set to true and the liveness probe succeeds, any alerts for which delivery to this receiver has failed will be queued for re-delivery.", - "operationId": "alert_receiver_probe", - "parameters": [ - { - "in": "path", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "resend", - "description": "If true, resend all events that have not been delivered successfully if the probe request succeeds.", - "schema": { - "type": "boolean" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertProbeResult" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/alert-receivers/{receiver}/subscriptions": { - "post": { - "tags": [ - "system/alerts" - ], - "summary": "Add alert receiver subscription", - "operationId": "alert_receiver_subscription_add", - "parameters": [ - { - "in": "path", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertSubscriptionCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertSubscriptionCreated" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/alert-receivers/{receiver}/subscriptions/{subscription}": { - "delete": { - "tags": [ - "system/alerts" - ], - "summary": "Remove alert receiver subscription", - "operationId": "alert_receiver_subscription_remove", - "parameters": [ - { - "in": "path", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "subscription", - "description": "The event class subscription itself.", - "required": true, - "schema": { - "$ref": "#/components/schemas/AlertSubscription" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/alerts/{alert_id}/resend": { - "post": { - "tags": [ - "system/alerts" - ], - "summary": "Request re-delivery of alert", - "operationId": "alert_delivery_resend", - "parameters": [ - { - "in": "path", - "name": "alert_id", - "description": "UUID of the alert", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AlertDeliveryId" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/anti-affinity-groups": { - "get": { - "tags": [ - "affinity" - ], - "summary": "List anti-affinity groups", - "operationId": "anti_affinity_group_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroupResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "affinity" - ], - "summary": "Create anti-affinity group", - "operationId": "anti_affinity_group_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroupCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/anti-affinity-groups/{anti_affinity_group}": { - "get": { - "tags": [ - "affinity" - ], - "summary": "Fetch anti-affinity group", - "operationId": "anti_affinity_group_view", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "anti_affinity_group", - "description": "Name or ID of the anti affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "affinity" - ], - "summary": "Update anti-affinity group", - "operationId": "anti_affinity_group_update", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "anti_affinity_group", - "description": "Name or ID of the anti affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroupUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "affinity" - ], - "summary": "Delete anti-affinity group", - "operationId": "anti_affinity_group_delete", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "anti_affinity_group", - "description": "Name or ID of the anti affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/anti-affinity-groups/{anti_affinity_group}/members": { - "get": { - "tags": [ - "affinity" - ], - "summary": "List anti-affinity group members", - "operationId": "anti_affinity_group_member_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "path", - "name": "anti_affinity_group", - "description": "Name or ID of the anti affinity group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroupMemberResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/anti-affinity-groups/{anti_affinity_group}/members/instance/{instance}": { - "get": { - "tags": [ - "affinity" - ], - "summary": "Fetch anti-affinity group member", - "operationId": "anti_affinity_group_member_instance_view", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "anti_affinity_group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroupMember" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "tags": [ - "affinity" - ], - "summary": "Add member to anti-affinity group", - "operationId": "anti_affinity_group_member_instance_add", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "anti_affinity_group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroupMember" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "affinity" - ], - "summary": "Remove member from anti-affinity group", - "operationId": "anti_affinity_group_member_instance_delete", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "anti_affinity_group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/auth-settings": { - "get": { - "tags": [ - "silos" - ], - "summary": "Fetch current silo's auth settings", - "operationId": "auth_settings_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloAuthSettings" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "silos" - ], - "summary": "Update current silo's auth settings", - "operationId": "auth_settings_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloAuthSettingsUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloAuthSettings" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/certificates": { - "get": { - "tags": [ - "silos" - ], - "summary": "List certificates for external endpoints", - "description": "Returns a list of TLS certificates used for the external API (for the current Silo). These are sorted by creation date, with the most recent certificates appearing first.", - "operationId": "certificate_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CertificateResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "silos" - ], - "summary": "Create new system-wide x.509 certificate", - "description": "This certificate is automatically used by the Oxide Control plane to serve external connections.", - "operationId": "certificate_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CertificateCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Certificate" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/certificates/{certificate}": { - "get": { - "tags": [ - "silos" - ], - "summary": "Fetch certificate", - "description": "Returns the details of a specific certificate", - "operationId": "certificate_view", - "parameters": [ - { - "in": "path", - "name": "certificate", - "description": "Name or ID of the certificate", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Certificate" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "silos" - ], - "summary": "Delete certificate", - "description": "Permanently delete a certificate. This operation cannot be undone.", - "operationId": "certificate_delete", - "parameters": [ - { - "in": "path", - "name": "certificate", - "description": "Name or ID of the certificate", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/disks": { - "get": { - "tags": [ - "disks" - ], - "summary": "List disks", - "operationId": "disk_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "disks" - ], - "summary": "Create a disk", - "operationId": "disk_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Disk" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/disks/{disk}": { - "get": { - "tags": [ - "disks" - ], - "summary": "Fetch disk", - "operationId": "disk_view", - "parameters": [ - { - "in": "path", - "name": "disk", - "description": "Name or ID of the disk", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Disk" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "disks" - ], - "summary": "Delete disk", - "operationId": "disk_delete", - "parameters": [ - { - "in": "path", - "name": "disk", - "description": "Name or ID of the disk", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/disks/{disk}/bulk-write": { - "post": { - "tags": [ - "disks" - ], - "summary": "Import blocks into disk", - "operationId": "disk_bulk_write_import", - "parameters": [ - { - "in": "path", - "name": "disk", - "description": "Name or ID of the disk", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ImportBlocksBulkWrite" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/disks/{disk}/bulk-write-start": { - "post": { - "tags": [ - "disks" - ], - "summary": "Start importing blocks into disk", - "description": "Start the process of importing blocks into a disk", - "operationId": "disk_bulk_write_import_start", - "parameters": [ - { - "in": "path", - "name": "disk", - "description": "Name or ID of the disk", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/disks/{disk}/bulk-write-stop": { - "post": { - "tags": [ - "disks" - ], - "summary": "Stop importing blocks into disk", - "description": "Stop the process of importing blocks into a disk", - "operationId": "disk_bulk_write_import_stop", - "parameters": [ - { - "in": "path", - "name": "disk", - "description": "Name or ID of the disk", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/disks/{disk}/finalize": { - "post": { - "tags": [ - "disks" - ], - "summary": "Confirm disk block import completion", - "operationId": "disk_finalize_import", - "parameters": [ - { - "in": "path", - "name": "disk", - "description": "Name or ID of the disk", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FinalizeDisk" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/floating-ips": { - "get": { - "tags": [ - "floating-ips" - ], - "summary": "List floating IPs", - "operationId": "floating_ip_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIpResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "floating-ips" - ], - "summary": "Create floating IP", - "operationId": "floating_ip_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIpCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIp" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/floating-ips/{floating_ip}": { - "get": { - "tags": [ - "floating-ips" - ], - "summary": "Fetch floating IP", - "operationId": "floating_ip_view", - "parameters": [ - { - "in": "path", - "name": "floating_ip", - "description": "Name or ID of the floating IP", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIp" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "floating-ips" - ], - "summary": "Update floating IP", - "operationId": "floating_ip_update", - "parameters": [ - { - "in": "path", - "name": "floating_ip", - "description": "Name or ID of the floating IP", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIpUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIp" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "floating-ips" - ], - "summary": "Delete floating IP", - "operationId": "floating_ip_delete", - "parameters": [ - { - "in": "path", - "name": "floating_ip", - "description": "Name or ID of the floating IP", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/floating-ips/{floating_ip}/attach": { - "post": { - "tags": [ - "floating-ips" - ], - "summary": "Attach floating IP", - "description": "Attach floating IP to an instance or other resource.", - "operationId": "floating_ip_attach", - "parameters": [ - { - "in": "path", - "name": "floating_ip", - "description": "Name or ID of the floating IP", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIpAttach" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIp" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/floating-ips/{floating_ip}/detach": { - "post": { - "tags": [ - "floating-ips" - ], - "summary": "Detach floating IP", - "operationId": "floating_ip_detach", - "parameters": [ - { - "in": "path", - "name": "floating_ip", - "description": "Name or ID of the floating IP", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FloatingIp" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/groups": { - "get": { - "tags": [ - "silos" - ], - "summary": "List groups", - "operationId": "group_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GroupResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/groups/{group_id}": { - "get": { - "tags": [ - "silos" - ], - "summary": "Fetch group", - "operationId": "group_view", - "parameters": [ - { - "in": "path", - "name": "group_id", - "description": "ID of the group", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Group" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/images": { - "get": { - "tags": [ - "images" - ], - "summary": "List images", - "description": "List images which are global or scoped to the specified project. The images are returned sorted by creation date, with the most recent images appearing first.", - "operationId": "image_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ImageResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "images" - ], - "summary": "Create image", - "description": "Create a new image in a project.", - "operationId": "image_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ImageCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Image" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/images/{image}": { - "get": { - "tags": [ - "images" - ], - "summary": "Fetch image", - "description": "Fetch the details for a specific image in a project.", - "operationId": "image_view", - "parameters": [ - { - "in": "path", - "name": "image", - "description": "Name or ID of the image", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Image" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "images" - ], - "summary": "Delete image", - "description": "Permanently delete an image from a project. This operation cannot be undone. Any instances in the project using the image will continue to run, however new instances can not be created with this image.", - "operationId": "image_delete", - "parameters": [ - { - "in": "path", - "name": "image", - "description": "Name or ID of the image", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/images/{image}/demote": { - "post": { - "tags": [ - "images" - ], - "summary": "Demote silo image", - "description": "Demote silo image to be visible only to a specified project", - "operationId": "image_demote", - "parameters": [ - { - "in": "path", - "name": "image", - "description": "Name or ID of the image", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Image" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/images/{image}/promote": { - "post": { - "tags": [ - "images" - ], - "summary": "Promote project image", - "description": "Promote project image to be visible to all projects in the silo", - "operationId": "image_promote", - "parameters": [ - { - "in": "path", - "name": "image", - "description": "Name or ID of the image", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Image" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances": { - "get": { - "tags": [ - "instances" - ], - "summary": "List instances", - "operationId": "instance_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "instances" - ], - "summary": "Create instance", - "operationId": "instance_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Instance" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}": { - "get": { - "tags": [ - "instances" - ], - "summary": "Fetch instance", - "operationId": "instance_view", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Instance" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "instances" - ], - "summary": "Update instance", - "operationId": "instance_update", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Instance" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "instances" - ], - "summary": "Delete instance", - "operationId": "instance_delete", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/affinity-groups": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List affinity groups containing instance", - "operationId": "instance_affinity_group_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AffinityGroupResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/instances/{instance}/anti-affinity-groups": { - "get": { - "tags": [ - "instances" - ], - "summary": "List anti-affinity groups containing instance", - "operationId": "instance_anti_affinity_group_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AntiAffinityGroupResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/instances/{instance}/disks": { - "get": { - "tags": [ - "instances" - ], - "summary": "List disks for instance", - "operationId": "instance_disk_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/instances/{instance}/disks/attach": { - "post": { - "tags": [ - "instances" - ], - "summary": "Attach disk to instance", - "operationId": "instance_disk_attach", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskPath" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Disk" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/disks/detach": { - "post": { - "tags": [ - "instances" - ], - "summary": "Detach disk from instance", - "operationId": "instance_disk_detach", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskPath" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Disk" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/external-ips": { - "get": { - "tags": [ - "instances" - ], - "summary": "List external IP addresses", - "operationId": "instance_external_ip_list", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIpResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/external-ips/ephemeral": { - "post": { - "tags": [ - "instances" - ], - "summary": "Allocate and attach ephemeral IP to instance", - "operationId": "instance_ephemeral_ip_attach", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EphemeralIpCreate" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIp" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "instances" - ], - "summary": "Detach and deallocate ephemeral IP from instance", - "operationId": "instance_ephemeral_ip_detach", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/multicast-groups": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List multicast groups for instance", - "operationId": "instance_multicast_group_list", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupMemberResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/multicast-groups/{multicast_group}": { - "put": { - "tags": [ - "experimental" - ], - "summary": "Join multicast group.", - "description": "This is functionally equivalent to adding the instance via the group's member management endpoint or updating the instance's `multicast_groups` field. All approaches modify the same membership and trigger reconciliation.", - "operationId": "instance_multicast_group_join", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupMember" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "experimental" - ], - "summary": "Leave multicast group.", - "description": "This is functionally equivalent to removing the instance via the group's member management endpoint or updating the instance's `multicast_groups` field. All approaches modify the same membership and trigger reconciliation.", - "operationId": "instance_multicast_group_leave", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/reboot": { - "post": { - "tags": [ - "instances" - ], - "summary": "Reboot an instance", - "operationId": "instance_reboot", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Instance" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/serial-console": { - "get": { - "tags": [ - "instances" - ], - "summary": "Fetch instance serial console", - "operationId": "instance_serial_console", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "from_start", - "description": "Character index in the serial buffer from which to read, counting the bytes output since instance start. If this is not provided, `most_recent` must be provided, and if this *is* provided, `most_recent` must *not* be provided.", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - { - "in": "query", - "name": "max_bytes", - "description": "Maximum number of bytes of buffered serial console contents to return. If the requested range runs to the end of the available buffer, the data returned will be shorter than `max_bytes`.", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - { - "in": "query", - "name": "most_recent", - "description": "Character index in the serial buffer from which to read, counting *backward* from the most recently buffered data retrieved from the instance. (See note on `from_start` about mutual exclusivity)", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `instance` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceSerialConsoleData" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/serial-console/stream": { - "get": { - "tags": [ - "instances" - ], - "summary": "Stream instance serial console", - "operationId": "instance_serial_console_stream", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "most_recent", - "description": "Character index in the serial buffer from which to read, counting *backward* from the most recently buffered data retrieved from the instance.", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `instance` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - }, - "x-dropshot-websocket": {} - } - }, - "/v1/instances/{instance}/ssh-public-keys": { - "get": { - "tags": [ - "instances" - ], - "summary": "List SSH public keys for instance", - "description": "List SSH public keys injected via cloud-init during instance creation. Note that this list is a snapshot in time and will not reflect updates made after the instance is created.", - "operationId": "instance_ssh_public_key_list", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SshKeyResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/instances/{instance}/start": { - "post": { - "tags": [ - "instances" - ], - "summary": "Boot instance", - "operationId": "instance_start", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Instance" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/instances/{instance}/stop": { - "post": { - "tags": [ - "instances" - ], - "summary": "Stop instance", - "operationId": "instance_stop", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Instance" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/internet-gateway-ip-addresses": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List IP addresses attached to internet gateway", - "operationId": "internet_gateway_ip_address_list", - "parameters": [ - { - "in": "query", - "name": "gateway", - "description": "Name or ID of the internet gateway", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `gateway` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayIpAddressResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "gateway" - ] - } - }, - "post": { - "tags": [ - "vpcs" - ], - "summary": "Attach IP address to internet gateway", - "operationId": "internet_gateway_ip_address_create", - "parameters": [ - { - "in": "query", - "name": "gateway", - "description": "Name or ID of the internet gateway", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `gateway` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayIpAddressCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayIpAddress" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/internet-gateway-ip-addresses/{address}": { - "delete": { - "tags": [ - "vpcs" - ], - "summary": "Detach IP address from internet gateway", - "operationId": "internet_gateway_ip_address_delete", - "parameters": [ - { - "in": "path", - "name": "address", - "description": "Name or ID of the IP address", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "cascade", - "description": "Also delete routes targeting this gateway element.", - "schema": { - "type": "boolean" - } - }, - { - "in": "query", - "name": "gateway", - "description": "Name or ID of the internet gateway", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `gateway` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/internet-gateway-ip-pools": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List IP pools attached to internet gateway", - "operationId": "internet_gateway_ip_pool_list", - "parameters": [ - { - "in": "query", - "name": "gateway", - "description": "Name or ID of the internet gateway", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `gateway` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayIpPoolResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "gateway" - ] - } - }, - "post": { - "tags": [ - "vpcs" - ], - "summary": "Attach IP pool to internet gateway", - "operationId": "internet_gateway_ip_pool_create", - "parameters": [ - { - "in": "query", - "name": "gateway", - "description": "Name or ID of the internet gateway", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `gateway` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayIpPoolCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayIpPool" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/internet-gateway-ip-pools/{pool}": { - "delete": { - "tags": [ - "vpcs" - ], - "summary": "Detach IP pool from internet gateway", - "operationId": "internet_gateway_ip_pool_delete", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "cascade", - "description": "Also delete routes targeting this gateway element.", - "schema": { - "type": "boolean" - } - }, - { - "in": "query", - "name": "gateway", - "description": "Name or ID of the internet gateway", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `gateway` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/internet-gateways": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List internet gateways", - "operationId": "internet_gateway_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "vpc" - ] - } - }, - "post": { - "tags": [ - "vpcs" - ], - "summary": "Create VPC internet gateway", - "operationId": "internet_gateway_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGatewayCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGateway" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/internet-gateways/{gateway}": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "Fetch internet gateway", - "operationId": "internet_gateway_view", - "parameters": [ - { - "in": "path", - "name": "gateway", - "description": "Name or ID of the gateway", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InternetGateway" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "vpcs" - ], - "summary": "Delete internet gateway", - "operationId": "internet_gateway_delete", - "parameters": [ - { - "in": "path", - "name": "gateway", - "description": "Name or ID of the gateway", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "cascade", - "description": "Also delete routes targeting this gateway.", - "schema": { - "type": "boolean" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/ip-pools": { - "get": { - "tags": [ - "projects" - ], - "summary": "List IP pools", - "operationId": "project_ip_pool_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloIpPoolResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/ip-pools/{pool}": { - "get": { - "tags": [ - "projects" - ], - "summary": "Fetch IP pool", - "operationId": "project_ip_pool_view", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloIpPool" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/login/{silo_name}/local": { - "post": { - "tags": [ - "login" - ], - "summary": "Authenticate a user via username and password", - "operationId": "login_local", - "parameters": [ - { - "in": "path", - "name": "silo_name", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UsernamePasswordCredentials" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/logout": { - "post": { - "tags": [ - "console-auth" - ], - "summary": "Log user out of web console by deleting session on client and server", - "operationId": "logout", - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/me": { - "get": { - "tags": [ - "current-user" - ], - "summary": "Fetch user for current session", - "operationId": "current_user_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CurrentUser" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/me/access-tokens": { - "get": { - "tags": [ - "tokens" - ], - "summary": "List access tokens", - "description": "List device access tokens for the currently authenticated user.", - "operationId": "current_user_access_token_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeviceAccessTokenResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/me/access-tokens/{token_id}": { - "delete": { - "tags": [ - "tokens" - ], - "summary": "Delete access token", - "description": "Delete a device access token for the currently authenticated user.", - "operationId": "current_user_access_token_delete", - "parameters": [ - { - "in": "path", - "name": "token_id", - "description": "ID of the token", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/me/groups": { - "get": { - "tags": [ - "current-user" - ], - "summary": "Fetch current user's groups", - "operationId": "current_user_groups", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/GroupResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/me/ssh-keys": { - "get": { - "tags": [ - "current-user" - ], - "summary": "List SSH public keys", - "description": "Lists SSH public keys for the currently authenticated user.", - "operationId": "current_user_ssh_key_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SshKeyResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "current-user" - ], - "summary": "Create SSH public key", - "description": "Create an SSH public key for the currently authenticated user.", - "operationId": "current_user_ssh_key_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SshKeyCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SshKey" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/me/ssh-keys/{ssh_key}": { - "get": { - "tags": [ - "current-user" - ], - "summary": "Fetch SSH public key", - "description": "Fetch SSH public key associated with the currently authenticated user.", - "operationId": "current_user_ssh_key_view", - "parameters": [ - { - "in": "path", - "name": "ssh_key", - "description": "Name or ID of the SSH key", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SshKey" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "current-user" - ], - "summary": "Delete SSH public key", - "description": "Delete an SSH public key associated with the currently authenticated user.", - "operationId": "current_user_ssh_key_delete", - "parameters": [ - { - "in": "path", - "name": "ssh_key", - "description": "Name or ID of the SSH key", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/metrics/{metric_name}": { - "get": { - "tags": [ - "metrics" - ], - "summary": "View metrics", - "description": "View CPU, memory, or storage utilization metrics at the silo or project level.", - "operationId": "silo_metric", - "parameters": [ - { - "in": "path", - "name": "metric_name", - "required": true, - "schema": { - "$ref": "#/components/schemas/SystemMetricName" - } - }, - { - "in": "query", - "name": "end_time", - "description": "An exclusive end time of metrics.", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "order", - "description": "Query result order", - "schema": { - "$ref": "#/components/schemas/PaginationOrder" - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "start_time", - "description": "An inclusive start time of metrics.", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MeasurementResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "end_time", - "start_time" - ] - } - } - }, - "/v1/multicast-groups": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List all multicast groups.", - "operationId": "multicast_group_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "experimental" - ], - "summary": "Create a multicast group.", - "description": "Multicast groups are fleet-scoped resources that can be joined by instances across projects and silos. A single multicast IP serves all group members regardless of project or silo boundaries.", - "operationId": "multicast_group_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/multicast-groups/{multicast_group}": { - "get": { - "tags": [ - "experimental" - ], - "summary": "Fetch a multicast group.", - "operationId": "multicast_group_view", - "parameters": [ - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "experimental" - ], - "summary": "Update a multicast group.", - "operationId": "multicast_group_update", - "parameters": [ - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "experimental" - ], - "summary": "Delete a multicast group.", - "operationId": "multicast_group_delete", - "parameters": [ - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/multicast-groups/{multicast_group}/members": { - "get": { - "tags": [ - "experimental" - ], - "summary": "List members of a multicast group.", - "operationId": "multicast_group_member_list", - "parameters": [ - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupMemberResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "experimental" - ], - "summary": "Add instance to a multicast group.", - "description": "Functionally equivalent to updating the instance's `multicast_groups` field. Both approaches modify the same underlying membership and trigger the same reconciliation logic.\n\nSpecify instance by name (requires `?project=`) or UUID.", - "operationId": "multicast_group_member_add", - "parameters": [ - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupMemberAdd" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroupMember" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/multicast-groups/{multicast_group}/members/{instance}": { - "delete": { - "tags": [ - "experimental" - ], - "summary": "Remove instance from a multicast group.", - "description": "Functionally equivalent to removing the group from the instance's `multicast_groups` field. Both approaches modify the same underlying membership and trigger reconciliation.\n\nSpecify instance by name (requires `?project=`) or UUID.", - "operationId": "multicast_group_member_remove", - "parameters": [ - { - "in": "path", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "multicast_group", - "description": "Name or ID of the multicast group", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/network-interfaces": { - "get": { - "tags": [ - "instances" - ], - "summary": "List network interfaces", - "operationId": "instance_network_interface_list", - "parameters": [ - { - "in": "query", - "name": "instance", - "description": "Name or ID of the instance", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `instance` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceNetworkInterfaceResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "instance" - ] - } - }, - "post": { - "tags": [ - "instances" - ], - "summary": "Create network interface", - "operationId": "instance_network_interface_create", - "parameters": [ - { - "in": "query", - "name": "instance", - "description": "Name or ID of the instance", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `instance` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceNetworkInterfaceCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceNetworkInterface" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/network-interfaces/{interface}": { - "get": { - "tags": [ - "instances" - ], - "summary": "Fetch network interface", - "operationId": "instance_network_interface_view", - "parameters": [ - { - "in": "path", - "name": "interface", - "description": "Name or ID of the network interface", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "instance", - "description": "Name or ID of the instance", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `instance` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceNetworkInterface" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "instances" - ], - "summary": "Update network interface", - "operationId": "instance_network_interface_update", - "parameters": [ - { - "in": "path", - "name": "interface", - "description": "Name or ID of the network interface", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "instance", - "description": "Name or ID of the instance", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `instance` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceNetworkInterfaceUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceNetworkInterface" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "instances" - ], - "summary": "Delete network interface", - "description": "Note that the primary interface for an instance cannot be deleted if there are any secondary interfaces. A new primary interface must be designated first. The primary interface can be deleted if there are no secondary interfaces.", - "operationId": "instance_network_interface_delete", - "parameters": [ - { - "in": "path", - "name": "interface", - "description": "Name or ID of the network interface", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "instance", - "description": "Name or ID of the instance", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `instance` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/ping": { - "get": { - "tags": [ - "system/status" - ], - "summary": "Ping API", - "description": "Always responds with Ok if it responds at all.", - "operationId": "ping", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Ping" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/policy": { - "get": { - "tags": [ - "silos" - ], - "summary": "Fetch current silo's IAM policy", - "operationId": "policy_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "silos" - ], - "summary": "Update current silo's IAM policy", - "operationId": "policy_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/projects": { - "get": { - "tags": [ - "projects" - ], - "summary": "List projects", - "operationId": "project_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "projects" - ], - "summary": "Create project", - "operationId": "project_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/projects/{project}": { - "get": { - "tags": [ - "projects" - ], - "summary": "Fetch project", - "operationId": "project_view", - "parameters": [ - { - "in": "path", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "projects" - ], - "summary": "Update a project", - "operationId": "project_update", - "parameters": [ - { - "in": "path", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Project" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "projects" - ], - "summary": "Delete project", - "operationId": "project_delete", - "parameters": [ - { - "in": "path", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/projects/{project}/policy": { - "get": { - "tags": [ - "projects" - ], - "summary": "Fetch project's IAM policy", - "operationId": "project_policy_view", - "parameters": [ - { - "in": "path", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "projects" - ], - "summary": "Update project's IAM policy", - "operationId": "project_policy_update", - "parameters": [ - { - "in": "path", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectRolePolicy" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProjectRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/snapshots": { - "get": { - "tags": [ - "snapshots" - ], - "summary": "List snapshots", - "operationId": "snapshot_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SnapshotResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "snapshots" - ], - "summary": "Create snapshot", - "description": "Creates a point-in-time snapshot from a disk.", - "operationId": "snapshot_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SnapshotCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Snapshot" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/snapshots/{snapshot}": { - "get": { - "tags": [ - "snapshots" - ], - "summary": "Fetch snapshot", - "operationId": "snapshot_view", - "parameters": [ - { - "in": "path", - "name": "snapshot", - "description": "Name or ID of the snapshot", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Snapshot" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "snapshots" - ], - "summary": "Delete snapshot", - "operationId": "snapshot_delete", - "parameters": [ - { - "in": "path", - "name": "snapshot", - "description": "Name or ID of the snapshot", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/audit-log": { - "get": { - "tags": [ - "system/audit-log" - ], - "summary": "View audit log", - "description": "A single item in the audit log represents both the beginning and end of the logged operation (represented by `time_started` and `time_completed`) so that clients do not have to find multiple entries and match them up by request ID to get the full picture of an operation. Because timestamps may not be unique, entries have also have a unique `id` that can be used to deduplicate items fetched from overlapping time intervals.\n\nAudit log entries are designed to be immutable: once you see an entry, fetching it again will never get you a different result. The list is ordered by `time_completed`, not `time_started`. If you fetch the audit log for a time range that is fully in the past, the resulting list is guaranteed to be complete, i.e., fetching the same timespan again later will always produce the same set of entries.", - "operationId": "audit_log_list", - "parameters": [ - { - "in": "query", - "name": "end_time", - "description": "Exclusive", - "schema": { - "nullable": true, - "type": "string", - "format": "date-time" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/TimeAndIdSortMode" - } - }, - { - "in": "query", - "name": "start_time", - "description": "Required, inclusive", - "schema": { - "type": "string", - "format": "date-time" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AuditLogEntryResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "start_time" - ] - } - } - }, - "/v1/system/hardware/disks": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List physical disks", - "operationId": "physical_disk_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PhysicalDiskResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/disks/{disk_id}": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "Get a physical disk", - "operationId": "physical_disk_view", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "description": "ID of the physical disk", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PhysicalDisk" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/rack-switch-port/{rack_id}/{switch_location}/{port}/lldp/neighbors": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Fetch the LLDP neighbors seen on a switch port", - "operationId": "networking_switch_port_lldp_neighbors", - "parameters": [ - { - "in": "path", - "name": "port", - "description": "A name to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "path", - "name": "rack_id", - "description": "A rack id to use when selecting switch ports.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "switch_location", - "description": "A switch location to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LldpNeighborResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/racks": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List racks", - "operationId": "rack_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RackResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/racks/{rack_id}": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "Fetch rack", - "operationId": "rack_view", - "parameters": [ - { - "in": "path", - "name": "rack_id", - "description": "ID of the rack", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Rack" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/sleds": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List sleds", - "operationId": "sled_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/hardware" - ], - "summary": "Add sled to initialized rack", - "operationId": "sled_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UninitializedSledId" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledId" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/sleds/{sled_id}": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "Fetch sled", - "operationId": "sled_view", - "parameters": [ - { - "in": "path", - "name": "sled_id", - "description": "ID of the sled", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Sled" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/sleds/{sled_id}/disks": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List physical disks attached to sleds", - "operationId": "sled_physical_disk_list", - "parameters": [ - { - "in": "path", - "name": "sled_id", - "description": "ID of the sled", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/PhysicalDiskResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/sleds/{sled_id}/instances": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List instances running on given sled", - "operationId": "sled_instance_list", - "parameters": [ - { - "in": "path", - "name": "sled_id", - "description": "ID of the sled", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledInstanceResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/sleds/{sled_id}/provision-policy": { - "put": { - "tags": [ - "system/hardware" - ], - "summary": "Set sled provision policy", - "operationId": "sled_set_provision_policy", - "parameters": [ - { - "in": "path", - "name": "sled_id", - "description": "ID of the sled", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledProvisionPolicyParams" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledProvisionPolicyResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/sleds-uninitialized": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List uninitialized sleds", - "operationId": "sled_list_uninitialized", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UninitializedSledResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/switch-port": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List switch ports", - "operationId": "networking_switch_port_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - }, - { - "in": "query", - "name": "switch_port_id", - "description": "An optional switch port id to use when listing switch ports.", - "schema": { - "nullable": true, - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPortResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/switch-port/{port}/lldp/config": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Fetch the LLDP configuration for a switch port", - "operationId": "networking_switch_port_lldp_config_view", - "parameters": [ - { - "in": "path", - "name": "port", - "description": "A name to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "query", - "name": "rack_id", - "description": "A rack id to use when selecting switch ports.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "switch_location", - "description": "A switch location to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LldpLinkConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "tags": [ - "system/networking" - ], - "summary": "Update the LLDP configuration for a switch port", - "operationId": "networking_switch_port_lldp_config_update", - "parameters": [ - { - "in": "path", - "name": "port", - "description": "A name to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "query", - "name": "rack_id", - "description": "A rack id to use when selecting switch ports.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "switch_location", - "description": "A switch location to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LldpLinkConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/switch-port/{port}/settings": { - "post": { - "tags": [ - "system/hardware" - ], - "summary": "Apply switch port settings", - "operationId": "networking_switch_port_apply_settings", - "parameters": [ - { - "in": "path", - "name": "port", - "description": "A name to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "query", - "name": "rack_id", - "description": "A rack id to use when selecting switch ports.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "switch_location", - "description": "A switch location to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPortApplySettings" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/hardware" - ], - "summary": "Clear switch port settings", - "operationId": "networking_switch_port_clear_settings", - "parameters": [ - { - "in": "path", - "name": "port", - "description": "A name to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "query", - "name": "rack_id", - "description": "A rack id to use when selecting switch ports.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "switch_location", - "description": "A switch location to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/switch-port/{port}/status": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "Get switch port status", - "operationId": "networking_switch_port_status", - "parameters": [ - { - "in": "path", - "name": "port", - "description": "A name to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - }, - { - "in": "query", - "name": "rack_id", - "description": "A rack id to use when selecting switch ports.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "switch_location", - "description": "A switch location to use when selecting switch ports.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchLinkState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/hardware/switches": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "List switches", - "operationId": "switch_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/hardware/switches/{switch_id}": { - "get": { - "tags": [ - "system/hardware" - ], - "summary": "Fetch switch", - "operationId": "switch_view", - "parameters": [ - { - "in": "path", - "name": "switch_id", - "description": "ID of the switch", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Switch" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/identity-providers": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "List identity providers for silo", - "description": "List identity providers for silo by silo name or ID.", - "operationId": "silo_identity_provider_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IdentityProviderResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "silo" - ] - } - } - }, - "/v1/system/identity-providers/local/users": { - "post": { - "tags": [ - "system/silos" - ], - "summary": "Create user", - "description": "Users can only be created in Silos with `provision_type` == `Fixed`. Otherwise, Silo users are just-in-time (JIT) provisioned when a user first logs in using an external Identity Provider.", - "operationId": "local_idp_user_create", - "parameters": [ - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/identity-providers/local/users/{user_id}": { - "delete": { - "tags": [ - "system/silos" - ], - "summary": "Delete user", - "operationId": "local_idp_user_delete", - "parameters": [ - { - "in": "path", - "name": "user_id", - "description": "The user's internal ID", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/identity-providers/local/users/{user_id}/set-password": { - "post": { - "tags": [ - "system/silos" - ], - "summary": "Set or invalidate user's password", - "description": "Passwords can only be updated for users in Silos with identity mode `LocalOnly`.", - "operationId": "local_idp_user_set_password", - "parameters": [ - { - "in": "path", - "name": "user_id", - "description": "The user's internal ID", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserPassword" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/identity-providers/saml": { - "post": { - "tags": [ - "system/silos" - ], - "summary": "Create SAML identity provider", - "operationId": "saml_identity_provider_create", - "parameters": [ - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SamlIdentityProviderCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SamlIdentityProvider" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/identity-providers/saml/{provider}": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch SAML identity provider", - "operationId": "saml_identity_provider_view", - "parameters": [ - { - "in": "path", - "name": "provider", - "description": "Name or ID of the SAML identity provider", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SamlIdentityProvider" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools": { - "get": { - "tags": [ - "system/ip-pools" - ], - "summary": "List IP pools", - "operationId": "ip_pool_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/ip-pools" - ], - "summary": "Create IP pool", - "description": "IPv6 is not yet supported for unicast pools.", - "operationId": "ip_pool_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPool" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools/{pool}": { - "get": { - "tags": [ - "system/ip-pools" - ], - "summary": "Fetch IP pool", - "operationId": "ip_pool_view", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPool" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "system/ip-pools" - ], - "summary": "Update IP pool", - "operationId": "ip_pool_update", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPool" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/ip-pools" - ], - "summary": "Delete IP pool", - "operationId": "ip_pool_delete", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools/{pool}/ranges": { - "get": { - "tags": [ - "system/ip-pools" - ], - "summary": "List ranges for IP pool", - "description": "Ranges are ordered by their first address.", - "operationId": "ip_pool_range_list", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolRangeResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/ip-pools/{pool}/ranges/add": { - "post": { - "tags": [ - "system/ip-pools" - ], - "summary": "Add range to IP pool.", - "description": "IPv6 ranges are not allowed yet for unicast pools.\n\nFor multicast pools, all ranges must be either Any-Source Multicast (ASM) or Source-Specific Multicast (SSM), but not both. Mixing ASM and SSM ranges in the same pool is not allowed.\n\nASM: IPv4 addresses outside 232.0.0.0/8, IPv6 addresses with flag field != 3 SSM: IPv4 addresses in 232.0.0.0/8, IPv6 addresses with flag field = 3", - "operationId": "ip_pool_range_add", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpRange" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolRange" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools/{pool}/ranges/remove": { - "post": { - "tags": [ - "system/ip-pools" - ], - "summary": "Remove range from IP pool", - "operationId": "ip_pool_range_remove", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpRange" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools/{pool}/silos": { - "get": { - "tags": [ - "system/ip-pools" - ], - "summary": "List IP pool's linked silos", - "operationId": "ip_pool_silo_list", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolSiloLinkResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/ip-pools" - ], - "summary": "Link IP pool to silo", - "description": "Users in linked silos can allocate external IPs from this pool for their instances. A silo can have at most one default pool. IPs are allocated from the default pool when users ask for one without specifying a pool.", - "operationId": "ip_pool_silo_link", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolLinkSilo" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolSiloLink" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools/{pool}/silos/{silo}": { - "put": { - "tags": [ - "system/ip-pools" - ], - "summary": "Make IP pool default for silo", - "description": "When a user asks for an IP (e.g., at instance create time) without specifying a pool, the IP comes from the default pool if a default is configured. When a pool is made the default for a silo, any existing default will remain linked to the silo, but will no longer be the default.", - "operationId": "ip_pool_silo_update", - "parameters": [ - { - "in": "path", - "name": "pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolSiloUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolSiloLink" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/ip-pools" - ], - "summary": "Unlink IP pool from silo", - "description": "Will fail if there are any outstanding IPs allocated in the silo.", - "operationId": "ip_pool_silo_unlink", - "parameters": [ - { - "in": "path", - "name": "pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "path", - "name": "silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools/{pool}/utilization": { - "get": { - "tags": [ - "system/ip-pools" - ], - "summary": "Fetch IP pool utilization", - "operationId": "ip_pool_utilization_view", - "parameters": [ - { - "in": "path", - "name": "pool", - "description": "Name or ID of the IP pool", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolUtilization" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools-service": { - "get": { - "tags": [ - "system/ip-pools" - ], - "summary": "Fetch Oxide service IP pool", - "operationId": "ip_pool_service_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPool" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools-service/ranges": { - "get": { - "tags": [ - "system/ip-pools" - ], - "summary": "List IP ranges for the Oxide service pool", - "description": "Ranges are ordered by their first address.", - "operationId": "ip_pool_service_range_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolRangeResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/ip-pools-service/ranges/add": { - "post": { - "tags": [ - "system/ip-pools" - ], - "summary": "Add IP range to Oxide service pool", - "description": "IPv6 ranges are not allowed yet.", - "operationId": "ip_pool_service_range_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpRange" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpPoolRange" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/ip-pools-service/ranges/remove": { - "post": { - "tags": [ - "system/ip-pools" - ], - "summary": "Remove IP range from Oxide service pool", - "operationId": "ip_pool_service_range_remove", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/IpRange" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/metrics/{metric_name}": { - "get": { - "tags": [ - "system/metrics" - ], - "summary": "View metrics", - "description": "View CPU, memory, or storage utilization metrics at the fleet or silo level.", - "operationId": "system_metric", - "parameters": [ - { - "in": "path", - "name": "metric_name", - "required": true, - "schema": { - "$ref": "#/components/schemas/SystemMetricName" - } - }, - { - "in": "query", - "name": "end_time", - "description": "An exclusive end time of metrics.", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "order", - "description": "Query result order", - "schema": { - "$ref": "#/components/schemas/PaginationOrder" - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "start_time", - "description": "An inclusive start time of metrics.", - "schema": { - "type": "string", - "format": "date-time" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MeasurementResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "end_time", - "start_time" - ] - } - } - }, - "/v1/system/multicast-groups/by-ip/{address}": { - "get": { - "tags": [ - "experimental" - ], - "summary": "Look up multicast group by IP address.", - "operationId": "lookup_multicast_group_by_ip", - "parameters": [ - { - "in": "path", - "name": "address", - "description": "IP address of the multicast group", - "required": true, - "schema": { - "type": "string", - "format": "ip" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/MulticastGroup" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/address-lot": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "List address lots", - "operationId": "networking_address_lot_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddressLotResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/networking" - ], - "summary": "Create address lot", - "operationId": "networking_address_lot_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddressLotCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddressLotCreateResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/address-lot/{address_lot}": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Fetch address lot", - "operationId": "networking_address_lot_view", - "parameters": [ - { - "in": "path", - "name": "address_lot", - "description": "Name or ID of the address lot", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddressLotViewResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/networking" - ], - "summary": "Delete address lot", - "operationId": "networking_address_lot_delete", - "parameters": [ - { - "in": "path", - "name": "address_lot", - "description": "Name or ID of the address lot", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/address-lot/{address_lot}/blocks": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "List blocks in address lot", - "operationId": "networking_address_lot_block_list", - "parameters": [ - { - "in": "path", - "name": "address_lot", - "description": "Name or ID of the address lot", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddressLotBlockResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/networking/allow-list": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get user-facing services IP allowlist", - "operationId": "networking_allow_list_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AllowList" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "system/networking" - ], - "summary": "Update user-facing services IP allowlist", - "operationId": "networking_allow_list_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AllowListUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AllowList" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bfd-disable": { - "post": { - "tags": [ - "system/networking" - ], - "summary": "Disable a BFD session", - "operationId": "networking_bfd_disable", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BfdSessionDisable" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bfd-enable": { - "post": { - "tags": [ - "system/networking" - ], - "summary": "Enable a BFD session", - "operationId": "networking_bfd_enable", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BfdSessionEnable" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bfd-status": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get BFD status", - "operationId": "networking_bfd_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_BfdStatus", - "type": "array", - "items": { - "$ref": "#/components/schemas/BfdStatus" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "List BGP configurations", - "operationId": "networking_bgp_config_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BgpConfigResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/networking" - ], - "summary": "Create new BGP configuration", - "operationId": "networking_bgp_config_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BgpConfigCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BgpConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/networking" - ], - "summary": "Delete BGP configuration", - "operationId": "networking_bgp_config_delete", - "parameters": [ - { - "in": "query", - "name": "name_or_id", - "description": "A name or id to use when selecting BGP config.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp-announce-set": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "List BGP announce sets", - "operationId": "networking_bgp_announce_set_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_BgpAnnounceSet", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpAnnounceSet" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "put": { - "tags": [ - "system/networking" - ], - "summary": "Update BGP announce set", - "description": "If the announce set exists, this endpoint replaces the existing announce set with the one specified.", - "operationId": "networking_bgp_announce_set_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BgpAnnounceSetCreate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BgpAnnounceSet" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp-announce-set/{announce_set}": { - "delete": { - "tags": [ - "system/networking" - ], - "summary": "Delete BGP announce set", - "operationId": "networking_bgp_announce_set_delete", - "parameters": [ - { - "in": "path", - "name": "announce_set", - "description": "Name or ID of the announce set", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp-announce-set/{announce_set}/announcement": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get originated routes for a specified BGP announce set", - "operationId": "networking_bgp_announcement_list", - "parameters": [ - { - "in": "path", - "name": "announce_set", - "description": "Name or ID of the announce set", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_BgpAnnouncement", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpAnnouncement" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp-exported": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get BGP exported routes", - "operationId": "networking_bgp_exported", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BgpExported" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp-message-history": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get BGP router message history", - "operationId": "networking_bgp_message_history", - "parameters": [ - { - "in": "query", - "name": "asn", - "description": "The ASN to filter on. Required.", - "required": true, - "schema": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AggregateBgpMessageHistory" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp-routes-ipv4": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get imported IPv4 BGP routes", - "operationId": "networking_bgp_imported_routes_ipv4", - "parameters": [ - { - "in": "query", - "name": "asn", - "description": "The ASN to filter on. Required.", - "required": true, - "schema": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_BgpImportedRouteIpv4", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpImportedRouteIpv4" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/bgp-status": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get BGP peer status", - "operationId": "networking_bgp_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_BgpPeerStatus", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeerStatus" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/inbound-icmp": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Return whether API services can receive limited ICMP traffic", - "operationId": "networking_inbound_icmp_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ServiceIcmpConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "system/networking" - ], - "summary": "Set whether API services can receive limited ICMP traffic", - "operationId": "networking_inbound_icmp_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ServiceIcmpConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/loopback-address": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "List loopback addresses", - "operationId": "networking_loopback_address_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LoopbackAddressResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/networking" - ], - "summary": "Create loopback address", - "operationId": "networking_loopback_address_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LoopbackAddressCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LoopbackAddress" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/loopback-address/{rack_id}/{switch_location}/{address}/{subnet_mask}": { - "delete": { - "tags": [ - "system/networking" - ], - "summary": "Delete loopback address", - "operationId": "networking_loopback_address_delete", - "parameters": [ - { - "in": "path", - "name": "address", - "description": "The IP address and subnet mask to use when selecting the loopback address.", - "required": true, - "schema": { - "type": "string", - "format": "ip" - } - }, - { - "in": "path", - "name": "rack_id", - "description": "The rack to use when selecting the loopback address.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "subnet_mask", - "description": "The IP address and subnet mask to use when selecting the loopback address.", - "required": true, - "schema": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - { - "in": "path", - "name": "switch_location", - "description": "The switch location to use when selecting the loopback address.", - "required": true, - "schema": { - "$ref": "#/components/schemas/Name" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/switch-port-settings": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "List switch port settings", - "operationId": "networking_switch_port_settings_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "port_settings", - "description": "An optional name or id to use when selecting port settings.", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPortSettingsIdentityResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/networking" - ], - "summary": "Create switch port settings", - "operationId": "networking_switch_port_settings_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPortSettingsCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPortSettings" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/networking" - ], - "summary": "Delete switch port settings", - "operationId": "networking_switch_port_settings_delete", - "parameters": [ - { - "in": "query", - "name": "port_settings", - "description": "An optional name or id to use when selecting port settings.", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/networking/switch-port-settings/{port}": { - "get": { - "tags": [ - "system/networking" - ], - "summary": "Get information about switch port", - "operationId": "networking_switch_port_settings_view", - "parameters": [ - { - "in": "path", - "name": "port", - "description": "A name or id to use when selecting switch port settings info objects.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPortSettings" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/policy": { - "get": { - "tags": [ - "policy" - ], - "summary": "Fetch top-level IAM policy", - "operationId": "system_policy_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FleetRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "policy" - ], - "summary": "Update top-level IAM policy", - "operationId": "system_policy_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FleetRolePolicy" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/FleetRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/scim/tokens": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "List SCIM tokens", - "description": "Specify the silo by name or ID using the `silo` query parameter.", - "operationId": "scim_token_list", - "parameters": [ - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ScimClientBearerToken", - "type": "array", - "items": { - "$ref": "#/components/schemas/ScimClientBearerToken" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "tags": [ - "system/silos" - ], - "summary": "Create SCIM token", - "description": "Specify the silo by name or ID using the `silo` query parameter. Be sure to save the bearer token in the response. It will not be retrievable later through the token view and list endpoints.", - "operationId": "scim_token_create", - "parameters": [ - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ScimClientBearerTokenValue" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/scim/tokens/{token_id}": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch SCIM token", - "description": "Specify the silo by name or ID using the `silo` query parameter.", - "operationId": "scim_token_view", - "parameters": [ - { - "in": "path", - "name": "token_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ScimClientBearerToken" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/silos" - ], - "summary": "Delete SCIM token", - "description": "Specify the silo by name or ID using the `silo` query parameter.", - "operationId": "scim_token_delete", - "parameters": [ - { - "in": "path", - "name": "token_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/silo-quotas": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Lists resource quotas for all silos", - "operationId": "system_quotas_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloQuotasResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/silos": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "List silos", - "description": "Lists silos that are discoverable based on the current permissions.", - "operationId": "silo_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/silos" - ], - "summary": "Create a silo", - "operationId": "silo_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Silo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/silos/{silo}": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch silo", - "description": "Fetch silo by name or ID.", - "operationId": "silo_view", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Silo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/silos" - ], - "summary": "Delete a silo", - "description": "Delete a silo by name or ID.", - "operationId": "silo_delete", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/silos/{silo}/ip-pools": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "List IP pools linked to silo", - "description": "Linked IP pools are available to users in the specified silo. A silo can have at most one default pool. IPs are allocated from the default pool when users ask for one without specifying a pool.", - "operationId": "silo_ip_pool_list", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloIpPoolResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/silos/{silo}/policy": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch silo IAM policy", - "operationId": "silo_policy_view", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "system/silos" - ], - "summary": "Update silo IAM policy", - "operationId": "silo_policy_update", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloRolePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/silos/{silo}/quotas": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch resource quotas for silo", - "operationId": "silo_quotas_view", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloQuotas" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "system/silos" - ], - "summary": "Update resource quotas for silo", - "description": "If a quota value is not specified, it will remain unchanged.", - "operationId": "silo_quotas_update", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloQuotasUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloQuotas" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/timeseries/query": { - "post": { - "tags": [ - "system/metrics" - ], - "summary": "Run timeseries query", - "description": "Queries are written in OxQL.", - "operationId": "system_timeseries_query", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeseriesQuery" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OxqlQueryResult" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/timeseries/schemas": { - "get": { - "tags": [ - "system/metrics" - ], - "summary": "List timeseries schemas", - "operationId": "system_timeseries_schema_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeseriesSchemaResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/update/repositories": { - "get": { - "tags": [ - "system/update" - ], - "summary": "List all TUF repositories", - "description": "Returns a paginated list of all TUF repositories ordered by system version (newest first by default).", - "operationId": "system_update_repository_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/VersionSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TufRepoResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "put": { - "tags": [ - "system/update" - ], - "summary": "Upload system release repository", - "description": "System release repositories are verified by the updates trust store.", - "operationId": "system_update_repository_upload", - "parameters": [ - { - "in": "query", - "name": "file_name", - "description": "The name of the uploaded file.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TufRepoUpload" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/update/repositories/{system_version}": { - "get": { - "tags": [ - "system/update" - ], - "summary": "Fetch system release repository by version", - "operationId": "system_update_repository_view", - "parameters": [ - { - "in": "path", - "name": "system_version", - "description": "The version to get.", - "required": true, - "schema": { - "type": "string", - "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TufRepo" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/update/status": { - "get": { - "tags": [ - "system/update" - ], - "summary": "Fetch system update status", - "description": "Returns information about the current target release and the progress of system software updates.", - "operationId": "system_update_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdateStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/update/target-release": { - "put": { - "tags": [ - "system/update" - ], - "summary": "Set target release", - "description": "Set the current target release of the rack's system software. The rack reconfigurator will treat the software specified here as a goal state for the rack's software, and attempt to asynchronously update to that release. Use the update status endpoint to view the current target release.", - "operationId": "target_release_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SetTargetReleaseParams" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/update/trust-roots": { - "get": { - "tags": [ - "system/update" - ], - "summary": "List root roles in the updates trust store", - "description": "A root role is a JSON document describing the cryptographic keys that are trusted to sign system release repositories, as described by The Update Framework. Uploading a repository requires its metadata to be signed by keys trusted by the trust store.", - "operationId": "system_update_trust_root_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdatesTrustRootResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - }, - "post": { - "tags": [ - "system/update" - ], - "summary": "Add trusted root role to updates trust store", - "operationId": "system_update_trust_root_create", - "requestBody": { - "content": { - "application/json": { - "schema": {} - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdatesTrustRoot" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/update/trust-roots/{trust_root_id}": { - "get": { - "tags": [ - "system/update" - ], - "summary": "Fetch trusted root role", - "operationId": "system_update_trust_root_view", - "parameters": [ - { - "in": "path", - "name": "trust_root_id", - "description": "ID of the trust root", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UpdatesTrustRoot" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "system/update" - ], - "summary": "Delete trusted root role", - "description": "Note that this method does not currently check for any uploaded system release repositories that would become untrusted after deleting the root role.", - "operationId": "system_update_trust_root_delete", - "parameters": [ - { - "in": "path", - "name": "trust_root_id", - "description": "ID of the trust root", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/users": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "List built-in (system) users in silo", - "operationId": "silo_user_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "silo" - ] - } - } - }, - "/v1/system/users/{user_id}": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch built-in (system) user", - "operationId": "silo_user_view", - "parameters": [ - { - "in": "path", - "name": "user_id", - "description": "The user's internal ID", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/users-builtin": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "List built-in users", - "operationId": "user_builtin_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserBuiltinResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/users-builtin/{user}": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch built-in user", - "operationId": "user_builtin_view", - "parameters": [ - { - "in": "path", - "name": "user", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserBuiltin" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/system/utilization/silos": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "List current utilization state for all silos", - "operationId": "silo_utilization_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloUtilizationResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/system/utilization/silos/{silo}": { - "get": { - "tags": [ - "system/silos" - ], - "summary": "Fetch current utilization for given silo", - "operationId": "silo_utilization_view", - "parameters": [ - { - "in": "path", - "name": "silo", - "description": "Name or ID of the silo", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SiloUtilization" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/timeseries/query": { - "post": { - "tags": [ - "experimental" - ], - "summary": "Run project-scoped timeseries query", - "description": "Queries are written in OxQL. Project must be specified by name or ID in URL query parameter. The OxQL query will only return timeseries data from the specified project.", - "operationId": "timeseries_query", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/TimeseriesQuery" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OxqlQueryResult" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/users": { - "get": { - "tags": [ - "silos" - ], - "summary": "List users", - "operationId": "user_list", - "parameters": [ - { - "in": "query", - "name": "group", - "schema": { - "nullable": true, - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/UserResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/users/{user_id}": { - "get": { - "tags": [ - "silos" - ], - "summary": "Fetch user", - "operationId": "user_view", - "parameters": [ - { - "in": "path", - "name": "user_id", - "description": "ID of the user", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/User" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/users/{user_id}/access-tokens": { - "get": { - "tags": [ - "silos" - ], - "summary": "List user's access tokens", - "operationId": "user_token_list", - "parameters": [ - { - "in": "path", - "name": "user_id", - "description": "ID of the user", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DeviceAccessTokenResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/users/{user_id}/logout": { - "post": { - "tags": [ - "silos" - ], - "summary": "Log user out", - "description": "Silo admins can use this endpoint to log the specified user out by deleting all of their tokens AND sessions. This cannot be undone.", - "operationId": "user_logout", - "parameters": [ - { - "in": "path", - "name": "user_id", - "description": "ID of the user", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/users/{user_id}/sessions": { - "get": { - "tags": [ - "silos" - ], - "summary": "List user's console sessions", - "operationId": "user_session_list", - "parameters": [ - { - "in": "path", - "name": "user_id", - "description": "ID of the user", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/IdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConsoleSessionResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/utilization": { - "get": { - "tags": [ - "silos" - ], - "summary": "Fetch resource utilization for user's current silo", - "operationId": "utilization_view", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Utilization" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-firewall-rules": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List firewall rules", - "operationId": "vpc_firewall_rules_view", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRules" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "vpcs" - ], - "summary": "Replace firewall rules", - "description": "The maximum number of rules per VPC is 1024.\n\nTargets are used to specify the set of instances to which a firewall rule applies. You can target instances directly by name, or specify a VPC, VPC subnet, IP, or IP subnet, which will apply the rule to traffic going to all matching instances. Targets are additive: the rule applies to instances matching ANY target. The maximum number of targets is 256.\n\nFilters reduce the scope of a firewall rule. Without filters, the rule applies to all packets to the targets (or from the targets, if it's an outbound rule). With multiple filters, the rule applies only to packets matching ALL filters. The maximum number of each type of filter is 256.", - "operationId": "vpc_firewall_rules_update", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRuleUpdateParams" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRules" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-router-routes": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List routes", - "description": "List the routes associated with a router in a particular VPC.", - "operationId": "vpc_router_route_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "router", - "description": "Name or ID of the router", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `router` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RouterRouteResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "router" - ] - } - }, - "post": { - "tags": [ - "vpcs" - ], - "summary": "Create route", - "operationId": "vpc_router_route_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "router", - "description": "Name or ID of the router", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `router` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RouterRouteCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RouterRoute" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-router-routes/{route}": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "Fetch route", - "operationId": "vpc_router_route_view", - "parameters": [ - { - "in": "path", - "name": "route", - "description": "Name or ID of the route", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "router", - "description": "Name or ID of the router", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `router` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RouterRoute" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "vpcs" - ], - "summary": "Update route", - "operationId": "vpc_router_route_update", - "parameters": [ - { - "in": "path", - "name": "route", - "description": "Name or ID of the route", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "router", - "description": "Name or ID of the router", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `router` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RouterRouteUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/RouterRoute" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "vpcs" - ], - "summary": "Delete route", - "operationId": "vpc_router_route_delete", - "parameters": [ - { - "in": "path", - "name": "route", - "description": "Name or ID of the route", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "router", - "description": "Name or ID of the router", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC, only required if `router` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-routers": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List routers", - "operationId": "vpc_router_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcRouterResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "vpc" - ] - } - }, - "post": { - "tags": [ - "vpcs" - ], - "summary": "Create VPC router", - "operationId": "vpc_router_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcRouterCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcRouter" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-routers/{router}": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "Fetch router", - "operationId": "vpc_router_view", - "parameters": [ - { - "in": "path", - "name": "router", - "description": "Name or ID of the router", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcRouter" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "vpcs" - ], - "summary": "Update router", - "operationId": "vpc_router_update", - "parameters": [ - { - "in": "path", - "name": "router", - "description": "Name or ID of the router", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcRouterUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcRouter" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "vpcs" - ], - "summary": "Delete router", - "operationId": "vpc_router_delete", - "parameters": [ - { - "in": "path", - "name": "router", - "description": "Name or ID of the router", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-subnets": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List subnets", - "operationId": "vpc_subnet_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcSubnetResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "vpc" - ] - } - }, - "post": { - "tags": [ - "vpcs" - ], - "summary": "Create subnet", - "operationId": "vpc_subnet_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcSubnetCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcSubnet" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-subnets/{subnet}": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "Fetch subnet", - "operationId": "vpc_subnet_view", - "parameters": [ - { - "in": "path", - "name": "subnet", - "description": "Name or ID of the subnet", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcSubnet" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "vpcs" - ], - "summary": "Update subnet", - "operationId": "vpc_subnet_update", - "parameters": [ - { - "in": "path", - "name": "subnet", - "description": "Name or ID of the subnet", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcSubnetUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcSubnet" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "vpcs" - ], - "summary": "Delete subnet", - "operationId": "vpc_subnet_delete", - "parameters": [ - { - "in": "path", - "name": "subnet", - "description": "Name or ID of the subnet", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpc-subnets/{subnet}/network-interfaces": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List network interfaces", - "operationId": "vpc_subnet_list_network_interfaces", - "parameters": [ - { - "in": "path", - "name": "subnet", - "description": "Name or ID of the subnet", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project, only required if `vpc` is provided as a `Name`", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - }, - { - "in": "query", - "name": "vpc", - "description": "Name or ID of the VPC", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceNetworkInterfaceResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [] - } - } - }, - "/v1/vpcs": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "List VPCs", - "operationId": "vpc_list", - "parameters": [ - { - "in": "query", - "name": "limit", - "description": "Maximum number of items returned by a single call", - "schema": { - "nullable": true, - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - { - "in": "query", - "name": "page_token", - "description": "Token returned by previous call to retrieve the subsequent page", - "schema": { - "nullable": true, - "type": "string" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "sort_by", - "schema": { - "$ref": "#/components/schemas/NameOrIdSortMode" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcResultsPage" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - }, - "x-dropshot-pagination": { - "required": [ - "project" - ] - } - }, - "post": { - "tags": [ - "vpcs" - ], - "summary": "Create VPC", - "operationId": "vpc_create", - "parameters": [ - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Vpc" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/vpcs/{vpc}": { - "get": { - "tags": [ - "vpcs" - ], - "summary": "Fetch VPC", - "operationId": "vpc_view", - "parameters": [ - { - "in": "path", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Vpc" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "tags": [ - "vpcs" - ], - "summary": "Update a VPC", - "operationId": "vpc_update", - "parameters": [ - { - "in": "path", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Vpc" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "tags": [ - "vpcs" - ], - "summary": "Delete VPC", - "operationId": "vpc_delete", - "parameters": [ - { - "in": "path", - "name": "vpc", - "description": "Name or ID of the VPC", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - }, - { - "in": "query", - "name": "project", - "description": "Name or ID of the project", - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/webhook-receivers": { - "post": { - "tags": [ - "system/alerts" - ], - "summary": "Create webhook receiver", - "operationId": "webhook_receiver_create", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookReceiver" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/webhook-receivers/{receiver}": { - "put": { - "tags": [ - "system/alerts" - ], - "summary": "Update webhook receiver", - "description": "Note that receiver secrets are NOT added or removed using this endpoint. Instead, use the `/v1/webhooks/{secrets}/?receiver={receiver}` endpoint to add and remove secrets.", - "operationId": "webhook_receiver_update", - "parameters": [ - { - "in": "path", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookReceiverUpdate" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/webhook-secrets": { - "get": { - "tags": [ - "system/alerts" - ], - "summary": "List webhook receiver secret IDs", - "operationId": "webhook_secrets_list", - "parameters": [ - { - "in": "query", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookSecrets" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "post": { - "tags": [ - "system/alerts" - ], - "summary": "Add secret to webhook receiver", - "operationId": "webhook_secrets_add", - "parameters": [ - { - "in": "query", - "name": "receiver", - "description": "The name or ID of the webhook receiver.", - "required": true, - "schema": { - "$ref": "#/components/schemas/NameOrId" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookSecretCreate" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/WebhookSecret" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v1/webhook-secrets/{secret_id}": { - "delete": { - "tags": [ - "system/alerts" - ], - "summary": "Remove secret from webhook receiver", - "operationId": "webhook_secrets_delete", - "parameters": [ - { - "in": "path", - "name": "secret_id", - "description": "ID of the secret.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "Address": { - "description": "An address tied to an address lot.", - "type": "object", - "properties": { - "address": { - "description": "The address and prefix length of this address.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "address_lot": { - "description": "The address lot this address is drawn from.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "vlan_id": { - "nullable": true, - "description": "Optional VLAN ID for this address", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "address", - "address_lot" - ] - }, - "AddressConfig": { - "description": "A set of addresses associated with a port configuration.", - "type": "object", - "properties": { - "addresses": { - "description": "The set of addresses assigned to the port configuration.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Address" - } - }, - "link_name": { - "description": "Link to assign the addresses to. On ports that are not broken out, this is always phy0. On a 2x breakout the options are phy0 and phy1, on 4x phy0-phy3, etc.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - }, - "required": [ - "addresses", - "link_name" - ] - }, - "AddressLot": { - "description": "Represents an address lot object, containing the id of the lot that can be used in other API calls.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "kind": { - "description": "Desired use of `AddressLot`", - "allOf": [ - { - "$ref": "#/components/schemas/AddressLotKind" - } - ] - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "kind", - "name", - "time_created", - "time_modified" - ] - }, - "AddressLotBlock": { - "description": "An address lot block is a part of an address lot and contains a range of addresses. The range is inclusive.", - "type": "object", - "properties": { - "first_address": { - "description": "The first address of the block (inclusive).", - "type": "string", - "format": "ip" - }, - "id": { - "description": "The id of the address lot block.", - "type": "string", - "format": "uuid" - }, - "last_address": { - "description": "The last address of the block (inclusive).", - "type": "string", - "format": "ip" - } - }, - "required": [ - "first_address", - "id", - "last_address" - ] - }, - "AddressLotBlockCreate": { - "description": "Parameters for creating an address lot block. Fist and last addresses are inclusive.", - "type": "object", - "properties": { - "first_address": { - "description": "The first address in the lot (inclusive).", - "type": "string", - "format": "ip" - }, - "last_address": { - "description": "The last address in the lot (inclusive).", - "type": "string", - "format": "ip" - } - }, - "required": [ - "first_address", - "last_address" - ] - }, - "AddressLotBlockResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AddressLotBlock" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AddressLotCreate": { - "description": "Parameters for creating an address lot.", - "type": "object", - "properties": { - "blocks": { - "description": "The blocks to add along with the new address lot.", - "type": "array", - "items": { - "$ref": "#/components/schemas/AddressLotBlockCreate" - } - }, - "description": { - "type": "string" - }, - "kind": { - "description": "The kind of address lot to create.", - "allOf": [ - { - "$ref": "#/components/schemas/AddressLotKind" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "blocks", - "description", - "kind", - "name" - ] - }, - "AddressLotCreateResponse": { - "description": "An address lot and associated blocks resulting from creating an address lot.", - "type": "object", - "properties": { - "blocks": { - "description": "The address lot blocks that were created.", - "type": "array", - "items": { - "$ref": "#/components/schemas/AddressLotBlock" - } - }, - "lot": { - "description": "The address lot that was created.", - "allOf": [ - { - "$ref": "#/components/schemas/AddressLot" - } - ] - } - }, - "required": [ - "blocks", - "lot" - ] - }, - "AddressLotKind": { - "description": "The kind associated with an address lot.", - "oneOf": [ - { - "description": "Infrastructure address lots are used for network infrastructure like addresses assigned to rack switches.", - "type": "string", - "enum": [ - "infra" - ] - }, - { - "description": "Pool address lots are used by IP pools.", - "type": "string", - "enum": [ - "pool" - ] - } - ] - }, - "AddressLotResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AddressLot" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AddressLotViewResponse": { - "description": "An address lot and associated blocks resulting from viewing an address lot.", - "type": "object", - "properties": { - "blocks": { - "description": "The address lot blocks.", - "type": "array", - "items": { - "$ref": "#/components/schemas/AddressLotBlock" - } - }, - "lot": { - "description": "The address lot.", - "allOf": [ - { - "$ref": "#/components/schemas/AddressLot" - } - ] - } - }, - "required": [ - "blocks", - "lot" - ] - }, - "AffinityGroup": { - "description": "View of an Affinity Group", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "failure_domain": { - "$ref": "#/components/schemas/FailureDomain" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "policy": { - "$ref": "#/components/schemas/AffinityPolicy" - }, - "project_id": { - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "failure_domain", - "id", - "name", - "policy", - "project_id", - "time_created", - "time_modified" - ] - }, - "AffinityGroupCreate": { - "description": "Create-time parameters for an `AffinityGroup`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "failure_domain": { - "$ref": "#/components/schemas/FailureDomain" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "policy": { - "$ref": "#/components/schemas/AffinityPolicy" - } - }, - "required": [ - "description", - "failure_domain", - "name", - "policy" - ] - }, - "AffinityGroupMember": { - "description": "A member of an Affinity Group\n\nMembership in a group is not exclusive - members may belong to multiple affinity / anti-affinity groups.\n\nAffinity Groups can contain up to 32 members.", - "oneOf": [ - { - "description": "An instance belonging to this group\n\nInstances can belong to up to 16 affinity groups.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "instance" - ] - }, - "value": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "run_state": { - "$ref": "#/components/schemas/InstanceState" - } - }, - "required": [ - "id", - "name", - "run_state" - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "AffinityGroupMemberResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AffinityGroupMember" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AffinityGroupResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AffinityGroup" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AffinityGroupUpdate": { - "description": "Updateable properties of an `AffinityGroup`", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "AffinityPolicy": { - "description": "Affinity policy used to describe \"what to do when a request cannot be satisfied\"\n\nUsed for both Affinity and Anti-Affinity Groups", - "oneOf": [ - { - "description": "If the affinity request cannot be satisfied, allow it anyway.\n\nThis enables a \"best-effort\" attempt to satisfy the affinity policy.", - "type": "string", - "enum": [ - "allow" - ] - }, - { - "description": "If the affinity request cannot be satisfied, fail explicitly.", - "type": "string", - "enum": [ - "fail" - ] - } - ] - }, - "AggregateBgpMessageHistory": { - "description": "BGP message history for rack switches.", - "type": "object", - "properties": { - "switch_histories": { - "description": "BGP history organized by switch.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchBgpHistory" - } - } - }, - "required": [ - "switch_histories" - ] - }, - "AlertClass": { - "description": "An alert class.", - "type": "object", - "properties": { - "description": { - "description": "A description of what this alert class represents.", - "type": "string" - }, - "name": { - "description": "The name of the alert class.", - "type": "string" - } - }, - "required": [ - "description", - "name" - ] - }, - "AlertClassResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AlertClass" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AlertDelivery": { - "description": "A delivery of a webhook event.", - "type": "object", - "properties": { - "alert_class": { - "description": "The event class.", - "type": "string" - }, - "alert_id": { - "description": "The UUID of the event.", - "type": "string", - "format": "uuid" - }, - "attempts": { - "description": "Individual attempts to deliver this webhook event, and their outcomes.", - "allOf": [ - { - "$ref": "#/components/schemas/AlertDeliveryAttempts" - } - ] - }, - "id": { - "description": "The UUID of this delivery attempt.", - "type": "string", - "format": "uuid" - }, - "receiver_id": { - "description": "The UUID of the alert receiver that this event was delivered to.", - "type": "string", - "format": "uuid" - }, - "state": { - "description": "The state of this delivery.", - "allOf": [ - { - "$ref": "#/components/schemas/AlertDeliveryState" - } - ] - }, - "time_started": { - "description": "The time at which this delivery began (i.e. the event was dispatched to the receiver).", - "type": "string", - "format": "date-time" - }, - "trigger": { - "description": "Why this delivery was performed.", - "allOf": [ - { - "$ref": "#/components/schemas/AlertDeliveryTrigger" - } - ] - } - }, - "required": [ - "alert_class", - "alert_id", - "attempts", - "id", - "receiver_id", - "state", - "time_started", - "trigger" - ] - }, - "AlertDeliveryAttempts": { - "description": "A list of attempts to deliver an alert to a receiver.\n\nThe type of the delivery attempt model depends on the receiver type, as it may contain information specific to that delivery mechanism. For example, webhook delivery attempts contain the HTTP status code of the webhook request.", - "oneOf": [ - { - "description": "A list of attempts to deliver an alert to a webhook receiver.", - "type": "object", - "properties": { - "webhook": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WebhookDeliveryAttempt" - } - } - }, - "required": [ - "webhook" - ], - "additionalProperties": false - } - ] - }, - "AlertDeliveryId": { - "type": "object", - "properties": { - "delivery_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "delivery_id" - ] - }, - "AlertDeliveryResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AlertDelivery" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AlertDeliveryState": { - "description": "The state of a webhook delivery attempt.", - "oneOf": [ - { - "description": "The webhook event has not yet been delivered successfully.\n\nEither no delivery attempts have yet been performed, or the delivery has failed at least once but has retries remaining.", - "type": "string", - "enum": [ - "pending" - ] - }, - { - "description": "The webhook event has been delivered successfully.", - "type": "string", - "enum": [ - "delivered" - ] - }, - { - "description": "The webhook delivery attempt has failed permanently and will not be retried again.", - "type": "string", - "enum": [ - "failed" - ] - } - ] - }, - "AlertDeliveryTrigger": { - "description": "The reason an alert was delivered", - "oneOf": [ - { - "description": "Delivery was triggered by the alert itself.", - "type": "string", - "enum": [ - "alert" - ] - }, - { - "description": "Delivery was triggered by a request to resend the alert.", - "type": "string", - "enum": [ - "resend" - ] - }, - { - "description": "This delivery is a liveness probe.", - "type": "string", - "enum": [ - "probe" - ] - } - ] - }, - "AlertProbeResult": { - "description": "Data describing the result of an alert receiver liveness probe attempt.", - "type": "object", - "properties": { - "probe": { - "description": "The outcome of the probe delivery.", - "allOf": [ - { - "$ref": "#/components/schemas/AlertDelivery" - } - ] - }, - "resends_started": { - "nullable": true, - "description": "If the probe request succeeded, and resending failed deliveries on success was requested, the number of new delivery attempts started. Otherwise, if the probe did not succeed, or resending failed deliveries was not requested, this is null.\n\nNote that this may be 0, if there were no events found which had not been delivered successfully to this receiver.", - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "required": [ - "probe" - ] - }, - "AlertReceiver": { - "description": "The configuration for an alert receiver.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "kind": { - "description": "Configuration specific to the kind of alert receiver that this is.", - "allOf": [ - { - "$ref": "#/components/schemas/AlertReceiverKind" - } - ] - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "subscriptions": { - "description": "The list of alert classes to which this receiver is subscribed.", - "type": "array", - "items": { - "$ref": "#/components/schemas/AlertSubscription" - } - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "kind", - "name", - "subscriptions", - "time_created", - "time_modified" - ] - }, - "AlertReceiverKind": { - "description": "The possible alert delivery mechanisms for an alert receiver.", - "oneOf": [ - { - "description": "Webhook-specific alert receiver configuration.", - "type": "object", - "properties": { - "endpoint": { - "description": "The URL that webhook notification requests are sent to.", - "type": "string", - "format": "uri" - }, - "kind": { - "type": "string", - "enum": [ - "webhook" - ] - }, - "secrets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WebhookSecret" - } - } - }, - "required": [ - "endpoint", - "kind", - "secrets" - ] - } - ] - }, - "AlertReceiverResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AlertReceiver" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AlertSubscription": { - "title": "A webhook event class subscription", - "description": "A webhook event class subscription matches either a single event class exactly, or a glob pattern including wildcards that may match multiple event classes", - "type": "string", - "pattern": "^([a-zA-Z0-9_]+|\\*|\\*\\*)(\\.([a-zA-Z0-9_]+|\\*|\\*\\*))*$" - }, - "AlertSubscriptionCreate": { - "type": "object", - "properties": { - "subscription": { - "description": "The event class pattern to subscribe to.", - "allOf": [ - { - "$ref": "#/components/schemas/AlertSubscription" - } - ] - } - }, - "required": [ - "subscription" - ] - }, - "AlertSubscriptionCreated": { - "type": "object", - "properties": { - "subscription": { - "description": "The new subscription added to the receiver.", - "allOf": [ - { - "$ref": "#/components/schemas/AlertSubscription" - } - ] - } - }, - "required": [ - "subscription" - ] - }, - "AllowList": { - "description": "Allowlist of IPs or subnets that can make requests to user-facing services.", - "type": "object", - "properties": { - "allowed_ips": { - "description": "The allowlist of IPs or subnets.", - "allOf": [ - { - "$ref": "#/components/schemas/AllowedSourceIps" - } - ] - }, - "time_created": { - "description": "Time the list was created.", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "Time the list was last modified.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "allowed_ips", - "time_created", - "time_modified" - ] - }, - "AllowListUpdate": { - "description": "Parameters for updating allowed source IPs", - "type": "object", - "properties": { - "allowed_ips": { - "description": "The new list of allowed source IPs.", - "allOf": [ - { - "$ref": "#/components/schemas/AllowedSourceIps" - } - ] - } - }, - "required": [ - "allowed_ips" - ] - }, - "AllowedSourceIps": { - "description": "Description of source IPs allowed to reach rack services.", - "oneOf": [ - { - "description": "Allow traffic from any external IP address.", - "type": "object", - "properties": { - "allow": { - "type": "string", - "enum": [ - "any" - ] - } - }, - "required": [ - "allow" - ] - }, - { - "description": "Restrict access to a specific set of source IP addresses or subnets.\n\nAll others are prevented from reaching rack services.", - "type": "object", - "properties": { - "allow": { - "type": "string", - "enum": [ - "list" - ] - }, - "ips": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IpNet" - } - } - }, - "required": [ - "allow", - "ips" - ] - } - ] - }, - "AntiAffinityGroup": { - "description": "View of an Anti-Affinity Group", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "failure_domain": { - "$ref": "#/components/schemas/FailureDomain" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "policy": { - "$ref": "#/components/schemas/AffinityPolicy" - }, - "project_id": { - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "failure_domain", - "id", - "name", - "policy", - "project_id", - "time_created", - "time_modified" - ] - }, - "AntiAffinityGroupCreate": { - "description": "Create-time parameters for an `AntiAffinityGroup`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "failure_domain": { - "$ref": "#/components/schemas/FailureDomain" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "policy": { - "$ref": "#/components/schemas/AffinityPolicy" - } - }, - "required": [ - "description", - "failure_domain", - "name", - "policy" - ] - }, - "AntiAffinityGroupMember": { - "description": "A member of an Anti-Affinity Group\n\nMembership in a group is not exclusive - members may belong to multiple affinity / anti-affinity groups.\n\nAnti-Affinity Groups can contain up to 32 members.", - "oneOf": [ - { - "description": "An instance belonging to this group\n\nInstances can belong to up to 16 anti-affinity groups.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "instance" - ] - }, - "value": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "run_state": { - "$ref": "#/components/schemas/InstanceState" - } - }, - "required": [ - "id", - "name", - "run_state" - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "AntiAffinityGroupMemberResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AntiAffinityGroupMember" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AntiAffinityGroupResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AntiAffinityGroup" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AntiAffinityGroupUpdate": { - "description": "Updateable properties of an `AntiAffinityGroup`", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "AuditLogEntry": { - "description": "Audit log entry", - "type": "object", - "properties": { - "actor": { - "$ref": "#/components/schemas/AuditLogEntryActor" - }, - "auth_method": { - "nullable": true, - "description": "How the user authenticated the request. Possible values are \"session_cookie\" and \"access_token\". Optional because it will not be defined on unauthenticated requests like login attempts.", - "type": "string" - }, - "id": { - "description": "Unique identifier for the audit log entry", - "type": "string", - "format": "uuid" - }, - "operation_id": { - "description": "API endpoint ID, e.g., `project_create`", - "type": "string" - }, - "request_id": { - "description": "Request ID for tracing requests through the system", - "type": "string" - }, - "request_uri": { - "description": "URI of the request, truncated to 512 characters. Will only include host and scheme for HTTP/2 requests. For HTTP/1.1, the URI will consist of only the path and query.", - "type": "string" - }, - "result": { - "description": "Result of the operation", - "allOf": [ - { - "$ref": "#/components/schemas/AuditLogEntryResult" - } - ] - }, - "source_ip": { - "description": "IP address that made the request", - "type": "string", - "format": "ip" - }, - "time_completed": { - "description": "Time operation completed", - "type": "string", - "format": "date-time" - }, - "time_started": { - "description": "When the request was received", - "type": "string", - "format": "date-time" - }, - "user_agent": { - "nullable": true, - "description": "User agent string from the request, truncated to 256 characters.", - "type": "string" - } - }, - "required": [ - "actor", - "id", - "operation_id", - "request_id", - "request_uri", - "result", - "source_ip", - "time_completed", - "time_started" - ] - }, - "AuditLogEntryActor": { - "oneOf": [ - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "user_builtin" - ] - }, - "user_builtin_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "kind", - "user_builtin_id" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "silo_user" - ] - }, - "silo_id": { - "type": "string", - "format": "uuid" - }, - "silo_user_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "kind", - "silo_id", - "silo_user_id" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "scim" - ] - }, - "silo_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "kind", - "silo_id" - ] - }, - { - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "unauthenticated" - ] - } - }, - "required": [ - "kind" - ] - } - ] - }, - "AuditLogEntryResult": { - "description": "Result of an audit log entry", - "oneOf": [ - { - "description": "The operation completed successfully", - "type": "object", - "properties": { - "http_status_code": { - "description": "HTTP status code", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "kind": { - "type": "string", - "enum": [ - "success" - ] - } - }, - "required": [ - "http_status_code", - "kind" - ] - }, - { - "description": "The operation failed", - "type": "object", - "properties": { - "error_code": { - "nullable": true, - "type": "string" - }, - "error_message": { - "type": "string" - }, - "http_status_code": { - "description": "HTTP status code", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "kind": { - "type": "string", - "enum": [ - "error" - ] - } - }, - "required": [ - "error_message", - "http_status_code", - "kind" - ] - }, - { - "description": "After the logged operation completed, our attempt to write the result to the audit log failed, so it was automatically marked completed later by a background job. This does not imply that the operation itself timed out or failed, only our attempts to log its result.", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "kind" - ] - } - ] - }, - "AuditLogEntryResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/AuditLogEntry" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "AuthzScope": { - "description": "Authorization scope for a timeseries.\n\nThis describes the level at which a user must be authorized to read data from a timeseries. For example, fleet-scoping means the data is only visible to an operator or fleet reader. Project-scoped, on the other hand, indicates that a user will see data limited to the projects on which they have read permissions.", - "oneOf": [ - { - "description": "Timeseries data is limited to fleet readers.", - "type": "string", - "enum": [ - "fleet" - ] - }, - { - "description": "Timeseries data is limited to the authorized silo for a user.", - "type": "string", - "enum": [ - "silo" - ] - }, - { - "description": "Timeseries data is limited to the authorized projects for a user.", - "type": "string", - "enum": [ - "project" - ] - }, - { - "description": "The timeseries is viewable to all without limitation.", - "type": "string", - "enum": [ - "viewable_to_all" - ] - } - ] - }, - "Baseboard": { - "description": "Properties that uniquely identify an Oxide hardware component", - "type": "object", - "properties": { - "part": { - "type": "string" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "serial": { - "type": "string" - } - }, - "required": [ - "part", - "revision", - "serial" - ] - }, - "BfdMode": { - "description": "BFD connection mode.", - "type": "string", - "enum": [ - "single_hop", - "multi_hop" - ] - }, - "BfdSessionDisable": { - "description": "Information needed to disable a BFD session", - "type": "object", - "properties": { - "remote": { - "description": "Address of the remote peer to disable a BFD session for.", - "type": "string", - "format": "ip" - }, - "switch": { - "description": "The switch to enable this session on. Must be `switch0` or `switch1`.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - }, - "required": [ - "remote", - "switch" - ] - }, - "BfdSessionEnable": { - "description": "Information about a bidirectional forwarding detection (BFD) session.", - "type": "object", - "properties": { - "detection_threshold": { - "description": "The negotiated Control packet transmission interval, multiplied by this variable, will be the Detection Time for this session (as seen by the remote system)", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "description": "Address the Oxide switch will listen on for BFD traffic. If `None` then the unspecified address (0.0.0.0 or ::) is used.", - "type": "string", - "format": "ip" - }, - "mode": { - "description": "Select either single-hop (RFC 5881) or multi-hop (RFC 5883)", - "allOf": [ - { - "$ref": "#/components/schemas/BfdMode" - } - ] - }, - "remote": { - "description": "Address of the remote peer to establish a BFD session with.", - "type": "string", - "format": "ip" - }, - "required_rx": { - "description": "The minimum interval, in microseconds, between received BFD Control packets that this system requires", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "description": "The switch to enable this session on. Must be `switch0` or `switch1`.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - }, - "required": [ - "detection_threshold", - "mode", - "remote", - "required_rx", - "switch" - ] - }, - "BfdState": { - "oneOf": [ - { - "description": "A stable down state. Non-responsive to incoming messages.", - "type": "string", - "enum": [ - "admin_down" - ] - }, - { - "description": "The initial state.", - "type": "string", - "enum": [ - "down" - ] - }, - { - "description": "The peer has detected a remote peer in the down state.", - "type": "string", - "enum": [ - "init" - ] - }, - { - "description": "The peer has detected a remote peer in the up or init state while in the init state.", - "type": "string", - "enum": [ - "up" - ] - } - ] - }, - "BfdStatus": { - "type": "object", - "properties": { - "detection_threshold": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "type": "string", - "format": "ip" - }, - "mode": { - "$ref": "#/components/schemas/BfdMode" - }, - "peer": { - "type": "string", - "format": "ip" - }, - "required_rx": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "state": { - "$ref": "#/components/schemas/BfdState" - }, - "switch": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "detection_threshold", - "mode", - "peer", - "required_rx", - "state", - "switch" - ] - }, - "BgpAnnounceSet": { - "description": "Represents a BGP announce set by id. The id can be used with other API calls to view and manage the announce set.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "name", - "time_created", - "time_modified" - ] - }, - "BgpAnnounceSetCreate": { - "description": "Parameters for creating a named set of BGP announcements.", - "type": "object", - "properties": { - "announcement": { - "description": "The announcements in this set.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpAnnouncementCreate" - } - }, - "description": { - "type": "string" - }, - "name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "announcement", - "description", - "name" - ] - }, - "BgpAnnouncement": { - "description": "A BGP announcement tied to an address lot block.", - "type": "object", - "properties": { - "address_lot_block_id": { - "description": "The address block the IP network being announced is drawn from.", - "type": "string", - "format": "uuid" - }, - "announce_set_id": { - "description": "The id of the set this announcement is a part of.", - "type": "string", - "format": "uuid" - }, - "network": { - "description": "The IP network being announced.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - } - }, - "required": [ - "address_lot_block_id", - "announce_set_id", - "network" - ] - }, - "BgpAnnouncementCreate": { - "description": "A BGP announcement tied to a particular address lot block.", - "type": "object", - "properties": { - "address_lot_block": { - "description": "Address lot this announcement is drawn from.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "network": { - "description": "The network being announced.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - } - }, - "required": [ - "address_lot_block", - "network" - ] - }, - "BgpConfig": { - "description": "A base BGP configuration.", - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number of this BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "vrf": { - "nullable": true, - "description": "Optional virtual routing and forwarding identifier for this BGP configuration.", - "type": "string" - } - }, - "required": [ - "asn", - "description", - "id", - "name", - "time_created", - "time_modified" - ] - }, - "BgpConfigCreate": { - "description": "Parameters for creating a BGP configuration. This includes and autonomous system number (ASN) and a virtual routing and forwarding (VRF) identifier.", - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number of this BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "bgp_announce_set_id": { - "$ref": "#/components/schemas/NameOrId" - }, - "description": { - "type": "string" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "vrf": { - "nullable": true, - "description": "Optional virtual routing and forwarding identifier for this BGP configuration.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - }, - "required": [ - "asn", - "bgp_announce_set_id", - "description", - "name" - ] - }, - "BgpConfigResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpConfig" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "BgpExported": { - "description": "The current status of a BGP peer.", - "type": "object", - "properties": { - "exports": { - "description": "Exported routes indexed by peer address.", - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - } - } - }, - "required": [ - "exports" - ] - }, - "BgpImportedRouteIpv4": { - "description": "A route imported from a BGP peer.", - "type": "object", - "properties": { - "id": { - "description": "BGP identifier of the originating router.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "nexthop": { - "description": "The nexthop the prefix is reachable through.", - "type": "string", - "format": "ipv4" - }, - "prefix": { - "description": "The destination network prefix.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv4Net" - } - ] - }, - "switch": { - "description": "Switch the route is imported into.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - } - }, - "required": [ - "id", - "nexthop", - "prefix", - "switch" - ] - }, - "BgpMessageHistory": {}, - "BgpPeer": { - "description": "A BGP peer configuration for an interface. Includes the set of announcements that will be advertised to the peer identified by `addr`. The `bgp_config` parameter is a reference to global BGP parameters. The `interface_name` indicates what interface the peer should be contacted on.", - "type": "object", - "properties": { - "addr": { - "description": "The address of the host to peer with.", - "type": "string", - "format": "ip" - }, - "allowed_export": { - "description": "Define export policy for a peer.", - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "allowed_import": { - "description": "Define import policy for a peer.", - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "bgp_config": { - "description": "The global BGP configuration used for establishing a session with this peer.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "communities": { - "description": "Include the provided communities in updates sent to the peer.", - "type": "array", - "items": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "connect_retry": { - "description": "How long to to wait between TCP connection retries (seconds).", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "delay_open": { - "description": "How long to delay sending an open request after establishing a TCP session (seconds).", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "enforce_first_as": { - "description": "Enforce that the first AS in paths received from this peer is the peer's AS.", - "type": "boolean" - }, - "hold_time": { - "description": "How long to hold peer connections between keepalives (seconds).", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "idle_hold_time": { - "description": "How long to hold a peer in idle before attempting a new session (seconds).", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "interface_name": { - "description": "The name of interface to peer on. This is relative to the port configuration this BGP peer configuration is a part of. For example this value could be phy0 to refer to a primary physical interface. Or it could be vlan47 to refer to a VLAN interface.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "keepalive": { - "description": "How often to send keepalive requests (seconds).", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "local_pref": { - "nullable": true, - "description": "Apply a local preference to routes received from this peer.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "md5_auth_key": { - "nullable": true, - "description": "Use the given key for TCP-MD5 authentication with the peer.", - "type": "string" - }, - "min_ttl": { - "nullable": true, - "description": "Require messages from a peer have a minimum IP time to live field.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "multi_exit_discriminator": { - "nullable": true, - "description": "Apply the provided multi-exit discriminator (MED) updates sent to the peer.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "remote_asn": { - "nullable": true, - "description": "Require that a peer has a specified ASN.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "Associate a VLAN ID with a peer.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "addr", - "allowed_export", - "allowed_import", - "bgp_config", - "communities", - "connect_retry", - "delay_open", - "enforce_first_as", - "hold_time", - "idle_hold_time", - "interface_name", - "keepalive" - ] - }, - "BgpPeerConfig": { - "type": "object", - "properties": { - "link_name": { - "description": "Link that the peer is reachable on. On ports that are not broken out, this is always phy0. On a 2x breakout the options are phy0 and phy1, on 4x phy0-phy3, etc.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "peers": { - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeer" - } - } - }, - "required": [ - "link_name", - "peers" - ] - }, - "BgpPeerState": { - "description": "The current state of a BGP peer.", - "oneOf": [ - { - "description": "Initial state. Refuse all incoming BGP connections. No resources allocated to peer.", - "type": "string", - "enum": [ - "idle" - ] - }, - { - "description": "Waiting for the TCP connection to be completed.", - "type": "string", - "enum": [ - "connect" - ] - }, - { - "description": "Trying to acquire peer by listening for and accepting a TCP connection.", - "type": "string", - "enum": [ - "active" - ] - }, - { - "description": "Waiting for open message from peer.", - "type": "string", - "enum": [ - "open_sent" - ] - }, - { - "description": "Waiting for keepaliave or notification from peer.", - "type": "string", - "enum": [ - "open_confirm" - ] - }, - { - "description": "Synchronizing with peer.", - "type": "string", - "enum": [ - "session_setup" - ] - }, - { - "description": "Session established. Able to exchange update, notification and keepalive messages with peers.", - "type": "string", - "enum": [ - "established" - ] - } - ] - }, - "BgpPeerStatus": { - "description": "The current status of a BGP peer.", - "type": "object", - "properties": { - "addr": { - "description": "IP address of the peer.", - "type": "string", - "format": "ip" - }, - "local_asn": { - "description": "Local autonomous system number.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "remote_asn": { - "description": "Remote autonomous system number.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "state": { - "description": "State of the peer.", - "allOf": [ - { - "$ref": "#/components/schemas/BgpPeerState" - } - ] - }, - "state_duration_millis": { - "description": "Time of last state change.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "description": "Switch with the peer session.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - } - }, - "required": [ - "addr", - "local_asn", - "remote_asn", - "state", - "state_duration_millis", - "switch" - ] - }, - "BinRangedouble": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "number", - "format": "double" - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "number", - "format": "double" - }, - "start": { - "type": "number", - "format": "double" - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "number", - "format": "double" - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangefloat": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "number", - "format": "float" - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "number", - "format": "float" - }, - "start": { - "type": "number", - "format": "float" - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "number", - "format": "float" - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeint16": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int16" - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int16" - }, - "start": { - "type": "integer", - "format": "int16" - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "int16" - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeint32": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int32" - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int32" - }, - "start": { - "type": "integer", - "format": "int32" - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "int32" - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeint64": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int64" - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int64" - }, - "start": { - "type": "integer", - "format": "int64" - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "int64" - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeint8": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int8" - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "int8" - }, - "start": { - "type": "integer", - "format": "int8" - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "int8" - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeuint16": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "start": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeuint32": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "start": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeuint64": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "start": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "BinRangeuint8": { - "description": "A type storing a range over `T`.\n\nThis type supports ranges similar to the `RangeTo`, `Range` and `RangeFrom` types in the standard library. Those cover `(..end)`, `(start..end)`, and `(start..)` respectively.", - "oneOf": [ - { - "description": "A range unbounded below and exclusively above, `..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_to" - ] - } - }, - "required": [ - "end", - "type" - ] - }, - { - "description": "A range bounded inclusively below and exclusively above, `start..end`.", - "type": "object", - "properties": { - "end": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "start": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range" - ] - } - }, - "required": [ - "end", - "start", - "type" - ] - }, - { - "description": "A range bounded inclusively below and unbounded above, `start..`.", - "type": "object", - "properties": { - "start": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "range_from" - ] - } - }, - "required": [ - "start", - "type" - ] - } - ] - }, - "Bindouble": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangedouble" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binfloat": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangefloat" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binint16": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeint16" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binint32": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeint32" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binint64": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeint64" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binint8": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeint8" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binuint16": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeuint16" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binuint32": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeuint32" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binuint64": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeuint64" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "Binuint8": { - "description": "Type storing bin edges and a count of samples within it.", - "type": "object", - "properties": { - "count": { - "description": "The total count of samples in this bin.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "range": { - "description": "The range of the support covered by this bin.", - "allOf": [ - { - "$ref": "#/components/schemas/BinRangeuint8" - } - ] - } - }, - "required": [ - "count", - "range" - ] - }, - "BlockSize": { - "title": "disk block size in bytes", - "type": "integer", - "enum": [ - 512, - 2048, - 4096 - ] - }, - "ByteCount": { - "description": "Byte count to express memory or storage capacity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "Certificate": { - "description": "View of a Certificate", - "type": "object", - "properties": { - "cert": { - "description": "PEM-formatted string containing public certificate chain", - "type": "string" - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "service": { - "description": "The service using this certificate", - "allOf": [ - { - "$ref": "#/components/schemas/ServiceUsingCertificate" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "cert", - "description", - "id", - "name", - "service", - "time_created", - "time_modified" - ] - }, - "CertificateCreate": { - "description": "Create-time parameters for a `Certificate`", - "type": "object", - "properties": { - "cert": { - "description": "PEM-formatted string containing public certificate chain", - "type": "string" - }, - "description": { - "type": "string" - }, - "key": { - "description": "PEM-formatted string containing private key", - "type": "string" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "service": { - "description": "The service using this certificate", - "allOf": [ - { - "$ref": "#/components/schemas/ServiceUsingCertificate" - } - ] - } - }, - "required": [ - "cert", - "description", - "key", - "name", - "service" - ] - }, - "CertificateResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Certificate" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "ConsoleSession": { - "description": "View of a console session", - "type": "object", - "properties": { - "id": { - "description": "A unique, immutable, system-controlled identifier for the session", - "type": "string", - "format": "uuid" - }, - "time_created": { - "type": "string", - "format": "date-time" - }, - "time_last_used": { - "type": "string", - "format": "date-time" - } - }, - "required": [ - "id", - "time_created", - "time_last_used" - ] - }, - "ConsoleSessionResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/ConsoleSession" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "Cumulativedouble": { - "description": "A cumulative or counter data type.", - "type": "object", - "properties": { - "start_time": { - "type": "string", - "format": "date-time" - }, - "value": { - "type": "number", - "format": "double" - } - }, - "required": [ - "start_time", - "value" - ] - }, - "Cumulativefloat": { - "description": "A cumulative or counter data type.", - "type": "object", - "properties": { - "start_time": { - "type": "string", - "format": "date-time" - }, - "value": { - "type": "number", - "format": "float" - } - }, - "required": [ - "start_time", - "value" - ] - }, - "Cumulativeint64": { - "description": "A cumulative or counter data type.", - "type": "object", - "properties": { - "start_time": { - "type": "string", - "format": "date-time" - }, - "value": { - "type": "integer", - "format": "int64" - } - }, - "required": [ - "start_time", - "value" - ] - }, - "Cumulativeuint64": { - "description": "A cumulative or counter data type.", - "type": "object", - "properties": { - "start_time": { - "type": "string", - "format": "date-time" - }, - "value": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "start_time", - "value" - ] - }, - "CurrentUser": { - "description": "Info about the current user", - "type": "object", - "properties": { - "display_name": { - "description": "Human-readable name that can identify the user", - "type": "string" - }, - "fleet_viewer": { - "description": "Whether this user has the viewer role on the fleet. Used by the web console to determine whether to show system-level UI.", - "type": "boolean" - }, - "id": { - "type": "string", - "format": "uuid" - }, - "silo_admin": { - "description": "Whether this user has the admin role on their silo. Used by the web console to determine whether to show admin-only UI elements.", - "type": "boolean" - }, - "silo_id": { - "description": "Uuid of the silo to which this user belongs", - "type": "string", - "format": "uuid" - }, - "silo_name": { - "description": "Name of the silo to which this user belongs.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - }, - "required": [ - "display_name", - "fleet_viewer", - "id", - "silo_admin", - "silo_id", - "silo_name" - ] - }, - "Datum": { - "description": "A `Datum` is a single sampled data point from a metric.", - "oneOf": [ - { - "type": "object", - "properties": { - "datum": { - "type": "boolean" - }, - "type": { - "type": "string", - "enum": [ - "bool" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "int8" - }, - "type": { - "type": "string", - "enum": [ - "i8" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "u8" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "int16" - }, - "type": { - "type": "string", - "enum": [ - "i16" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "u16" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "int32" - }, - "type": { - "type": "string", - "enum": [ - "i32" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "u32" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "int64" - }, - "type": { - "type": "string", - "enum": [ - "i64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "u64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "number", - "format": "float" - }, - "type": { - "type": "string", - "enum": [ - "f32" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "number", - "format": "double" - }, - "type": { - "type": "string", - "enum": [ - "f64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "string" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "type": { - "type": "string", - "enum": [ - "bytes" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Cumulativeint64" - }, - "type": { - "type": "string", - "enum": [ - "cumulative_i64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Cumulativeuint64" - }, - "type": { - "type": "string", - "enum": [ - "cumulative_u64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Cumulativefloat" - }, - "type": { - "type": "string", - "enum": [ - "cumulative_f32" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Cumulativedouble" - }, - "type": { - "type": "string", - "enum": [ - "cumulative_f64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramint8" - }, - "type": { - "type": "string", - "enum": [ - "histogram_i8" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramuint8" - }, - "type": { - "type": "string", - "enum": [ - "histogram_u8" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramint16" - }, - "type": { - "type": "string", - "enum": [ - "histogram_i16" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramuint16" - }, - "type": { - "type": "string", - "enum": [ - "histogram_u16" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramint32" - }, - "type": { - "type": "string", - "enum": [ - "histogram_i32" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramuint32" - }, - "type": { - "type": "string", - "enum": [ - "histogram_u32" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramint64" - }, - "type": { - "type": "string", - "enum": [ - "histogram_i64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramuint64" - }, - "type": { - "type": "string", - "enum": [ - "histogram_u64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramfloat" - }, - "type": { - "type": "string", - "enum": [ - "histogram_f32" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Histogramdouble" - }, - "type": { - "type": "string", - "enum": [ - "histogram_f64" - ] - } - }, - "required": [ - "datum", - "type" - ] - }, - { - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/MissingDatum" - }, - "type": { - "type": "string", - "enum": [ - "missing" - ] - } - }, - "required": [ - "datum", - "type" - ] - } - ] - }, - "DatumType": { - "description": "The type of an individual datum of a metric.", - "type": "string", - "enum": [ - "bool", - "i8", - "u8", - "i16", - "u16", - "i32", - "u32", - "i64", - "u64", - "f32", - "f64", - "string", - "bytes", - "cumulative_i64", - "cumulative_u64", - "cumulative_f32", - "cumulative_f64", - "histogram_i8", - "histogram_u8", - "histogram_i16", - "histogram_u16", - "histogram_i32", - "histogram_u32", - "histogram_i64", - "histogram_u64", - "histogram_f32", - "histogram_f64" - ] - }, - "DerEncodedKeyPair": { - "type": "object", - "properties": { - "private_key": { - "description": "request signing RSA private key in PKCS#1 format (base64 encoded der file)", - "type": "string" - }, - "public_cert": { - "description": "request signing public certificate (base64 encoded der file)", - "type": "string" - } - }, - "required": [ - "private_key", - "public_cert" - ] - }, - "DeviceAccessToken": { - "description": "View of a device access token", - "type": "object", - "properties": { - "id": { - "description": "A unique, immutable, system-controlled identifier for the token. Note that this ID is not the bearer token itself, which starts with \"oxide-token-\"", - "type": "string", - "format": "uuid" - }, - "time_created": { - "type": "string", - "format": "date-time" - }, - "time_expires": { - "nullable": true, - "description": "Expiration timestamp. A null value means the token does not automatically expire.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "id", - "time_created" - ] - }, - "DeviceAccessTokenRequest": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "format": "uuid" - }, - "device_code": { - "type": "string" - }, - "grant_type": { - "type": "string" - } - }, - "required": [ - "client_id", - "device_code", - "grant_type" - ] - }, - "DeviceAccessTokenResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/DeviceAccessToken" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "DeviceAuthRequest": { - "type": "object", - "properties": { - "client_id": { - "type": "string", - "format": "uuid" - }, - "ttl_seconds": { - "nullable": true, - "description": "Optional lifetime for the access token in seconds.\n\nThis value will be validated during the confirmation step. If not specified, it defaults to the silo's max TTL, which can be seen at `/v1/auth-settings`. If specified, must not exceed the silo's max TTL.\n\nSome special logic applies when authenticating the confirmation request with an existing device token: the requested TTL must not produce an expiration time later than the authenticating token's expiration. If no TTL is specified, the expiration will be the lesser of the silo max and the authenticating token's expiration time. To get the longest allowed lifetime, omit the TTL and authenticate with a web console session.", - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - "required": [ - "client_id" - ] - }, - "DeviceAuthVerify": { - "type": "object", - "properties": { - "user_code": { - "type": "string" - } - }, - "required": [ - "user_code" - ] - }, - "Digest": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "sha256" - ] - }, - "value": { - "type": "string" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "Disk": { - "description": "View of a Disk", - "type": "object", - "properties": { - "block_size": { - "$ref": "#/components/schemas/ByteCount" - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "device_path": { - "type": "string" - }, - "disk_type": { - "$ref": "#/components/schemas/DiskType" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "image_id": { - "nullable": true, - "description": "ID of image from which disk was created, if any", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "project_id": { - "type": "string", - "format": "uuid" - }, - "size": { - "$ref": "#/components/schemas/ByteCount" - }, - "snapshot_id": { - "nullable": true, - "description": "ID of snapshot from which disk was created, if any", - "type": "string", - "format": "uuid" - }, - "state": { - "$ref": "#/components/schemas/DiskState" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "block_size", - "description", - "device_path", - "disk_type", - "id", - "name", - "project_id", - "size", - "state", - "time_created", - "time_modified" - ] - }, - "DiskBackend": { - "description": "The source of a `Disk`'s blocks", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "local" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "disk_source": { - "description": "The initial source for this disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskSource" - } - ] - }, - "type": { - "type": "string", - "enum": [ - "distributed" - ] - } - }, - "required": [ - "disk_source", - "type" - ] - } - ] - }, - "DiskCreate": { - "description": "Create-time parameters for a `Disk`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "disk_backend": { - "description": "The source for this `Disk`'s blocks", - "allOf": [ - { - "$ref": "#/components/schemas/DiskBackend" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "size": { - "description": "The total size of the Disk (in bytes)", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "description", - "disk_backend", - "name", - "size" - ] - }, - "DiskPath": { - "type": "object", - "properties": { - "disk": { - "description": "Name or ID of the disk", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - } - }, - "required": [ - "disk" - ] - }, - "DiskResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Disk" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "DiskSource": { - "description": "Different sources for a Distributed Disk", - "oneOf": [ - { - "description": "Create a blank disk", - "type": "object", - "properties": { - "block_size": { - "description": "size of blocks for this Disk. valid values are: 512, 2048, or 4096", - "allOf": [ - { - "$ref": "#/components/schemas/BlockSize" - } - ] - }, - "type": { - "type": "string", - "enum": [ - "blank" - ] - } - }, - "required": [ - "block_size", - "type" - ] - }, - { - "description": "Create a disk from a disk snapshot", - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - }, - "type": { - "type": "string", - "enum": [ - "snapshot" - ] - } - }, - "required": [ - "snapshot_id", - "type" - ] - }, - { - "description": "Create a disk from an image", - "type": "object", - "properties": { - "image_id": { - "type": "string", - "format": "uuid" - }, - "type": { - "type": "string", - "enum": [ - "image" - ] - } - }, - "required": [ - "image_id", - "type" - ] - }, - { - "description": "Create a blank disk that will accept bulk writes or pull blocks from an external source.", - "type": "object", - "properties": { - "block_size": { - "$ref": "#/components/schemas/BlockSize" - }, - "type": { - "type": "string", - "enum": [ - "importing_blocks" - ] - } - }, - "required": [ - "block_size", - "type" - ] - } - ] - }, - "DiskState": { - "description": "State of a Disk", - "oneOf": [ - { - "description": "Disk is being initialized", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "creating" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready but detached from any Instance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready to receive blocks from an external source", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "import_ready" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from a URL", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_url" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from bulk writes", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_bulk_writes" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being finalized to state Detached", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "finalizing" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is undergoing maintenance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "maintenance" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is being detached from the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "detaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk has been destroyed", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is unavailable", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskType": { - "type": "string", - "enum": [ - "distributed", - "local" - ] - }, - "Distributiondouble": { - "description": "A distribution is a sequence of bins and counts in those bins, and some statistical information tracked to compute the mean, standard deviation, and quantile estimates.\n\nMin, max, and the p-* quantiles are treated as optional due to the possibility of distribution operations, like subtraction.", - "type": "object", - "properties": { - "bins": { - "type": "array", - "items": { - "type": "number", - "format": "double" - } - }, - "counts": { - "type": "array", - "items": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "max": { - "nullable": true, - "type": "number", - "format": "double" - }, - "min": { - "nullable": true, - "type": "number", - "format": "double" - }, - "p50": { - "nullable": true, - "type": "number", - "format": "double" - }, - "p90": { - "nullable": true, - "type": "number", - "format": "double" - }, - "p99": { - "nullable": true, - "type": "number", - "format": "double" - }, - "squared_mean": { - "type": "number", - "format": "double" - }, - "sum_of_samples": { - "type": "number", - "format": "double" - } - }, - "required": [ - "bins", - "counts", - "squared_mean", - "sum_of_samples" - ] - }, - "Distributionint64": { - "description": "A distribution is a sequence of bins and counts in those bins, and some statistical information tracked to compute the mean, standard deviation, and quantile estimates.\n\nMin, max, and the p-* quantiles are treated as optional due to the possibility of distribution operations, like subtraction.", - "type": "object", - "properties": { - "bins": { - "type": "array", - "items": { - "type": "integer", - "format": "int64" - } - }, - "counts": { - "type": "array", - "items": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "max": { - "nullable": true, - "type": "integer", - "format": "int64" - }, - "min": { - "nullable": true, - "type": "integer", - "format": "int64" - }, - "p50": { - "nullable": true, - "type": "number", - "format": "double" - }, - "p90": { - "nullable": true, - "type": "number", - "format": "double" - }, - "p99": { - "nullable": true, - "type": "number", - "format": "double" - }, - "squared_mean": { - "type": "number", - "format": "double" - }, - "sum_of_samples": { - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "counts", - "squared_mean", - "sum_of_samples" - ] - }, - "EphemeralIpCreate": { - "description": "Parameters for creating an ephemeral IP address for an instance.", - "type": "object", - "properties": { - "pool": { - "nullable": true, - "description": "Name or ID of the IP pool used to allocate an address. If unspecified, the default IP pool will be used.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - } - } - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "ExternalIp": { - "oneOf": [ - { - "description": "A source NAT IP address.\n\nSNAT addresses are ephemeral addresses used only for outbound connectivity.", - "type": "object", - "properties": { - "first_port": { - "description": "The first usable port within the IP address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The IP address.", - "type": "string", - "format": "ip" - }, - "ip_pool_id": { - "description": "ID of the IP Pool from which the address is taken.", - "type": "string", - "format": "uuid" - }, - "kind": { - "type": "string", - "enum": [ - "snat" - ] - }, - "last_port": { - "description": "The last usable port within the IP address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "ip_pool_id", - "kind", - "last_port" - ] - }, - { - "type": "object", - "properties": { - "ip": { - "type": "string", - "format": "ip" - }, - "ip_pool_id": { - "type": "string", - "format": "uuid" - }, - "kind": { - "type": "string", - "enum": [ - "ephemeral" - ] - } - }, - "required": [ - "ip", - "ip_pool_id", - "kind" - ] - }, - { - "description": "A Floating IP is a well-known IP address which can be attached and detached from instances.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "instance_id": { - "nullable": true, - "description": "The ID of the instance that this Floating IP is attached to, if it is presently in use.", - "type": "string", - "format": "uuid" - }, - "ip": { - "description": "The IP address held by this resource.", - "type": "string", - "format": "ip" - }, - "ip_pool_id": { - "description": "The ID of the IP pool this resource belongs to.", - "type": "string", - "format": "uuid" - }, - "kind": { - "type": "string", - "enum": [ - "floating" - ] - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "project_id": { - "description": "The project this resource exists within.", - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "ip", - "ip_pool_id", - "kind", - "name", - "project_id", - "time_created", - "time_modified" - ] - } - ] - }, - "ExternalIpCreate": { - "description": "Parameters for creating an external IP address for instances.", - "oneOf": [ - { - "description": "An IP address providing both inbound and outbound access. The address is automatically assigned from the provided IP pool or the default IP pool if not specified.", - "type": "object", - "properties": { - "pool": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "type": { - "type": "string", - "enum": [ - "ephemeral" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "An IP address providing both inbound and outbound access. The address is an existing floating IP object assigned to the current project.\n\nThe floating IP must not be in use by another instance or service.", - "type": "object", - "properties": { - "floating_ip": { - "$ref": "#/components/schemas/NameOrId" - }, - "type": { - "type": "string", - "enum": [ - "floating" - ] - } - }, - "required": [ - "floating_ip", - "type" - ] - } - ] - }, - "ExternalIpResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalIp" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "FailureDomain": { - "description": "Describes the scope of affinity for the purposes of co-location.", - "oneOf": [ - { - "description": "Instances are considered co-located if they are on the same sled", - "type": "string", - "enum": [ - "sled" - ] - } - ] - }, - "FieldSchema": { - "description": "The name and type information for a field of a timeseries schema.", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "field_type": { - "$ref": "#/components/schemas/FieldType" - }, - "name": { - "type": "string" - }, - "source": { - "$ref": "#/components/schemas/FieldSource" - } - }, - "required": [ - "description", - "field_type", - "name", - "source" - ] - }, - "FieldSource": { - "description": "The source from which a field is derived, the target or metric.", - "type": "string", - "enum": [ - "target", - "metric" - ] - }, - "FieldType": { - "description": "The `FieldType` identifies the data type of a target or metric field.", - "type": "string", - "enum": [ - "string", - "i8", - "u8", - "i16", - "u16", - "i32", - "u32", - "i64", - "u64", - "ip_addr", - "uuid", - "bool" - ] - }, - "FieldValue": { - "description": "The `FieldValue` contains the value of a target or metric field.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "string" - ] - }, - "value": { - "type": "string" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i8" - ] - }, - "value": { - "type": "integer", - "format": "int8" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "u8" - ] - }, - "value": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i16" - ] - }, - "value": { - "type": "integer", - "format": "int16" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "u16" - ] - }, - "value": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i32" - ] - }, - "value": { - "type": "integer", - "format": "int32" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "u32" - ] - }, - "value": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i64" - ] - }, - "value": { - "type": "integer", - "format": "int64" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "u64" - ] - }, - "value": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip_addr" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "uuid" - ] - }, - "value": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bool" - ] - }, - "value": { - "type": "boolean" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "FinalizeDisk": { - "description": "Parameters for finalizing a disk", - "type": "object", - "properties": { - "snapshot_name": { - "nullable": true, - "description": "If specified a snapshot of the disk will be created with the given name during finalization. If not specified, a snapshot for the disk will _not_ be created. A snapshot can be manually created once the disk transitions into the `Detached` state.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "FleetRole": { - "type": "string", - "enum": [ - "admin", - "collaborator", - "viewer" - ] - }, - "FleetRolePolicy": { - "description": "Policy for a particular resource\n\nNote that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource.", - "type": "object", - "properties": { - "role_assignments": { - "description": "Roles directly assigned on this resource", - "type": "array", - "items": { - "$ref": "#/components/schemas/FleetRoleRoleAssignment" - } - } - }, - "required": [ - "role_assignments" - ] - }, - "FleetRoleRoleAssignment": { - "description": "Describes the assignment of a particular role on a particular resource to a particular identity (user, group, etc.)\n\nThe resource is not part of this structure. Rather, `RoleAssignment`s are put into a `Policy` and that Policy is applied to a particular resource.", - "type": "object", - "properties": { - "identity_id": { - "type": "string", - "format": "uuid" - }, - "identity_type": { - "$ref": "#/components/schemas/IdentityType" - }, - "role_name": { - "$ref": "#/components/schemas/FleetRole" - } - }, - "required": [ - "identity_id", - "identity_type", - "role_name" - ] - }, - "FloatingIp": { - "description": "A Floating IP is a well-known IP address which can be attached and detached from instances.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "instance_id": { - "nullable": true, - "description": "The ID of the instance that this Floating IP is attached to, if it is presently in use.", - "type": "string", - "format": "uuid" - }, - "ip": { - "description": "The IP address held by this resource.", - "type": "string", - "format": "ip" - }, - "ip_pool_id": { - "description": "The ID of the IP pool this resource belongs to.", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "project_id": { - "description": "The project this resource exists within.", - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "ip", - "ip_pool_id", - "name", - "project_id", - "time_created", - "time_modified" - ] - }, - "FloatingIpAttach": { - "description": "Parameters for attaching a floating IP address to another resource", - "type": "object", - "properties": { - "kind": { - "description": "The type of `parent`'s resource", - "allOf": [ - { - "$ref": "#/components/schemas/FloatingIpParentKind" - } - ] - }, - "parent": { - "description": "Name or ID of the resource that this IP address should be attached to", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - } - }, - "required": [ - "kind", - "parent" - ] - }, - "FloatingIpCreate": { - "description": "Parameters for creating a new floating IP address for instances.", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "ip": { - "nullable": true, - "description": "An IP address to reserve for use as a floating IP. This field is optional: when not set, an address will be automatically chosen from `pool`. If set, then the IP must be available in the resolved `pool`.", - "type": "string", - "format": "ip" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "pool": { - "nullable": true, - "description": "The parent IP pool that a floating IP is pulled from. If unset, the default pool is selected.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - } - }, - "required": [ - "description", - "name" - ] - }, - "FloatingIpParentKind": { - "description": "The type of resource that a floating IP is attached to", - "type": "string", - "enum": [ - "instance" - ] - }, - "FloatingIpResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/FloatingIp" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "FloatingIpUpdate": { - "description": "Updateable identity-related parameters", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "Group": { - "description": "View of a Group", - "type": "object", - "properties": { - "display_name": { - "description": "Human-readable name that can identify the group", - "type": "string" - }, - "id": { - "type": "string", - "format": "uuid" - }, - "silo_id": { - "description": "Uuid of the silo to which this group belongs", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "display_name", - "id", - "silo_id" - ] - }, - "GroupResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Group" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "Histogramdouble": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Bindouble" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "number", - "format": "double" - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "number", - "format": "double" - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "number", - "format": "double" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramfloat": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binfloat" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "number", - "format": "float" - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "number", - "format": "float" - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "number", - "format": "double" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramint16": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binint16" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "int16" - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "int16" - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramint32": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binint32" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "int32" - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "int32" - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramint64": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binint64" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "int64" - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "int64" - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramint8": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binint8" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "int8" - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "int8" - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramuint16": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binuint16" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramuint32": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binuint32" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramuint64": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binuint64" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Histogramuint8": { - "description": "Histogram metric\n\nA histogram maintains the count of any number of samples, over a set of bins. Bins are specified on construction via their _left_ edges, inclusive. There can't be any \"gaps\" in the bins, and an additional bin may be added to the left, right, or both so that the bins extend to the entire range of the support.\n\nNote that any gaps, unsorted bins, or non-finite values will result in an error.", - "type": "object", - "properties": { - "bins": { - "description": "The bins of the histogram.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Binuint8" - } - }, - "max": { - "description": "The maximum value of all samples in the histogram.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "min": { - "description": "The minimum value of all samples in the histogram.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "n_samples": { - "description": "The total number of samples in the histogram.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "p50": { - "description": "p50 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p90": { - "description": "p95 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "p99": { - "description": "p99 Quantile", - "allOf": [ - { - "$ref": "#/components/schemas/Quantile" - } - ] - }, - "squared_mean": { - "description": "M2 for Welford's algorithm for variance calculation.\n\nRead about [Welford's algorithm](https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm) for more information on the algorithm.", - "type": "number", - "format": "double" - }, - "start_time": { - "description": "The start time of the histogram.", - "type": "string", - "format": "date-time" - }, - "sum_of_samples": { - "description": "The sum of all samples in the histogram.", - "type": "integer", - "format": "int64" - } - }, - "required": [ - "bins", - "max", - "min", - "n_samples", - "p50", - "p90", - "p99", - "squared_mean", - "start_time", - "sum_of_samples" - ] - }, - "Hostname": { - "title": "An RFC-1035-compliant hostname", - "description": "A hostname identifies a host on a network, and is usually a dot-delimited sequence of labels, where each label contains only letters, digits, or the hyphen. See RFCs 1035 and 952 for more details.", - "type": "string", - "pattern": "^([a-zA-Z0-9]+[a-zA-Z0-9\\-]*(? 2**53 addresses), integer precision will be lost, in exchange for representing the entire range. In such a case the pool still has many available addresses.", - "type": "object", - "properties": { - "capacity": { - "description": "The total number of addresses in the pool.", - "type": "number", - "format": "double" - }, - "remaining": { - "description": "The number of remaining addresses in the pool.", - "type": "number", - "format": "double" - } - }, - "required": [ - "capacity", - "remaining" - ] - }, - "IpRange": { - "oneOf": [ - { - "title": "v4", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv4Range" - } - ] - }, - { - "title": "v6", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Range" - } - ] - } - ] - }, - "IpVersion": { - "description": "The IP address version.", - "type": "string", - "enum": [ - "v4", - "v6" - ] - }, - "Ipv4Net": { - "example": "192.168.1.0/24", - "title": "An IPv4 subnet", - "description": "An IPv4 subnet, including prefix and prefix length", - "x-rust-type": { - "crate": "oxnet", - "path": "oxnet::Ipv4Net", - "version": "0.1.0" - }, - "type": "string", - "pattern": "^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/([0-9]|1[0-9]|2[0-9]|3[0-2])$" - }, - "Ipv4Range": { - "description": "A non-decreasing IPv4 address range, inclusive of both ends.\n\nThe first address must be less than or equal to the last address.", - "type": "object", - "properties": { - "first": { - "type": "string", - "format": "ipv4" - }, - "last": { - "type": "string", - "format": "ipv4" - } - }, - "required": [ - "first", - "last" - ] - }, - "Ipv6Net": { - "example": "fd12:3456::/64", - "title": "An IPv6 subnet", - "description": "An IPv6 subnet, including prefix and subnet mask", - "x-rust-type": { - "crate": "oxnet", - "path": "oxnet::Ipv6Net", - "version": "0.1.0" - }, - "type": "string", - "pattern": "^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/([0-9]|[1-9][0-9]|1[0-1][0-9]|12[0-8])$" - }, - "Ipv6Range": { - "description": "A non-decreasing IPv6 address range, inclusive of both ends.\n\nThe first address must be less than or equal to the last address.", - "type": "object", - "properties": { - "first": { - "type": "string", - "format": "ipv6" - }, - "last": { - "type": "string", - "format": "ipv6" - } - }, - "required": [ - "first", - "last" - ] - }, - "L4PortRange": { - "example": "22", - "title": "A range of IP ports", - "description": "An inclusive-inclusive range of IP ports. The second port may be omitted to represent a single port.", - "type": "string", - "pattern": "^[0-9]{1,5}(-[0-9]{1,5})?$", - "minLength": 1, - "maxLength": 11 - }, - "LinkConfigCreate": { - "description": "Switch link configuration.", - "type": "object", - "properties": { - "autoneg": { - "description": "Whether or not to set autonegotiation.", - "type": "boolean" - }, - "fec": { - "nullable": true, - "description": "The requested forward-error correction method. If this is not specified, the standard FEC for the underlying media will be applied if it can be determined.", - "allOf": [ - { - "$ref": "#/components/schemas/LinkFec" - } - ] - }, - "link_name": { - "description": "Link name. On ports that are not broken out, this is always phy0. On a 2x breakout the options are phy0 and phy1, on 4x phy0-phy3, etc.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "lldp": { - "description": "The link-layer discovery protocol (LLDP) configuration for the link.", - "allOf": [ - { - "$ref": "#/components/schemas/LldpLinkConfigCreate" - } - ] - }, - "mtu": { - "description": "Maximum transmission unit for the link.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "speed": { - "description": "The speed of the link.", - "allOf": [ - { - "$ref": "#/components/schemas/LinkSpeed" - } - ] - }, - "tx_eq": { - "nullable": true, - "description": "Optional tx_eq settings.", - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - } - }, - "required": [ - "autoneg", - "link_name", - "lldp", - "mtu", - "speed" - ] - }, - "LinkFec": { - "description": "The forward error correction mode of a link.", - "oneOf": [ - { - "description": "Firecode forward error correction.", - "type": "string", - "enum": [ - "firecode" - ] - }, - { - "description": "No forward error correction.", - "type": "string", - "enum": [ - "none" - ] - }, - { - "description": "Reed-Solomon forward error correction.", - "type": "string", - "enum": [ - "rs" - ] - } - ] - }, - "LinkSpeed": { - "description": "The speed of a link.", - "oneOf": [ - { - "description": "Zero gigabits per second.", - "type": "string", - "enum": [ - "speed0_g" - ] - }, - { - "description": "1 gigabit per second.", - "type": "string", - "enum": [ - "speed1_g" - ] - }, - { - "description": "10 gigabits per second.", - "type": "string", - "enum": [ - "speed10_g" - ] - }, - { - "description": "25 gigabits per second.", - "type": "string", - "enum": [ - "speed25_g" - ] - }, - { - "description": "40 gigabits per second.", - "type": "string", - "enum": [ - "speed40_g" - ] - }, - { - "description": "50 gigabits per second.", - "type": "string", - "enum": [ - "speed50_g" - ] - }, - { - "description": "100 gigabits per second.", - "type": "string", - "enum": [ - "speed100_g" - ] - }, - { - "description": "200 gigabits per second.", - "type": "string", - "enum": [ - "speed200_g" - ] - }, - { - "description": "400 gigabits per second.", - "type": "string", - "enum": [ - "speed400_g" - ] - } - ] - }, - "LldpLinkConfig": { - "description": "A link layer discovery protocol (LLDP) service configuration.", - "type": "object", - "properties": { - "chassis_id": { - "nullable": true, - "description": "The LLDP chassis identifier TLV.", - "type": "string" - }, - "enabled": { - "description": "Whether or not the LLDP service is enabled.", - "type": "boolean" - }, - "id": { - "description": "The id of this LLDP service instance.", - "type": "string", - "format": "uuid" - }, - "link_description": { - "nullable": true, - "description": "The LLDP link description TLV.", - "type": "string" - }, - "link_name": { - "nullable": true, - "description": "The LLDP link name TLV.", - "type": "string" - }, - "management_ip": { - "nullable": true, - "description": "The LLDP management IP TLV.", - "type": "string", - "format": "ip" - }, - "system_description": { - "nullable": true, - "description": "The LLDP system description TLV.", - "type": "string" - }, - "system_name": { - "nullable": true, - "description": "The LLDP system name TLV.", - "type": "string" - } - }, - "required": [ - "enabled", - "id" - ] - }, - "LldpLinkConfigCreate": { - "description": "The LLDP configuration associated with a port.", - "type": "object", - "properties": { - "chassis_id": { - "nullable": true, - "description": "The LLDP chassis identifier TLV.", - "type": "string" - }, - "enabled": { - "description": "Whether or not LLDP is enabled.", - "type": "boolean" - }, - "link_description": { - "nullable": true, - "description": "The LLDP link description TLV.", - "type": "string" - }, - "link_name": { - "nullable": true, - "description": "The LLDP link name TLV.", - "type": "string" - }, - "management_ip": { - "nullable": true, - "description": "The LLDP management IP TLV.", - "type": "string", - "format": "ip" - }, - "system_description": { - "nullable": true, - "description": "The LLDP system description TLV.", - "type": "string" - }, - "system_name": { - "nullable": true, - "description": "The LLDP system name TLV.", - "type": "string" - } - }, - "required": [ - "enabled" - ] - }, - "LldpNeighbor": { - "description": "Information about LLDP advertisements from other network entities directly connected to a switch port. This structure contains both metadata about when and where the neighbor was seen, as well as the specific information the neighbor was advertising.", - "type": "object", - "properties": { - "chassis_id": { - "description": "The LLDP chassis identifier advertised by the neighbor", - "type": "string" - }, - "first_seen": { - "description": "Initial sighting of this LldpNeighbor", - "type": "string", - "format": "date-time" - }, - "last_seen": { - "description": "Most recent sighting of this LldpNeighbor", - "type": "string", - "format": "date-time" - }, - "link_description": { - "nullable": true, - "description": "The LLDP link description advertised by the neighbor", - "type": "string" - }, - "link_name": { - "description": "The LLDP link name advertised by the neighbor", - "type": "string" - }, - "local_port": { - "description": "The port on which the neighbor was seen", - "type": "string" - }, - "management_ip": { - "description": "The LLDP management IP(s) advertised by the neighbor", - "type": "array", - "items": { - "$ref": "#/components/schemas/ManagementAddress" - } - }, - "system_description": { - "nullable": true, - "description": "The LLDP system description advertised by the neighbor", - "type": "string" - }, - "system_name": { - "nullable": true, - "description": "The LLDP system name advertised by the neighbor", - "type": "string" - } - }, - "required": [ - "chassis_id", - "first_seen", - "last_seen", - "link_name", - "local_port", - "management_ip" - ] - }, - "LldpNeighborResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/LldpNeighbor" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "LoopbackAddress": { - "description": "A loopback address is an address that is assigned to a rack switch but is not associated with any particular port.", - "type": "object", - "properties": { - "address": { - "description": "The loopback IP address and prefix length.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "address_lot_block_id": { - "description": "The address lot block this address came from.", - "type": "string", - "format": "uuid" - }, - "id": { - "description": "The id of the loopback address.", - "type": "string", - "format": "uuid" - }, - "rack_id": { - "description": "The id of the rack where this loopback address is assigned.", - "type": "string", - "format": "uuid" - }, - "switch_location": { - "description": "Switch location where this loopback address is assigned.", - "type": "string" - } - }, - "required": [ - "address", - "address_lot_block_id", - "id", - "rack_id", - "switch_location" - ] - }, - "LoopbackAddressCreate": { - "description": "Parameters for creating a loopback address on a particular rack switch.", - "type": "object", - "properties": { - "address": { - "description": "The address to create.", - "type": "string", - "format": "ip" - }, - "address_lot": { - "description": "The name or id of the address lot this loopback address will pull an address from.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "anycast": { - "description": "Address is an anycast address. This allows the address to be assigned to multiple locations simultaneously.", - "type": "boolean" - }, - "mask": { - "description": "The subnet mask to use for the address.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "rack_id": { - "description": "The rack containing the switch this loopback address will be configured on.", - "type": "string", - "format": "uuid" - }, - "switch_location": { - "description": "The location of the switch within the rack this loopback address will be configured on.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - }, - "required": [ - "address", - "address_lot", - "anycast", - "mask", - "rack_id", - "switch_location" - ] - }, - "LoopbackAddressResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/LoopbackAddress" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "MacAddr": { - "example": "ff:ff:ff:ff:ff:ff", - "title": "A MAC address", - "description": "A Media Access Control address, in EUI-48 format", - "type": "string", - "pattern": "^([0-9a-fA-F]{0,2}:){5}[0-9a-fA-F]{0,2}$", - "minLength": 5, - "maxLength": 17 - }, - "ManagementAddress": { - "type": "object", - "properties": { - "addr": { - "$ref": "#/components/schemas/NetworkAddress" - }, - "interface_num": { - "$ref": "#/components/schemas/InterfaceNum" - }, - "oid": { - "nullable": true, - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "required": [ - "addr", - "interface_num" - ] - }, - "Measurement": { - "description": "A `Measurement` is a timestamped datum from a single metric", - "type": "object", - "properties": { - "datum": { - "$ref": "#/components/schemas/Datum" - }, - "timestamp": { - "type": "string", - "format": "date-time" - } - }, - "required": [ - "datum", - "timestamp" - ] - }, - "MeasurementResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Measurement" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "MetricType": { - "description": "The type of the metric itself, indicating what its values represent.", - "oneOf": [ - { - "description": "The value represents an instantaneous measurement in time.", - "type": "string", - "enum": [ - "gauge" - ] - }, - { - "description": "The value represents a difference between two points in time.", - "type": "string", - "enum": [ - "delta" - ] - }, - { - "description": "The value represents an accumulation between two points in time.", - "type": "string", - "enum": [ - "cumulative" - ] - } - ] - }, - "MissingDatum": { - "type": "object", - "properties": { - "datum_type": { - "$ref": "#/components/schemas/DatumType" - }, - "start_time": { - "nullable": true, - "type": "string", - "format": "date-time" - } - }, - "required": [ - "datum_type" - ] - }, - "MulticastGroup": { - "description": "View of a Multicast Group", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "ip_pool_id": { - "description": "The ID of the IP pool this resource belongs to.", - "type": "string", - "format": "uuid" - }, - "multicast_ip": { - "description": "The multicast IP address held by this resource.", - "type": "string", - "format": "ip" - }, - "mvlan": { - "nullable": true, - "description": "Multicast VLAN (MVLAN) for egress multicast traffic to upstream networks. None means no VLAN tagging on egress.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "source_ips": { - "description": "Source IP addresses for Source-Specific Multicast (SSM). Empty array means any source is allowed.", - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - }, - "state": { - "description": "Current state of the multicast group.", - "type": "string" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "ip_pool_id", - "multicast_ip", - "name", - "source_ips", - "state", - "time_created", - "time_modified" - ] - }, - "MulticastGroupCreate": { - "description": "Create-time parameters for a multicast group.", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "multicast_ip": { - "nullable": true, - "description": "The multicast IP address to allocate. If None, one will be allocated from the default pool.", - "default": null, - "type": "string", - "format": "ip" - }, - "mvlan": { - "nullable": true, - "description": "Multicast VLAN (MVLAN) for egress multicast traffic to upstream networks. Tags packets leaving the rack to traverse VLAN-segmented upstream networks.\n\nValid range: 2-4094 (VLAN IDs 0-1 are reserved by IEEE 802.1Q standard).", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "pool": { - "nullable": true, - "description": "Name or ID of the IP pool to allocate from. If None, uses the default multicast pool.", - "default": null, - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "source_ips": { - "nullable": true, - "description": "Source IP addresses for Source-Specific Multicast (SSM).\n\nNone uses default behavior (Any-Source Multicast). Empty list explicitly allows any source (Any-Source Multicast). Non-empty list restricts to specific sources (SSM).", - "default": null, - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - } - }, - "required": [ - "description", - "name" - ] - }, - "MulticastGroupMember": { - "description": "View of a Multicast Group Member (instance belonging to a multicast group)", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "instance_id": { - "description": "The ID of the instance that is a member of this group.", - "type": "string", - "format": "uuid" - }, - "multicast_group_id": { - "description": "The ID of the multicast group this member belongs to.", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "state": { - "description": "Current state of the multicast group membership.", - "type": "string" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "instance_id", - "multicast_group_id", - "name", - "state", - "time_created", - "time_modified" - ] - }, - "MulticastGroupMemberAdd": { - "description": "Parameters for adding an instance to a multicast group.", - "type": "object", - "properties": { - "instance": { - "description": "Name or ID of the instance to add to the multicast group", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - } - }, - "required": [ - "instance" - ] - }, - "MulticastGroupMemberResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/MulticastGroupMember" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "MulticastGroupResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/MulticastGroup" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "MulticastGroupUpdate": { - "description": "Update-time parameters for a multicast group.", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "mvlan": { - "nullable": true, - "description": "Multicast VLAN (MVLAN) for egress multicast traffic to upstream networks. Set to null to clear the MVLAN. Valid range: 2-4094 when provided. Omit the field to leave mvlan unchanged.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "source_ips": { - "nullable": true, - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - } - } - }, - "Name": { - "title": "A name unique within the parent collection", - "description": "Names must begin with a lower case ASCII letter, be composed exclusively of lowercase ASCII, uppercase ASCII, numbers, and '-', and may not end with a '-'. Names cannot be a UUID, but they may contain a UUID. They can be at most 63 characters long.", - "type": "string", - "pattern": "^(?![0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$)^[a-z]([a-zA-Z0-9-]*[a-zA-Z0-9]+)?$", - "minLength": 1, - "maxLength": 63 - }, - "NameOrId": { - "oneOf": [ - { - "title": "id", - "allOf": [ - { - "type": "string", - "format": "uuid" - } - ] - }, - { - "title": "name", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - ] - }, - "NetworkAddress": { - "oneOf": [ - { - "type": "object", - "properties": { - "ip_addr": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "ip_addr" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "i_e_e_e802": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "required": [ - "i_e_e_e802" - ], - "additionalProperties": false - } - ] - }, - "NetworkInterface": { - "description": "Information required to construct a virtual network interface", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "ip": { - "type": "string", - "format": "ip" - }, - "kind": { - "$ref": "#/components/schemas/NetworkInterfaceKind" - }, - "mac": { - "$ref": "#/components/schemas/MacAddr" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "primary": { - "type": "boolean" - }, - "slot": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "subnet": { - "$ref": "#/components/schemas/IpNet" - }, - "transit_ips": { - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/IpNet" - } - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "id", - "ip", - "kind", - "mac", - "name", - "primary", - "slot", - "subnet", - "vni" - ] - }, - "NetworkInterfaceKind": { - "description": "The type of network interface", - "oneOf": [ - { - "description": "A vNIC attached to a guest instance", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "type": { - "type": "string", - "enum": [ - "instance" - ] - } - }, - "required": [ - "id", - "type" - ] - }, - { - "description": "A vNIC associated with an internal service", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "type": { - "type": "string", - "enum": [ - "service" - ] - } - }, - "required": [ - "id", - "type" - ] - }, - { - "description": "A vNIC associated with a probe", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "type": { - "type": "string", - "enum": [ - "probe" - ] - } - }, - "required": [ - "id", - "type" - ] - } - ] - }, - "OxqlQueryResult": { - "description": "The result of a successful OxQL query.", - "type": "object", - "properties": { - "tables": { - "description": "Tables resulting from the query, each containing timeseries.", - "type": "array", - "items": { - "$ref": "#/components/schemas/OxqlTable" - } - } - }, - "required": [ - "tables" - ] - }, - "OxqlTable": { - "description": "A table represents one or more timeseries with the same schema.\n\nA table is the result of an OxQL query. It contains a name, usually the name of the timeseries schema from which the data is derived, and any number of timeseries, which contain the actual data.", - "type": "object", - "properties": { - "name": { - "description": "The name of the table.", - "type": "string" - }, - "timeseries": { - "description": "The set of timeseries in the table, ordered by key.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Timeseries" - } - } - }, - "required": [ - "name", - "timeseries" - ] - }, - "Password": { - "title": "A password used to authenticate a user", - "description": "Passwords may be subject to additional constraints.", - "type": "string", - "maxLength": 512 - }, - "PhysicalDisk": { - "description": "View of a Physical Disk\n\nPhysical disks reside in a particular sled and are used to store both Instance Disk data as well as internal metadata.", - "type": "object", - "properties": { - "form_factor": { - "$ref": "#/components/schemas/PhysicalDiskKind" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "model": { - "type": "string" - }, - "policy": { - "description": "The operator-defined policy for a physical disk.", - "allOf": [ - { - "$ref": "#/components/schemas/PhysicalDiskPolicy" - } - ] - }, - "serial": { - "type": "string" - }, - "sled_id": { - "nullable": true, - "description": "The sled to which this disk is attached, if any.", - "type": "string", - "format": "uuid" - }, - "state": { - "description": "The current state Nexus believes the disk to be in.", - "allOf": [ - { - "$ref": "#/components/schemas/PhysicalDiskState" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "vendor": { - "type": "string" - } - }, - "required": [ - "form_factor", - "id", - "model", - "policy", - "serial", - "state", - "time_created", - "time_modified", - "vendor" - ] - }, - "PhysicalDiskKind": { - "description": "Describes the form factor of physical disks.", - "type": "string", - "enum": [ - "m2", - "u2" - ] - }, - "PhysicalDiskPolicy": { - "description": "The operator-defined policy of a physical disk.", - "oneOf": [ - { - "description": "The operator has indicated that the disk is in-service.", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "in_service" - ] - } - }, - "required": [ - "kind" - ] - }, - { - "description": "The operator has indicated that the disk has been permanently removed from service.\n\nThis is a terminal state: once a particular disk ID is expunged, it will never return to service. (The actual hardware may be reused, but it will be treated as a brand-new disk.)\n\nAn expunged disk is always non-provisionable.", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "expunged" - ] - } - }, - "required": [ - "kind" - ] - } - ] - }, - "PhysicalDiskResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/PhysicalDisk" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "PhysicalDiskState": { - "description": "The current state of the disk, as determined by Nexus.", - "oneOf": [ - { - "description": "The disk is currently active, and has resources allocated on it.", - "type": "string", - "enum": [ - "active" - ] - }, - { - "description": "The disk has been permanently removed from service.\n\nThis is a terminal state: once a particular disk ID is decommissioned, it will never return to service. (The actual hardware may be reused, but it will be treated as a brand-new disk.)", - "type": "string", - "enum": [ - "decommissioned" - ] - } - ] - }, - "Ping": { - "type": "object", - "properties": { - "status": { - "description": "Whether the external API is reachable. Will always be Ok if the endpoint returns anything at all.", - "allOf": [ - { - "$ref": "#/components/schemas/PingStatus" - } - ] - } - }, - "required": [ - "status" - ] - }, - "PingStatus": { - "type": "string", - "enum": [ - "ok" - ] - }, - "Points": { - "description": "Timepoints and values for one timeseries.", - "type": "object", - "properties": { - "start_times": { - "nullable": true, - "type": "array", - "items": { - "type": "string", - "format": "date-time" - } - }, - "timestamps": { - "type": "array", - "items": { - "type": "string", - "format": "date-time" - } - }, - "values": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Values" - } - } - }, - "required": [ - "timestamps", - "values" - ] - }, - "Probe": { - "description": "Identity-related metadata that's included in nearly all public API objects", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "sled": { - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "name", - "sled", - "time_created", - "time_modified" - ] - }, - "ProbeCreate": { - "description": "Create time parameters for probes.", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "ip_pool": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "sled": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "description", - "name", - "sled" - ] - }, - "ProbeExternalIp": { - "type": "object", - "properties": { - "first_port": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "type": "string", - "format": "ip" - }, - "kind": { - "$ref": "#/components/schemas/ProbeExternalIpKind" - }, - "last_port": { - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "kind", - "last_port" - ] - }, - "ProbeExternalIpKind": { - "type": "string", - "enum": [ - "snat", - "floating", - "ephemeral" - ] - }, - "ProbeInfo": { - "type": "object", - "properties": { - "external_ips": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ProbeExternalIp" - } - }, - "id": { - "type": "string", - "format": "uuid" - }, - "interface": { - "$ref": "#/components/schemas/NetworkInterface" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "sled": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "external_ips", - "id", - "interface", - "name", - "sled" - ] - }, - "ProbeInfoResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/ProbeInfo" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "Project": { - "description": "View of a Project", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "name", - "time_created", - "time_modified" - ] - }, - "ProjectCreate": { - "description": "Create-time parameters for a `Project`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "description", - "name" - ] - }, - "ProjectResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Project" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "ProjectRole": { - "type": "string", - "enum": [ - "admin", - "collaborator", - "limited_collaborator", - "viewer" - ] - }, - "ProjectRolePolicy": { - "description": "Policy for a particular resource\n\nNote that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource.", - "type": "object", - "properties": { - "role_assignments": { - "description": "Roles directly assigned on this resource", - "type": "array", - "items": { - "$ref": "#/components/schemas/ProjectRoleRoleAssignment" - } - } - }, - "required": [ - "role_assignments" - ] - }, - "ProjectRoleRoleAssignment": { - "description": "Describes the assignment of a particular role on a particular resource to a particular identity (user, group, etc.)\n\nThe resource is not part of this structure. Rather, `RoleAssignment`s are put into a `Policy` and that Policy is applied to a particular resource.", - "type": "object", - "properties": { - "identity_id": { - "type": "string", - "format": "uuid" - }, - "identity_type": { - "$ref": "#/components/schemas/IdentityType" - }, - "role_name": { - "$ref": "#/components/schemas/ProjectRole" - } - }, - "required": [ - "identity_id", - "identity_type", - "role_name" - ] - }, - "ProjectUpdate": { - "description": "Updateable properties of a `Project`", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "Quantile": { - "description": "Structure for estimating the p-quantile of a population.\n\nThis is based on the P² algorithm for estimating quantiles using constant space.\n\nThe algorithm consists of maintaining five markers: the minimum, the p/2-, p-, and (1 + p)/2 quantiles, and the maximum.", - "type": "object", - "properties": { - "desired_marker_positions": { - "description": "The desired marker positions.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "minItems": 5, - "maxItems": 5 - }, - "marker_heights": { - "description": "The heights of the markers.", - "type": "array", - "items": { - "type": "number", - "format": "double" - }, - "minItems": 5, - "maxItems": 5 - }, - "marker_positions": { - "description": "The positions of the markers.\n\nWe track sample size in the 5th position, as useful observations won't start until we've filled the heights at the 6th sample anyway This does deviate from the paper, but it's a more useful representation that works according to the paper's algorithm.", - "type": "array", - "items": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "minItems": 5, - "maxItems": 5 - }, - "p": { - "description": "The p value for the quantile.", - "type": "number", - "format": "double" - } - }, - "required": [ - "desired_marker_positions", - "marker_heights", - "marker_positions", - "p" - ] - }, - "Rack": { - "description": "View of an Rack", - "type": "object", - "properties": { - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "id", - "time_created", - "time_modified" - ] - }, - "RackResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Rack" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "Route": { - "description": "A route to a destination network through a gateway address.", - "type": "object", - "properties": { - "dst": { - "description": "The route destination.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "gw": { - "description": "The route gateway.", - "type": "string", - "format": "ip" - }, - "rib_priority": { - "nullable": true, - "description": "Route RIB priority. Higher priority indicates precedence within and across protocols.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "vid": { - "nullable": true, - "description": "VLAN id the gateway is reachable over.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "dst", - "gw" - ] - }, - "RouteConfig": { - "description": "Route configuration data associated with a switch port configuration.", - "type": "object", - "properties": { - "link_name": { - "description": "Link name. On ports that are not broken out, this is always phy0. On a 2x breakout the options are phy0 and phy1, on 4x phy0-phy3, etc.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "routes": { - "description": "The set of routes assigned to a switch port.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Route" - } - } - }, - "required": [ - "link_name", - "routes" - ] - }, - "RouteDestination": { - "description": "A `RouteDestination` is used to match traffic with a routing rule based on the destination of that traffic.\n\nWhen traffic is to be sent to a destination that is within a given `RouteDestination`, the corresponding `RouterRoute` applies, and traffic will be forward to the `RouteTarget` for that rule.", - "oneOf": [ - { - "description": "Route applies to traffic destined for the specified IP address", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Route applies to traffic destined for the specified IP subnet", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip_net" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Route applies to traffic destined for the specified VPC", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Route applies to traffic destined for the specified VPC subnet", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "RouteTarget": { - "description": "A `RouteTarget` describes the possible locations that traffic matching a route destination can be sent.", - "oneOf": [ - { - "description": "Forward traffic to a particular IP address.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Forward traffic to a VPC", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Forward traffic to a VPC Subnet", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Forward traffic to a specific instance", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "instance" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Forward traffic to an internet gateway", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "internet_gateway" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Drop matching traffic", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "drop" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "RouterRoute": { - "description": "A route defines a rule that governs where traffic should be sent based on its destination.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "destination": { - "description": "Selects which traffic this routing rule will apply to", - "allOf": [ - { - "$ref": "#/components/schemas/RouteDestination" - } - ] - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "kind": { - "description": "Describes the kind of router. Set at creation. `read-only`", - "allOf": [ - { - "$ref": "#/components/schemas/RouterRouteKind" - } - ] - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "target": { - "description": "The location that matched packets should be forwarded to", - "allOf": [ - { - "$ref": "#/components/schemas/RouteTarget" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "vpc_router_id": { - "description": "The ID of the VPC Router to which the route belongs", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "description", - "destination", - "id", - "kind", - "name", - "target", - "time_created", - "time_modified", - "vpc_router_id" - ] - }, - "RouterRouteCreate": { - "description": "Create-time parameters for a `RouterRoute`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "destination": { - "description": "Selects which traffic this routing rule will apply to.", - "allOf": [ - { - "$ref": "#/components/schemas/RouteDestination" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "target": { - "description": "The location that matched packets should be forwarded to.", - "allOf": [ - { - "$ref": "#/components/schemas/RouteTarget" - } - ] - } - }, - "required": [ - "description", - "destination", - "name", - "target" - ] - }, - "RouterRouteKind": { - "description": "The kind of a `RouterRoute`\n\nThe kind determines certain attributes such as if the route is modifiable and describes how or where the route was created.", - "oneOf": [ - { - "description": "Determines the default destination of traffic, such as whether it goes to the internet or not.\n\n`Destination: An Internet Gateway` `Modifiable: true`", - "type": "string", - "enum": [ - "default" - ] - }, - { - "description": "Automatically added for each VPC Subnet in the VPC\n\n`Destination: A VPC Subnet` `Modifiable: false`", - "type": "string", - "enum": [ - "vpc_subnet" - ] - }, - { - "description": "Automatically added when VPC peering is established\n\n`Destination: A different VPC` `Modifiable: false`", - "type": "string", - "enum": [ - "vpc_peering" - ] - }, - { - "description": "Created by a user; see `RouteTarget`\n\n`Destination: User defined` `Modifiable: true`", - "type": "string", - "enum": [ - "custom" - ] - } - ] - }, - "RouterRouteResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/RouterRoute" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "RouterRouteUpdate": { - "description": "Updateable properties of a `RouterRoute`", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "destination": { - "description": "Selects which traffic this routing rule will apply to.", - "allOf": [ - { - "$ref": "#/components/schemas/RouteDestination" - } - ] - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "target": { - "description": "The location that matched packets should be forwarded to.", - "allOf": [ - { - "$ref": "#/components/schemas/RouteTarget" - } - ] - } - }, - "required": [ - "destination", - "target" - ] - }, - "SamlIdentityProvider": { - "description": "Identity-related metadata that's included in nearly all public API objects", - "type": "object", - "properties": { - "acs_url": { - "description": "Service provider endpoint where the response will be sent", - "type": "string" - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "group_attribute_name": { - "nullable": true, - "description": "If set, attributes with this name will be considered to denote a user's group membership, where the values will be the group names.", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "idp_entity_id": { - "description": "IdP's entity id", - "type": "string" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "public_cert": { - "nullable": true, - "description": "Optional request signing public certificate (base64 encoded der file)", - "type": "string" - }, - "slo_url": { - "description": "Service provider endpoint where the idp should send log out requests", - "type": "string" - }, - "sp_client_id": { - "description": "SP's client id", - "type": "string" - }, - "technical_contact_email": { - "description": "Customer's technical contact for saml configuration", - "type": "string" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "acs_url", - "description", - "id", - "idp_entity_id", - "name", - "slo_url", - "sp_client_id", - "technical_contact_email", - "time_created", - "time_modified" - ] - }, - "SamlIdentityProviderCreate": { - "description": "Create-time identity-related parameters", - "type": "object", - "properties": { - "acs_url": { - "description": "service provider endpoint where the response will be sent", - "type": "string" - }, - "description": { - "type": "string" - }, - "group_attribute_name": { - "nullable": true, - "description": "If set, SAML attributes with this name will be considered to denote a user's group membership, where the attribute value(s) should be a comma-separated list of group names.", - "type": "string" - }, - "idp_entity_id": { - "description": "idp's entity id", - "type": "string" - }, - "idp_metadata_source": { - "description": "the source of an identity provider metadata descriptor", - "allOf": [ - { - "$ref": "#/components/schemas/IdpMetadataSource" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "signing_keypair": { - "nullable": true, - "description": "request signing key pair", - "default": null, - "allOf": [ - { - "$ref": "#/components/schemas/DerEncodedKeyPair" - } - ] - }, - "slo_url": { - "description": "service provider endpoint where the idp should send log out requests", - "type": "string" - }, - "sp_client_id": { - "description": "sp's client id", - "type": "string" - }, - "technical_contact_email": { - "description": "customer's technical contact for saml configuration", - "type": "string" - } - }, - "required": [ - "acs_url", - "description", - "idp_entity_id", - "idp_metadata_source", - "name", - "slo_url", - "sp_client_id", - "technical_contact_email" - ] - }, - "ScimClientBearerToken": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "time_created": { - "type": "string", - "format": "date-time" - }, - "time_expires": { - "nullable": true, - "type": "string", - "format": "date-time" - } - }, - "required": [ - "id", - "time_created" - ] - }, - "ScimClientBearerTokenValue": { - "description": "The POST response is the only time the generated bearer token is returned to the client.", - "type": "object", - "properties": { - "bearer_token": { - "type": "string" - }, - "id": { - "type": "string", - "format": "uuid" - }, - "time_created": { - "type": "string", - "format": "date-time" - }, - "time_expires": { - "nullable": true, - "type": "string", - "format": "date-time" - } - }, - "required": [ - "bearer_token", - "id", - "time_created" - ] - }, - "ServiceIcmpConfig": { - "description": "Configuration of inbound ICMP allowed by API services.", - "type": "object", - "properties": { - "enabled": { - "description": "When enabled, Nexus is able to receive ICMP Destination Unreachable type 3 (port unreachable) and type 4 (fragmentation needed), Redirect, and Time Exceeded messages. These enable Nexus to perform Path MTU discovery and better cope with fragmentation issues. Otherwise all inbound ICMP traffic will be dropped.", - "type": "boolean" - } - }, - "required": [ - "enabled" - ] - }, - "ServiceUsingCertificate": { - "description": "The service intended to use this certificate.", - "oneOf": [ - { - "description": "This certificate is intended for access to the external API.", - "type": "string", - "enum": [ - "external_api" - ] - } - ] - }, - "SetTargetReleaseParams": { - "description": "Parameters for PUT requests to `/v1/system/update/target-release`.", - "type": "object", - "properties": { - "system_version": { - "description": "Version of the system software to make the target release.", - "type": "string", - "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$" - } - }, - "required": [ - "system_version" - ] - }, - "Silo": { - "description": "View of a Silo\n\nA Silo is the highest level unit of isolation.", - "type": "object", - "properties": { - "admin_group_name": { - "nullable": true, - "description": "Optionally, silos can have a group name that is automatically granted the silo admin role.", - "type": "string" - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "discoverable": { - "description": "A silo where discoverable is false can be retrieved only by its id - it will not be part of the \"list all silos\" output.", - "type": "boolean" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "identity_mode": { - "description": "How users and groups are managed in this Silo", - "allOf": [ - { - "$ref": "#/components/schemas/SiloIdentityMode" - } - ] - }, - "mapped_fleet_roles": { - "description": "Mapping of which Fleet roles are conferred by each Silo role\n\nThe default is that no Fleet roles are conferred by any Silo roles unless there's a corresponding entry in this map.", - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FleetRole" - }, - "uniqueItems": true - } - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "discoverable", - "id", - "identity_mode", - "mapped_fleet_roles", - "name", - "time_created", - "time_modified" - ] - }, - "SiloAuthSettings": { - "description": "View of silo authentication settings", - "type": "object", - "properties": { - "device_token_max_ttl_seconds": { - "nullable": true, - "description": "Maximum lifetime of a device token in seconds. If set to null, users will be able to create tokens that do not expire.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "silo_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "silo_id" - ] - }, - "SiloAuthSettingsUpdate": { - "description": "Updateable properties of a silo's settings.", - "type": "object", - "properties": { - "device_token_max_ttl_seconds": { - "nullable": true, - "description": "Maximum lifetime of a device token in seconds. If set to null, users will be able to create tokens that do not expire.", - "type": "integer", - "format": "uint32", - "minimum": 1 - } - }, - "required": [ - "device_token_max_ttl_seconds" - ] - }, - "SiloCreate": { - "description": "Create-time parameters for a `Silo`", - "type": "object", - "properties": { - "admin_group_name": { - "nullable": true, - "description": "If set, this group will be created during Silo creation and granted the \"Silo Admin\" role. Identity providers can assert that users belong to this group and those users can log in and further initialize the Silo.\n\nNote that if configuring a SAML based identity provider, group_attribute_name must be set for users to be considered part of a group. See `SamlIdentityProviderCreate` for more information.", - "type": "string" - }, - "description": { - "type": "string" - }, - "discoverable": { - "type": "boolean" - }, - "identity_mode": { - "$ref": "#/components/schemas/SiloIdentityMode" - }, - "mapped_fleet_roles": { - "description": "Mapping of which Fleet roles are conferred by each Silo role\n\nThe default is that no Fleet roles are conferred by any Silo roles unless there's a corresponding entry in this map.", - "default": {}, - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FleetRole" - }, - "uniqueItems": true - } - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "quotas": { - "description": "Limits the amount of provisionable CPU, memory, and storage in the Silo. CPU and memory are only consumed by running instances, while storage is consumed by any disk or snapshot. A value of 0 means that resource is *not* provisionable.", - "allOf": [ - { - "$ref": "#/components/schemas/SiloQuotasCreate" - } - ] - }, - "tls_certificates": { - "description": "Initial TLS certificates to be used for the new Silo's console and API endpoints. These should be valid for the Silo's DNS name(s).", - "type": "array", - "items": { - "$ref": "#/components/schemas/CertificateCreate" - } - } - }, - "required": [ - "description", - "discoverable", - "identity_mode", - "name", - "quotas", - "tls_certificates" - ] - }, - "SiloIdentityMode": { - "description": "Describes how identities are managed and users are authenticated in this Silo", - "oneOf": [ - { - "description": "Users are authenticated with SAML using an external authentication provider. The system updates information about users and groups only during successful authentication (i.e,. \"JIT provisioning\" of users and groups).", - "type": "string", - "enum": [ - "saml_jit" - ] - }, - { - "description": "The system is the source of truth about users. There is no linkage to an external authentication provider or identity provider.", - "type": "string", - "enum": [ - "local_only" - ] - }, - { - "description": "Users are authenticated with SAML using an external authentication provider. Users and groups are managed with SCIM API calls, likely from the same authentication provider.", - "type": "string", - "enum": [ - "saml_scim" - ] - } - ] - }, - "SiloIpPool": { - "description": "An IP pool in the context of a silo", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "is_default": { - "description": "When a pool is the default for a silo, floating IPs and instance ephemeral IPs will come from that pool when no other pool is specified. There can be at most one default for a given silo.", - "type": "boolean" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "is_default", - "name", - "time_created", - "time_modified" - ] - }, - "SiloIpPoolResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SiloIpPool" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SiloQuotas": { - "description": "A collection of resource counts used to set the virtual capacity of a silo", - "type": "object", - "properties": { - "cpus": { - "description": "Number of virtual CPUs", - "type": "integer", - "format": "int64" - }, - "memory": { - "description": "Amount of memory in bytes", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "silo_id": { - "type": "string", - "format": "uuid" - }, - "storage": { - "description": "Amount of disk storage in bytes", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "cpus", - "memory", - "silo_id", - "storage" - ] - }, - "SiloQuotasCreate": { - "description": "The amount of provisionable resources for a Silo", - "type": "object", - "properties": { - "cpus": { - "description": "The amount of virtual CPUs available for running instances in the Silo", - "type": "integer", - "format": "int64" - }, - "memory": { - "description": "The amount of RAM (in bytes) available for running instances in the Silo", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "storage": { - "description": "The amount of storage (in bytes) available for disks or snapshots", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "cpus", - "memory", - "storage" - ] - }, - "SiloQuotasResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SiloQuotas" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SiloQuotasUpdate": { - "description": "Updateable properties of a Silo's resource limits. If a value is omitted it will not be updated.", - "type": "object", - "properties": { - "cpus": { - "nullable": true, - "description": "The amount of virtual CPUs available for running instances in the Silo", - "type": "integer", - "format": "int64" - }, - "memory": { - "nullable": true, - "description": "The amount of RAM (in bytes) available for running instances in the Silo", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "storage": { - "nullable": true, - "description": "The amount of storage (in bytes) available for disks or snapshots", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - } - }, - "SiloResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Silo" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SiloRole": { - "type": "string", - "enum": [ - "admin", - "collaborator", - "limited_collaborator", - "viewer" - ] - }, - "SiloRolePolicy": { - "description": "Policy for a particular resource\n\nNote that the Policy only describes access granted explicitly for this resource. The policies of parent resources can also cause a user to have access to this resource.", - "type": "object", - "properties": { - "role_assignments": { - "description": "Roles directly assigned on this resource", - "type": "array", - "items": { - "$ref": "#/components/schemas/SiloRoleRoleAssignment" - } - } - }, - "required": [ - "role_assignments" - ] - }, - "SiloRoleRoleAssignment": { - "description": "Describes the assignment of a particular role on a particular resource to a particular identity (user, group, etc.)\n\nThe resource is not part of this structure. Rather, `RoleAssignment`s are put into a `Policy` and that Policy is applied to a particular resource.", - "type": "object", - "properties": { - "identity_id": { - "type": "string", - "format": "uuid" - }, - "identity_type": { - "$ref": "#/components/schemas/IdentityType" - }, - "role_name": { - "$ref": "#/components/schemas/SiloRole" - } - }, - "required": [ - "identity_id", - "identity_type", - "role_name" - ] - }, - "SiloUtilization": { - "description": "View of a silo's resource utilization and capacity", - "type": "object", - "properties": { - "allocated": { - "description": "Accounts for the total amount of resources reserved for silos via their quotas", - "allOf": [ - { - "$ref": "#/components/schemas/VirtualResourceCounts" - } - ] - }, - "provisioned": { - "description": "Accounts for resources allocated by in silos like CPU or memory for running instances and storage for disks and snapshots Note that CPU and memory resources associated with a stopped instances are not counted here", - "allOf": [ - { - "$ref": "#/components/schemas/VirtualResourceCounts" - } - ] - }, - "silo_id": { - "type": "string", - "format": "uuid" - }, - "silo_name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "allocated", - "provisioned", - "silo_id", - "silo_name" - ] - }, - "SiloUtilizationResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SiloUtilization" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "Sled": { - "description": "An operator's view of a Sled.", - "type": "object", - "properties": { - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "policy": { - "description": "The operator-defined policy of a sled.", - "allOf": [ - { - "$ref": "#/components/schemas/SledPolicy" - } - ] - }, - "rack_id": { - "description": "The rack to which this Sled is currently attached", - "type": "string", - "format": "uuid" - }, - "state": { - "description": "The current state of the sled.", - "allOf": [ - { - "$ref": "#/components/schemas/SledState" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "usable_hardware_threads": { - "description": "The number of hardware threads which can execute on this sled", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "usable_physical_ram": { - "description": "Amount of RAM which may be used by the Sled's OS", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "baseboard", - "id", - "policy", - "rack_id", - "state", - "time_created", - "time_modified", - "usable_hardware_threads", - "usable_physical_ram" - ] - }, - "SledId": { - "description": "The unique ID of a sled.", - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "id" - ] - }, - "SledInstance": { - "description": "An operator's view of an instance running on a given sled", - "type": "object", - "properties": { - "active_sled_id": { - "type": "string", - "format": "uuid" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "memory": { - "type": "integer", - "format": "int64" - }, - "migration_id": { - "nullable": true, - "type": "string", - "format": "uuid" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "ncpus": { - "type": "integer", - "format": "int64" - }, - "project_name": { - "$ref": "#/components/schemas/Name" - }, - "silo_name": { - "$ref": "#/components/schemas/Name" - }, - "state": { - "$ref": "#/components/schemas/InstanceState" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "active_sled_id", - "id", - "memory", - "name", - "ncpus", - "project_name", - "silo_name", - "state", - "time_created", - "time_modified" - ] - }, - "SledInstanceResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledInstance" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SledPolicy": { - "description": "The operator-defined policy of a sled.", - "oneOf": [ - { - "description": "The operator has indicated that the sled is in-service.", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "in_service" - ] - }, - "provision_policy": { - "description": "Determines whether new resources can be provisioned onto the sled.", - "allOf": [ - { - "$ref": "#/components/schemas/SledProvisionPolicy" - } - ] - } - }, - "required": [ - "kind", - "provision_policy" - ] - }, - { - "description": "The operator has indicated that the sled has been permanently removed from service.\n\nThis is a terminal state: once a particular sled ID is expunged, it will never return to service. (The actual hardware may be reused, but it will be treated as a brand-new sled.)\n\nAn expunged sled is always non-provisionable.", - "type": "object", - "properties": { - "kind": { - "type": "string", - "enum": [ - "expunged" - ] - } - }, - "required": [ - "kind" - ] - } - ] - }, - "SledProvisionPolicy": { - "description": "The operator-defined provision policy of a sled.\n\nThis controls whether new resources are going to be provisioned on this sled.", - "oneOf": [ - { - "description": "New resources will be provisioned on this sled.", - "type": "string", - "enum": [ - "provisionable" - ] - }, - { - "description": "New resources will not be provisioned on this sled. However, if the sled is currently in service, existing resources will continue to be on this sled unless manually migrated off.", - "type": "string", - "enum": [ - "non_provisionable" - ] - } - ] - }, - "SledProvisionPolicyParams": { - "description": "Parameters for `sled_set_provision_policy`.", - "type": "object", - "properties": { - "state": { - "description": "The provision state.", - "allOf": [ - { - "$ref": "#/components/schemas/SledProvisionPolicy" - } - ] - } - }, - "required": [ - "state" - ] - }, - "SledProvisionPolicyResponse": { - "description": "Response to `sled_set_provision_policy`.", - "type": "object", - "properties": { - "new_state": { - "description": "The new provision state.", - "allOf": [ - { - "$ref": "#/components/schemas/SledProvisionPolicy" - } - ] - }, - "old_state": { - "description": "The old provision state.", - "allOf": [ - { - "$ref": "#/components/schemas/SledProvisionPolicy" - } - ] - } - }, - "required": [ - "new_state", - "old_state" - ] - }, - "SledResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Sled" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SledState": { - "description": "The current state of the sled.", - "oneOf": [ - { - "description": "The sled is currently active, and has resources allocated on it.", - "type": "string", - "enum": [ - "active" - ] - }, - { - "description": "The sled has been permanently removed from service.\n\nThis is a terminal state: once a particular sled ID is decommissioned, it will never return to service. (The actual hardware may be reused, but it will be treated as a brand-new sled.)", - "type": "string", - "enum": [ - "decommissioned" - ] - } - ] - }, - "Snapshot": { - "description": "View of a Snapshot", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "disk_id": { - "type": "string", - "format": "uuid" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "project_id": { - "type": "string", - "format": "uuid" - }, - "size": { - "$ref": "#/components/schemas/ByteCount" - }, - "state": { - "$ref": "#/components/schemas/SnapshotState" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "disk_id", - "id", - "name", - "project_id", - "size", - "state", - "time_created", - "time_modified" - ] - }, - "SnapshotCreate": { - "description": "Create-time parameters for a `Snapshot`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "disk": { - "description": "The disk to be snapshotted", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "description", - "disk", - "name" - ] - }, - "SnapshotResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Snapshot" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SnapshotState": { - "type": "string", - "enum": [ - "creating", - "ready", - "faulted", - "destroyed" - ] - }, - "SshKey": { - "description": "View of an SSH Key", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "public_key": { - "description": "SSH public key, e.g., `\"ssh-ed25519 AAAAC3NzaC...\"`", - "type": "string" - }, - "silo_user_id": { - "description": "The user to whom this key belongs", - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "name", - "public_key", - "silo_user_id", - "time_created", - "time_modified" - ] - }, - "SshKeyCreate": { - "description": "Create-time parameters for an `SshKey`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "public_key": { - "description": "SSH public key, e.g., `\"ssh-ed25519 AAAAC3NzaC...\"`", - "type": "string" - } - }, - "required": [ - "description", - "name", - "public_key" - ] - }, - "SshKeyResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SshKey" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SupportBundleCreate": { - "type": "object", - "properties": { - "user_comment": { - "nullable": true, - "description": "User comment for the support bundle", - "type": "string" - } - } - }, - "SupportBundleInfo": { - "type": "object", - "properties": { - "id": { - "type": "string", - "format": "uuid" - }, - "reason_for_creation": { - "type": "string" - }, - "reason_for_failure": { - "nullable": true, - "type": "string" - }, - "state": { - "$ref": "#/components/schemas/SupportBundleState" - }, - "time_created": { - "type": "string", - "format": "date-time" - }, - "user_comment": { - "nullable": true, - "type": "string" - } - }, - "required": [ - "id", - "reason_for_creation", - "state", - "time_created" - ] - }, - "SupportBundleInfoResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportBundleInfo" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SupportBundleState": { - "oneOf": [ - { - "description": "Support Bundle still actively being collected.\n\nThis is the initial state for a Support Bundle, and it will automatically transition to either \"Failing\" or \"Active\".\n\nIf a user no longer wants to access a Support Bundle, they can request cancellation, which will transition to the \"Destroying\" state.", - "type": "string", - "enum": [ - "collecting" - ] - }, - { - "description": "Support Bundle is being destroyed.\n\nOnce backing storage has been freed, this bundle is destroyed.", - "type": "string", - "enum": [ - "destroying" - ] - }, - { - "description": "Support Bundle was not created successfully, or was created and has lost backing storage.\n\nThe record of the bundle still exists for readability, but the only valid operation on these bundles is to destroy them.", - "type": "string", - "enum": [ - "failed" - ] - }, - { - "description": "Support Bundle has been processed, and is ready for usage.", - "type": "string", - "enum": [ - "active" - ] - } - ] - }, - "SupportBundleUpdate": { - "type": "object", - "properties": { - "user_comment": { - "nullable": true, - "description": "User comment for the support bundle", - "type": "string" - } - } - }, - "Switch": { - "description": "An operator's view of a Switch.", - "type": "object", - "properties": { - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "rack_id": { - "description": "The rack to which this Switch is currently attached", - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "baseboard", - "id", - "rack_id", - "time_created", - "time_modified" - ] - }, - "SwitchBgpHistory": { - "description": "BGP message history for a particular switch.", - "type": "object", - "properties": { - "history": { - "description": "Message history indexed by peer address.", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/BgpMessageHistory" - } - }, - "switch": { - "description": "Switch this message history is associated with.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - } - }, - "required": [ - "history", - "switch" - ] - }, - "SwitchInterfaceConfig": { - "description": "A switch port interface configuration for a port settings object.", - "type": "object", - "properties": { - "id": { - "description": "A unique identifier for this switch interface.", - "type": "string", - "format": "uuid" - }, - "interface_name": { - "description": "The name of this switch interface.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "kind": { - "description": "The switch interface kind.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchInterfaceKind2" - } - ] - }, - "port_settings_id": { - "description": "The port settings object this switch interface configuration belongs to.", - "type": "string", - "format": "uuid" - }, - "v6_enabled": { - "description": "Whether or not IPv6 is enabled on this interface.", - "type": "boolean" - } - }, - "required": [ - "id", - "interface_name", - "kind", - "port_settings_id", - "v6_enabled" - ] - }, - "SwitchInterfaceConfigCreate": { - "description": "A layer-3 switch interface configuration. When IPv6 is enabled, a link local address will be created for the interface.", - "type": "object", - "properties": { - "kind": { - "description": "What kind of switch interface this configuration represents.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchInterfaceKind" - } - ] - }, - "link_name": { - "description": "Link name. On ports that are not broken out, this is always phy0. On a 2x breakout the options are phy0 and phy1, on 4x phy0-phy3, etc.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "v6_enabled": { - "description": "Whether or not IPv6 is enabled.", - "type": "boolean" - } - }, - "required": [ - "kind", - "link_name", - "v6_enabled" - ] - }, - "SwitchInterfaceKind": { - "description": "Indicates the kind for a switch interface.", - "oneOf": [ - { - "description": "Primary interfaces are associated with physical links. There is exactly one primary interface per physical link.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "primary" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "VLAN interfaces allow physical interfaces to be multiplexed onto multiple logical links, each distinguished by a 12-bit 802.1Q Ethernet tag.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vlan" - ] - }, - "vid": { - "description": "The virtual network id (VID) that distinguishes this interface and is used for producing and consuming 802.1Q Ethernet tags. This field has a maximum value of 4095 as 802.1Q tags are twelve bits.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "type", - "vid" - ] - }, - { - "description": "Loopback interfaces are anchors for IP addresses that are not specific to any particular port.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "loopback" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "SwitchInterfaceKind2": { - "description": "Describes the kind of an switch interface.", - "oneOf": [ - { - "description": "Primary interfaces are associated with physical links. There is exactly one primary interface per physical link.", - "type": "string", - "enum": [ - "primary" - ] - }, - { - "description": "VLAN interfaces allow physical interfaces to be multiplexed onto multiple logical links, each distinguished by a 12-bit 802.1Q Ethernet tag.", - "type": "string", - "enum": [ - "vlan" - ] - }, - { - "description": "Loopback interfaces are anchors for IP addresses that are not specific to any particular port.", - "type": "string", - "enum": [ - "loopback" - ] - } - ] - }, - "SwitchLinkState": {}, - "SwitchLocation": { - "description": "Identifies switch physical location", - "oneOf": [ - { - "description": "Switch in upper slot", - "type": "string", - "enum": [ - "switch0" - ] - }, - { - "description": "Switch in lower slot", - "type": "string", - "enum": [ - "switch1" - ] - } - ] - }, - "SwitchPort": { - "description": "A switch port represents a physical external port on a rack switch.", - "type": "object", - "properties": { - "id": { - "description": "The id of the switch port.", - "type": "string", - "format": "uuid" - }, - "port_name": { - "description": "The name of this switch port.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "port_settings_id": { - "nullable": true, - "description": "The primary settings group of this switch port. Will be `None` until this switch port is configured.", - "type": "string", - "format": "uuid" - }, - "rack_id": { - "description": "The rack this switch port belongs to.", - "type": "string", - "format": "uuid" - }, - "switch_location": { - "description": "The switch location of this switch port.", - "type": "string" - } - }, - "required": [ - "id", - "port_name", - "rack_id", - "switch_location" - ] - }, - "SwitchPortAddressView": { - "description": "An IP address configuration for a port settings object.", - "type": "object", - "properties": { - "address": { - "description": "The IP address and prefix.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "address_lot_block_id": { - "description": "The id of the address lot block this address is drawn from.", - "type": "string", - "format": "uuid" - }, - "address_lot_id": { - "description": "The id of the address lot this address is drawn from.", - "type": "string", - "format": "uuid" - }, - "address_lot_name": { - "description": "The name of the address lot this address is drawn from.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "interface_name": { - "description": "The interface name this address belongs to.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "port_settings_id": { - "description": "The port settings object this address configuration belongs to.", - "type": "string", - "format": "uuid" - }, - "vlan_id": { - "nullable": true, - "description": "An optional VLAN ID", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "address", - "address_lot_block_id", - "address_lot_id", - "address_lot_name", - "interface_name", - "port_settings_id" - ] - }, - "SwitchPortApplySettings": { - "description": "Parameters for applying settings to switch ports.", - "type": "object", - "properties": { - "port_settings": { - "description": "A name or id to use when applying switch port settings.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - } - }, - "required": [ - "port_settings" - ] - }, - "SwitchPortConfig": { - "description": "A physical port configuration for a port settings object.", - "type": "object", - "properties": { - "geometry": { - "description": "The physical link geometry of the port.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchPortGeometry2" - } - ] - }, - "port_settings_id": { - "description": "The id of the port settings object this configuration belongs to.", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "geometry", - "port_settings_id" - ] - }, - "SwitchPortConfigCreate": { - "description": "Physical switch port configuration.", - "type": "object", - "properties": { - "geometry": { - "description": "Link geometry for the switch port.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchPortGeometry" - } - ] - } - }, - "required": [ - "geometry" - ] - }, - "SwitchPortGeometry": { - "description": "The link geometry associated with a switch port.", - "oneOf": [ - { - "description": "The port contains a single QSFP28 link with four lanes.", - "type": "string", - "enum": [ - "qsfp28x1" - ] - }, - { - "description": "The port contains two QSFP28 links each with two lanes.", - "type": "string", - "enum": [ - "qsfp28x2" - ] - }, - { - "description": "The port contains four SFP28 links each with one lane.", - "type": "string", - "enum": [ - "sfp28x4" - ] - } - ] - }, - "SwitchPortGeometry2": { - "description": "The link geometry associated with a switch port.", - "oneOf": [ - { - "description": "The port contains a single QSFP28 link with four lanes.", - "type": "string", - "enum": [ - "qsfp28x1" - ] - }, - { - "description": "The port contains two QSFP28 links each with two lanes.", - "type": "string", - "enum": [ - "qsfp28x2" - ] - }, - { - "description": "The port contains four SFP28 links each with one lane.", - "type": "string", - "enum": [ - "sfp28x4" - ] - } - ] - }, - "SwitchPortLinkConfig": { - "description": "A link configuration for a port settings object.", - "type": "object", - "properties": { - "autoneg": { - "description": "Whether or not the link has autonegotiation enabled.", - "type": "boolean" - }, - "fec": { - "nullable": true, - "description": "The requested forward-error correction method. If this is not specified, the standard FEC for the underlying media will be applied if it can be determined.", - "allOf": [ - { - "$ref": "#/components/schemas/LinkFec" - } - ] - }, - "link_name": { - "description": "The name of this link.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "lldp_link_config": { - "nullable": true, - "description": "The link-layer discovery protocol service configuration for this link.", - "allOf": [ - { - "$ref": "#/components/schemas/LldpLinkConfig" - } - ] - }, - "mtu": { - "description": "The maximum transmission unit for this link.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "port_settings_id": { - "description": "The port settings this link configuration belongs to.", - "type": "string", - "format": "uuid" - }, - "speed": { - "description": "The configured speed of the link.", - "allOf": [ - { - "$ref": "#/components/schemas/LinkSpeed" - } - ] - }, - "tx_eq_config": { - "nullable": true, - "description": "The tx_eq configuration for this link.", - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig2" - } - ] - } - }, - "required": [ - "autoneg", - "link_name", - "mtu", - "port_settings_id", - "speed" - ] - }, - "SwitchPortResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchPort" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SwitchPortRouteConfig": { - "description": "A route configuration for a port settings object.", - "type": "object", - "properties": { - "dst": { - "description": "The route's destination network.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "gw": { - "description": "The route's gateway address.", - "type": "string", - "format": "ip" - }, - "interface_name": { - "description": "The interface name this route configuration is assigned to.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "port_settings_id": { - "description": "The port settings object this route configuration belongs to.", - "type": "string", - "format": "uuid" - }, - "rib_priority": { - "nullable": true, - "description": "Route RIB priority. Higher priority indicates precedence within and across protocols.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN identifier for the route. Use this if the gateway is reachable over an 802.1Q tagged L2 segment.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "dst", - "gw", - "interface_name", - "port_settings_id" - ] - }, - "SwitchPortSettings": { - "description": "This structure contains all port settings information in one place. It's a convenience data structure for getting a complete view of a particular port's settings.", - "type": "object", - "properties": { - "addresses": { - "description": "Layer 3 IP address settings.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchPortAddressView" - } - }, - "bgp_peers": { - "description": "BGP peer settings.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeer" - } - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "groups": { - "description": "Switch port settings included from other switch port settings groups.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchPortSettingsGroups" - } - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "interfaces": { - "description": "Layer 3 interface settings.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchInterfaceConfig" - } - }, - "links": { - "description": "Layer 2 link settings.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchPortLinkConfig" - } - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "port": { - "description": "Layer 1 physical port settings.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchPortConfig" - } - ] - }, - "routes": { - "description": "IP route settings.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchPortRouteConfig" - } - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "vlan_interfaces": { - "description": "Vlan interface settings.", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchVlanInterfaceConfig" - } - } - }, - "required": [ - "addresses", - "bgp_peers", - "description", - "groups", - "id", - "interfaces", - "links", - "name", - "port", - "routes", - "time_created", - "time_modified", - "vlan_interfaces" - ] - }, - "SwitchPortSettingsCreate": { - "description": "Parameters for creating switch port settings. Switch port settings are the central data structure for setting up external networking. Switch port settings include link, interface, route, address and dynamic network protocol configuration.", - "type": "object", - "properties": { - "addresses": { - "description": "Address configurations.", - "type": "array", - "items": { - "$ref": "#/components/schemas/AddressConfig" - } - }, - "bgp_peers": { - "description": "BGP peer configurations.", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeerConfig" - } - }, - "description": { - "type": "string" - }, - "groups": { - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/NameOrId" - } - }, - "interfaces": { - "description": "Interface configurations.", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchInterfaceConfigCreate" - } - }, - "links": { - "description": "Link configurations.", - "type": "array", - "items": { - "$ref": "#/components/schemas/LinkConfigCreate" - } - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "port_config": { - "$ref": "#/components/schemas/SwitchPortConfigCreate" - }, - "routes": { - "description": "Route configurations.", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/RouteConfig" - } - } - }, - "required": [ - "addresses", - "description", - "links", - "name", - "port_config" - ] - }, - "SwitchPortSettingsGroups": { - "description": "This structure maps a port settings object to a port settings groups. Port settings objects may inherit settings from groups. This mapping defines the relationship between settings objects and the groups they reference.", - "type": "object", - "properties": { - "port_settings_group_id": { - "description": "The id of a port settings group being referenced by a port settings object.", - "type": "string", - "format": "uuid" - }, - "port_settings_id": { - "description": "The id of a port settings object referencing a port settings group.", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "port_settings_group_id", - "port_settings_id" - ] - }, - "SwitchPortSettingsIdentity": { - "description": "A switch port settings identity whose id may be used to view additional details.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "name", - "time_created", - "time_modified" - ] - }, - "SwitchPortSettingsIdentityResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/SwitchPortSettingsIdentity" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SwitchResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Switch" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "SwitchVlanInterfaceConfig": { - "description": "A switch port VLAN interface configuration for a port settings object.", - "type": "object", - "properties": { - "interface_config_id": { - "description": "The switch interface configuration this VLAN interface configuration belongs to.", - "type": "string", - "format": "uuid" - }, - "vlan_id": { - "description": "The virtual network id for this interface that is used for producing and consuming 802.1Q Ethernet tags. This field has a maximum value of 4095 as 802.1Q tags are twelve bits.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "interface_config_id", - "vlan_id" - ] - }, - "TargetRelease": { - "description": "View of a system software target release", - "type": "object", - "properties": { - "time_requested": { - "description": "Time this was set as the target release", - "type": "string", - "format": "date-time" - }, - "version": { - "description": "The specified release of the rack's system software", - "type": "string", - "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$" - } - }, - "required": [ - "time_requested", - "version" - ] - }, - "Timeseries": { - "description": "A timeseries contains a timestamped set of values from one source.\n\nThis includes the typed key-value pairs that uniquely identify it, and the set of timestamps and data values from it.", - "type": "object", - "properties": { - "fields": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/FieldValue" - } - }, - "points": { - "$ref": "#/components/schemas/Points" - } - }, - "required": [ - "fields", - "points" - ] - }, - "TimeseriesDescription": { - "description": "Text descriptions for the target and metric of a timeseries.", - "type": "object", - "properties": { - "metric": { - "type": "string" - }, - "target": { - "type": "string" - } - }, - "required": [ - "metric", - "target" - ] - }, - "TimeseriesName": { - "title": "The name of a timeseries", - "description": "Names are constructed by concatenating the target and metric names with ':'. Target and metric names must be lowercase alphanumeric characters with '_' separating words.", - "type": "string", - "pattern": "^(([a-z]+[a-z0-9]*)(_([a-z0-9]+))*):(([a-z]+[a-z0-9]*)(_([a-z0-9]+))*)$" - }, - "TimeseriesQuery": { - "description": "A timeseries query string, written in the Oximeter query language.", - "type": "object", - "properties": { - "query": { - "description": "A timeseries query string, written in the Oximeter query language.", - "type": "string" - } - }, - "required": [ - "query" - ] - }, - "TimeseriesSchema": { - "description": "The schema for a timeseries.\n\nThis includes the name of the timeseries, as well as the datum type of its metric and the schema for each field.", - "type": "object", - "properties": { - "authz_scope": { - "$ref": "#/components/schemas/AuthzScope" - }, - "created": { - "type": "string", - "format": "date-time" - }, - "datum_type": { - "$ref": "#/components/schemas/DatumType" - }, - "description": { - "$ref": "#/components/schemas/TimeseriesDescription" - }, - "field_schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FieldSchema" - }, - "uniqueItems": true - }, - "timeseries_name": { - "$ref": "#/components/schemas/TimeseriesName" - }, - "units": { - "$ref": "#/components/schemas/Units" - }, - "version": { - "type": "integer", - "format": "uint8", - "minimum": 1 - } - }, - "required": [ - "authz_scope", - "created", - "datum_type", - "description", - "field_schema", - "timeseries_name", - "units", - "version" - ] - }, - "TimeseriesSchemaResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/TimeseriesSchema" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "TufRepo": { - "description": "Metadata about a TUF repository", - "type": "object", - "properties": { - "file_name": { - "description": "The file name of the repository, as reported by the client that uploaded it\n\nThis is intended for debugging. The file name may not match any particular pattern, and even if it does, it may not be accurate since it's just what the client reported.", - "type": "string" - }, - "hash": { - "description": "The hash of the repository", - "type": "string", - "format": "hex string (32 bytes)" - }, - "system_version": { - "description": "The system version for this repository\n\nThe system version is a top-level version number applied to all the software in the repository.", - "type": "string", - "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$" - }, - "time_created": { - "description": "Time the repository was uploaded", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "file_name", - "hash", - "system_version", - "time_created" - ] - }, - "TufRepoResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/TufRepo" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "TufRepoUpload": { - "type": "object", - "properties": { - "repo": { - "$ref": "#/components/schemas/TufRepo" - }, - "status": { - "$ref": "#/components/schemas/TufRepoUploadStatus" - } - }, - "required": [ - "repo", - "status" - ] - }, - "TufRepoUploadStatus": { - "description": "Whether the uploaded TUF repo already existed or was new and had to be inserted. Part of `TufRepoUpload`.", - "oneOf": [ - { - "description": "The repository already existed in the database", - "type": "string", - "enum": [ - "already_exists" - ] - }, - { - "description": "The repository did not exist, and was inserted into the database", - "type": "string", - "enum": [ - "inserted" - ] - } - ] - }, - "TxEqConfig": { - "description": "Per-port tx-eq overrides. This can be used to fine-tune the transceiver equalization settings to improve signal integrity.", - "type": "object", - "properties": { - "main": { - "nullable": true, - "description": "Main tap", - "type": "integer", - "format": "int32" - }, - "post1": { - "nullable": true, - "description": "Post-cursor tap1", - "type": "integer", - "format": "int32" - }, - "post2": { - "nullable": true, - "description": "Post-cursor tap2", - "type": "integer", - "format": "int32" - }, - "pre1": { - "nullable": true, - "description": "Pre-cursor tap1", - "type": "integer", - "format": "int32" - }, - "pre2": { - "nullable": true, - "description": "Pre-cursor tap2", - "type": "integer", - "format": "int32" - } - } - }, - "TxEqConfig2": { - "description": "Per-port tx-eq overrides. This can be used to fine-tune the transceiver equalization settings to improve signal integrity.", - "type": "object", - "properties": { - "main": { - "nullable": true, - "description": "Main tap", - "type": "integer", - "format": "int32" - }, - "post1": { - "nullable": true, - "description": "Post-cursor tap1", - "type": "integer", - "format": "int32" - }, - "post2": { - "nullable": true, - "description": "Post-cursor tap2", - "type": "integer", - "format": "int32" - }, - "pre1": { - "nullable": true, - "description": "Pre-cursor tap1", - "type": "integer", - "format": "int32" - }, - "pre2": { - "nullable": true, - "description": "Pre-cursor tap2", - "type": "integer", - "format": "int32" - } - } - }, - "UninitializedSled": { - "description": "A sled that has not been added to an initialized rack yet", - "type": "object", - "properties": { - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - }, - "cubby": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "rack_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "baseboard", - "cubby", - "rack_id" - ] - }, - "UninitializedSledId": { - "description": "The unique hardware ID for a sled", - "type": "object", - "properties": { - "part": { - "type": "string" - }, - "serial": { - "type": "string" - } - }, - "required": [ - "part", - "serial" - ] - }, - "UninitializedSledResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/UninitializedSled" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "Units": { - "description": "Measurement units for timeseries samples.", - "oneOf": [ - { - "type": "string", - "enum": [ - "count", - "bytes", - "seconds", - "nanoseconds", - "volts", - "amps", - "watts", - "degrees_celsius" - ] - }, - { - "description": "No meaningful units, e.g. a dimensionless quanity.", - "type": "string", - "enum": [ - "none" - ] - }, - { - "description": "Rotations per minute.", - "type": "string", - "enum": [ - "rpm" - ] - } - ] - }, - "UpdateStatus": { - "type": "object", - "properties": { - "components_by_release_version": { - "description": "Count of components running each release version\n\nKeys will be either:\n\n* Semver-like release version strings * \"install dataset\", representing the initial rack software before any updates * \"unknown\", which means there is no TUF repo uploaded that matches the software running on the component)", - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "suspended": { - "description": "Whether automatic update is suspended due to manual update activity\n\nAfter a manual support procedure that changes the system software, automatic update activity is suspended to avoid undoing the change. To resume automatic update, first upload the TUF repository matching the manually applied update, then set that as the target release.", - "type": "boolean" - }, - "target_release": { - "nullable": true, - "description": "Current target release of the system software\n\nThis may not correspond to the actual system software running at the time of request; it is instead the release that the system should be moving towards as a goal state. The system asynchronously updates software to match this target release.\n\nWill only be null if a target release has never been set. In that case, the system is not automatically attempting to manage software versions.", - "allOf": [ - { - "$ref": "#/components/schemas/TargetRelease" - } - ] - }, - "time_last_step_planned": { - "description": "Time of most recent update planning activity\n\nThis is intended as a rough indicator of the last time something happened in the update planner.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "components_by_release_version", - "suspended", - "target_release", - "time_last_step_planned" - ] - }, - "UpdatesTrustRoot": { - "description": "Trusted root role used by the update system to verify update repositories.", - "type": "object", - "properties": { - "id": { - "description": "The UUID of this trusted root role.", - "type": "string", - "format": "uuid" - }, - "root_role": { - "description": "The trusted root role itself, a JSON document as described by The Update Framework." - }, - "time_created": { - "description": "Time the trusted root role was added.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "id", - "root_role", - "time_created" - ] - }, - "UpdatesTrustRootResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/UpdatesTrustRoot" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "User": { - "description": "View of a User", - "type": "object", - "properties": { - "display_name": { - "description": "Human-readable name that can identify the user", - "type": "string" - }, - "id": { - "type": "string", - "format": "uuid" - }, - "silo_id": { - "description": "Uuid of the silo to which this user belongs", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "display_name", - "id", - "silo_id" - ] - }, - "UserBuiltin": { - "description": "View of a Built-in User\n\nBuilt-in users are identities internal to the system, used when the control plane performs actions autonomously", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "id", - "name", - "time_created", - "time_modified" - ] - }, - "UserBuiltinResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/UserBuiltin" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "UserCreate": { - "description": "Create-time parameters for a `User`", - "type": "object", - "properties": { - "external_id": { - "description": "username used to log in", - "allOf": [ - { - "$ref": "#/components/schemas/UserId" - } - ] - }, - "password": { - "description": "how to set the user's login password", - "allOf": [ - { - "$ref": "#/components/schemas/UserPassword" - } - ] - } - }, - "required": [ - "external_id", - "password" - ] - }, - "UserId": { - "title": "A username for a local-only user", - "description": "Usernames must begin with a lower case ASCII letter, be composed exclusively of lowercase ASCII, uppercase ASCII, numbers, and '-', and may not end with a '-'. Usernames cannot be a UUID, but they may contain a UUID. They can be at most 63 characters long.", - "type": "string", - "pattern": "^(?![0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$)^[a-z]([a-zA-Z0-9-]*[a-zA-Z0-9]+)?$", - "minLength": 1, - "maxLength": 63 - }, - "UserPassword": { - "description": "Parameters for setting a user's password", - "oneOf": [ - { - "description": "Sets the user's password to the provided value", - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "password" - ] - }, - "value": { - "$ref": "#/components/schemas/Password" - } - }, - "required": [ - "mode", - "value" - ] - }, - { - "description": "Invalidates any current password (disabling password authentication)", - "type": "object", - "properties": { - "mode": { - "type": "string", - "enum": [ - "login_disallowed" - ] - } - }, - "required": [ - "mode" - ] - } - ] - }, - "UserResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/User" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "UsernamePasswordCredentials": { - "description": "Credentials for local user login", - "type": "object", - "properties": { - "password": { - "$ref": "#/components/schemas/Password" - }, - "username": { - "$ref": "#/components/schemas/UserId" - } - }, - "required": [ - "password", - "username" - ] - }, - "Utilization": { - "description": "View of the current silo's resource utilization and capacity", - "type": "object", - "properties": { - "capacity": { - "description": "The total amount of resources that can be provisioned in this silo Actions that would exceed this limit will fail", - "allOf": [ - { - "$ref": "#/components/schemas/VirtualResourceCounts" - } - ] - }, - "provisioned": { - "description": "Accounts for resources allocated to running instances or storage allocated via disks or snapshots Note that CPU and memory resources associated with a stopped instances are not counted here whereas associated disks will still be counted", - "allOf": [ - { - "$ref": "#/components/schemas/VirtualResourceCounts" - } - ] - } - }, - "required": [ - "capacity", - "provisioned" - ] - }, - "ValueArray": { - "description": "List of data values for one timeseries.\n\nEach element is an option, where `None` represents a missing sample.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "integer" - ] - }, - "values": { - "type": "array", - "items": { - "nullable": true, - "type": "integer", - "format": "int64" - } - } - }, - "required": [ - "type", - "values" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "double" - ] - }, - "values": { - "type": "array", - "items": { - "nullable": true, - "type": "number", - "format": "double" - } - } - }, - "required": [ - "type", - "values" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "boolean" - ] - }, - "values": { - "type": "array", - "items": { - "nullable": true, - "type": "boolean" - } - } - }, - "required": [ - "type", - "values" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "string" - ] - }, - "values": { - "type": "array", - "items": { - "nullable": true, - "type": "string" - } - } - }, - "required": [ - "type", - "values" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "integer_distribution" - ] - }, - "values": { - "type": "array", - "items": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Distributionint64" - } - ] - } - } - }, - "required": [ - "type", - "values" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "double_distribution" - ] - }, - "values": { - "type": "array", - "items": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Distributiondouble" - } - ] - } - } - }, - "required": [ - "type", - "values" - ] - } - ] - }, - "Values": { - "description": "A single list of values, for one dimension of a timeseries.", - "type": "object", - "properties": { - "metric_type": { - "description": "The type of this metric.", - "allOf": [ - { - "$ref": "#/components/schemas/MetricType" - } - ] - }, - "values": { - "description": "The data values.", - "allOf": [ - { - "$ref": "#/components/schemas/ValueArray" - } - ] - } - }, - "required": [ - "metric_type", - "values" - ] - }, - "VirtualResourceCounts": { - "description": "A collection of resource counts used to describe capacity and utilization", - "type": "object", - "properties": { - "cpus": { - "description": "Number of virtual CPUs", - "type": "integer", - "format": "int64" - }, - "memory": { - "description": "Amount of memory in bytes", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "storage": { - "description": "Amount of disk storage in bytes", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "cpus", - "memory", - "storage" - ] - }, - "Vni": { - "description": "A Geneve Virtual Network Identifier", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "Vpc": { - "description": "View of a VPC", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "dns_name": { - "description": "The name used for the VPC in DNS.", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "ipv6_prefix": { - "description": "The unique local IPv6 address range for subnets in this VPC", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Net" - } - ] - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "project_id": { - "description": "id for the project containing this VPC", - "type": "string", - "format": "uuid" - }, - "system_router_id": { - "description": "id for the system router where subnet default routes are registered", - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "dns_name", - "id", - "ipv6_prefix", - "name", - "project_id", - "system_router_id", - "time_created", - "time_modified" - ] - }, - "VpcCreate": { - "description": "Create-time parameters for a `Vpc`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "dns_name": { - "$ref": "#/components/schemas/Name" - }, - "ipv6_prefix": { - "nullable": true, - "description": "The IPv6 prefix for this VPC\n\nAll IPv6 subnets created from this VPC must be taken from this range, which should be a Unique Local Address in the range `fd00::/48`. The default VPC Subnet will have the first `/64` range from this prefix.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Net" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "description", - "dns_name", - "name" - ] - }, - "VpcFirewallIcmpFilter": { - "type": "object", - "properties": { - "code": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/IcmpParamRange" - } - ] - }, - "icmp_type": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "icmp_type" - ] - }, - "VpcFirewallRule": { - "description": "A single rule in a VPC firewall", - "type": "object", - "properties": { - "action": { - "description": "Whether traffic matching the rule should be allowed or dropped", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleAction" - } - ] - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "direction": { - "description": "Whether this rule is for incoming or outgoing traffic", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleDirection" - } - ] - }, - "filters": { - "description": "Reductions on the scope of the rule", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleFilter" - } - ] - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "priority": { - "description": "The relative priority of this rule", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "status": { - "description": "Whether this rule is in effect", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleStatus" - } - ] - }, - "targets": { - "description": "Determine the set of instances that the rule applies to", - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleTarget" - } - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "vpc_id": { - "description": "The VPC to which this rule belongs", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "action", - "description", - "direction", - "filters", - "id", - "name", - "priority", - "status", - "targets", - "time_created", - "time_modified", - "vpc_id" - ] - }, - "VpcFirewallRuleAction": { - "type": "string", - "enum": [ - "allow", - "deny" - ] - }, - "VpcFirewallRuleDirection": { - "type": "string", - "enum": [ - "inbound", - "outbound" - ] - }, - "VpcFirewallRuleFilter": { - "description": "Filters reduce the scope of a firewall rule. Without filters, the rule applies to all packets to the targets (or from the targets, if it's an outbound rule). With multiple filters, the rule applies only to packets matching ALL filters. The maximum number of each type of filter is 256.", - "type": "object", - "properties": { - "hosts": { - "nullable": true, - "description": "If present, host filters match the \"other end\" of traffic from the target’s perspective: for an inbound rule, they match the source of traffic. For an outbound rule, they match the destination.", - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleHostFilter" - }, - "maxItems": 256 - }, - "ports": { - "nullable": true, - "description": "If present, the destination ports or port ranges this rule applies to.", - "type": "array", - "items": { - "$ref": "#/components/schemas/L4PortRange" - }, - "maxItems": 256 - }, - "protocols": { - "nullable": true, - "description": "If present, the networking protocols this rule applies to.", - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleProtocol" - }, - "maxItems": 256 - } - } - }, - "VpcFirewallRuleHostFilter": { - "description": "The `VpcFirewallRuleHostFilter` is used to filter traffic on the basis of its source or destination host.", - "oneOf": [ - { - "description": "The rule applies to traffic from/to all instances in the VPC", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to traffic from/to all instances in the VPC Subnet", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to traffic from/to this specific instance", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "instance" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to traffic from/to a specific IP address", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to traffic from/to a specific IP subnet", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip_net" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleProtocol": { - "description": "The protocols that may be specified in a firewall rule's filter", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "tcp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "udp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "icmp" - ] - }, - "value": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallIcmpFilter" - } - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleStatus": { - "type": "string", - "enum": [ - "disabled", - "enabled" - ] - }, - "VpcFirewallRuleTarget": { - "description": "A `VpcFirewallRuleTarget` is used to specify the set of instances to which a firewall rule applies. You can target instances directly by name, or specify a VPC, VPC subnet, IP, or IP subnet, which will apply the rule to traffic going to all matching instances. Targets are additive: the rule applies to instances matching ANY target.", - "oneOf": [ - { - "description": "The rule applies to all instances in the VPC", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to all instances in the VPC Subnet", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to this specific instance", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "instance" - ] - }, - "value": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to a specific IP address", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The rule applies to a specific IP subnet", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip_net" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleUpdate": { - "description": "A single rule in a VPC firewall", - "type": "object", - "properties": { - "action": { - "description": "Whether traffic matching the rule should be allowed or dropped", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleAction" - } - ] - }, - "description": { - "description": "Human-readable free-form text about a resource", - "type": "string" - }, - "direction": { - "description": "Whether this rule is for incoming or outgoing traffic", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleDirection" - } - ] - }, - "filters": { - "description": "Reductions on the scope of the rule", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleFilter" - } - ] - }, - "name": { - "description": "Name of the rule, unique to this VPC", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "priority": { - "description": "The relative priority of this rule", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "status": { - "description": "Whether this rule is in effect", - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallRuleStatus" - } - ] - }, - "targets": { - "description": "Determine the set of instances that the rule applies to", - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleTarget" - }, - "maxItems": 256 - } - }, - "required": [ - "action", - "description", - "direction", - "filters", - "name", - "priority", - "status", - "targets" - ] - }, - "VpcFirewallRuleUpdateParams": { - "description": "Updated list of firewall rules. Will replace all existing rules.", - "type": "object", - "properties": { - "rules": { - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleUpdate" - }, - "maxItems": 1024 - } - } - }, - "VpcFirewallRules": { - "description": "Collection of a Vpc's firewall rules", - "type": "object", - "properties": { - "rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRule" - } - } - }, - "required": [ - "rules" - ] - }, - "VpcResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/Vpc" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "VpcRouter": { - "description": "A VPC router defines a series of rules that indicate where traffic should be sent depending on its destination.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "kind": { - "$ref": "#/components/schemas/VpcRouterKind" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "vpc_id": { - "description": "The VPC to which the router belongs.", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "description", - "id", - "kind", - "name", - "time_created", - "time_modified", - "vpc_id" - ] - }, - "VpcRouterCreate": { - "description": "Create-time parameters for a `VpcRouter`", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "description", - "name" - ] - }, - "VpcRouterKind": { - "type": "string", - "enum": [ - "system", - "custom" - ] - }, - "VpcRouterResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcRouter" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "VpcRouterUpdate": { - "description": "Updateable properties of a `VpcRouter`", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "VpcSubnet": { - "description": "A VPC subnet represents a logical grouping for instances that allows network traffic between them, within a IPv4 subnetwork or optionally an IPv6 subnetwork.", - "type": "object", - "properties": { - "custom_router_id": { - "nullable": true, - "description": "ID for an attached custom router.", - "type": "string", - "format": "uuid" - }, - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "ipv4_block": { - "description": "The IPv4 subnet CIDR block.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv4Net" - } - ] - }, - "ipv6_block": { - "description": "The IPv6 subnet CIDR block.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Net" - } - ] - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - }, - "vpc_id": { - "description": "The VPC to which the subnet belongs.", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "description", - "id", - "ipv4_block", - "ipv6_block", - "name", - "time_created", - "time_modified", - "vpc_id" - ] - }, - "VpcSubnetCreate": { - "description": "Create-time parameters for a `VpcSubnet`", - "type": "object", - "properties": { - "custom_router": { - "nullable": true, - "description": "An optional router, used to direct packets sent from hosts in this subnet to any destination address.\n\nCustom routers apply in addition to the VPC-wide *system* router, and have higher priority than the system router for an otherwise equal-prefix-length match.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "description": { - "type": "string" - }, - "ipv4_block": { - "description": "The IPv4 address range for this subnet.\n\nIt must be allocated from an RFC 1918 private address range, and must not overlap with any other existing subnet in the VPC.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv4Net" - } - ] - }, - "ipv6_block": { - "nullable": true, - "description": "The IPv6 address range for this subnet.\n\nIt must be allocated from the RFC 4193 Unique Local Address range, with the prefix equal to the parent VPC's prefix. A random `/64` block will be assigned if one is not provided. It must not overlap with any existing subnet in the VPC.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Net" - } - ] - }, - "name": { - "$ref": "#/components/schemas/Name" - } - }, - "required": [ - "description", - "ipv4_block", - "name" - ] - }, - "VpcSubnetResultsPage": { - "description": "A single page of results", - "type": "object", - "properties": { - "items": { - "description": "list of items on this page of results", - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcSubnet" - } - }, - "next_page": { - "nullable": true, - "description": "token used to fetch the next page of results (if any)", - "type": "string" - } - }, - "required": [ - "items" - ] - }, - "VpcSubnetUpdate": { - "description": "Updateable properties of a `VpcSubnet`", - "type": "object", - "properties": { - "custom_router": { - "nullable": true, - "description": "An optional router, used to direct packets sent from hosts in this subnet to any destination address.", - "allOf": [ - { - "$ref": "#/components/schemas/NameOrId" - } - ] - }, - "description": { - "nullable": true, - "type": "string" - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "VpcUpdate": { - "description": "Updateable properties of a `Vpc`", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "dns_name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "WebhookCreate": { - "description": "Create-time identity-related parameters", - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "endpoint": { - "description": "The URL that webhook notification requests should be sent to", - "type": "string", - "format": "uri" - }, - "name": { - "$ref": "#/components/schemas/Name" - }, - "secrets": { - "description": "A non-empty list of secret keys used to sign webhook payloads.", - "type": "array", - "items": { - "type": "string" - } - }, - "subscriptions": { - "description": "A list of webhook event class subscriptions.\n\nIf this list is empty or is not included in the request body, the webhook will not be subscribed to any events.", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/AlertSubscription" - } - } - }, - "required": [ - "description", - "endpoint", - "name", - "secrets" - ] - }, - "WebhookDeliveryAttempt": { - "description": "An individual delivery attempt for a webhook event.\n\nThis represents a single HTTP request that was sent to the receiver, and its outcome.", - "type": "object", - "properties": { - "attempt": { - "description": "The attempt number.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "response": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/WebhookDeliveryResponse" - } - ] - }, - "result": { - "description": "The outcome of this delivery attempt: either the event was delivered successfully, or the request failed for one of several reasons.", - "allOf": [ - { - "$ref": "#/components/schemas/WebhookDeliveryAttemptResult" - } - ] - }, - "time_sent": { - "description": "The time at which the webhook delivery was attempted.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "attempt", - "result", - "time_sent" - ] - }, - "WebhookDeliveryAttemptResult": { - "oneOf": [ - { - "description": "The webhook event has been delivered successfully.", - "type": "string", - "enum": [ - "succeeded" - ] - }, - { - "description": "A webhook request was sent to the endpoint, and it returned a HTTP error status code indicating an error.", - "type": "string", - "enum": [ - "failed_http_error" - ] - }, - { - "description": "The webhook request could not be sent to the receiver endpoint.", - "type": "string", - "enum": [ - "failed_unreachable" - ] - }, - { - "description": "A connection to the receiver endpoint was successfully established, but no response was received within the delivery timeout.", - "type": "string", - "enum": [ - "failed_timeout" - ] - } - ] - }, - "WebhookDeliveryResponse": { - "description": "The response received from a webhook receiver endpoint.", - "type": "object", - "properties": { - "duration_ms": { - "description": "The response time of the webhook endpoint, in milliseconds.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "status": { - "description": "The HTTP status code returned from the webhook endpoint.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "duration_ms", - "status" - ] - }, - "WebhookReceiver": { - "description": "The configuration for a webhook alert receiver.", - "type": "object", - "properties": { - "description": { - "description": "human-readable free-form text about a resource", - "type": "string" - }, - "endpoint": { - "description": "The URL that webhook notification requests are sent to.", - "type": "string", - "format": "uri" - }, - "id": { - "description": "unique, immutable, system-controlled identifier for each resource", - "type": "string", - "format": "uuid" - }, - "name": { - "description": "unique, mutable, user-controlled identifier for each resource", - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - }, - "secrets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WebhookSecret" - } - }, - "subscriptions": { - "description": "The list of alert classes to which this receiver is subscribed.", - "type": "array", - "items": { - "$ref": "#/components/schemas/AlertSubscription" - } - }, - "time_created": { - "description": "timestamp when this resource was created", - "type": "string", - "format": "date-time" - }, - "time_modified": { - "description": "timestamp when this resource was last modified", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "description", - "endpoint", - "id", - "name", - "secrets", - "subscriptions", - "time_created", - "time_modified" - ] - }, - "WebhookReceiverUpdate": { - "description": "Parameters to update a webhook configuration.", - "type": "object", - "properties": { - "description": { - "nullable": true, - "type": "string" - }, - "endpoint": { - "nullable": true, - "description": "The URL that webhook notification requests should be sent to", - "type": "string", - "format": "uri" - }, - "name": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/Name" - } - ] - } - } - }, - "WebhookSecret": { - "description": "A view of a shared secret key assigned to a webhook receiver.\n\nOnce a secret is created, the value of the secret is not available in the API, as it must remain secret. Instead, secrets are referenced by their unique IDs assigned when they are created.", - "type": "object", - "properties": { - "id": { - "description": "The public unique ID of the secret.", - "type": "string", - "format": "uuid" - }, - "time_created": { - "description": "The UTC timestamp at which this secret was created.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "id", - "time_created" - ] - }, - "WebhookSecretCreate": { - "type": "object", - "properties": { - "secret": { - "description": "The value of the shared secret key.", - "type": "string" - } - }, - "required": [ - "secret" - ] - }, - "WebhookSecrets": { - "description": "A list of the IDs of secrets associated with a webhook receiver.", - "type": "object", - "properties": { - "secrets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/WebhookSecret" - } - } - }, - "required": [ - "secrets" - ] - }, - "NameOrIdSortMode": { - "description": "Supported set of sort modes for scanning by name or id", - "oneOf": [ - { - "description": "sort in increasing order of \"name\"", - "type": "string", - "enum": [ - "name_ascending" - ] - }, - { - "description": "sort in decreasing order of \"name\"", - "type": "string", - "enum": [ - "name_descending" - ] - }, - { - "description": "sort in increasing order of \"id\"", - "type": "string", - "enum": [ - "id_ascending" - ] - } - ] - }, - "TimeAndIdSortMode": { - "description": "Supported set of sort modes for scanning by timestamp and ID", - "oneOf": [ - { - "description": "sort in increasing order of timestamp and ID, i.e., earliest first", - "type": "string", - "enum": [ - "time_and_id_ascending" - ] - }, - { - "description": "sort in increasing order of timestamp and ID, i.e., most recent first", - "type": "string", - "enum": [ - "time_and_id_descending" - ] - } - ] - }, - "IdSortMode": { - "description": "Supported set of sort modes for scanning by id only.\n\nCurrently, we only support scanning in ascending order.", - "oneOf": [ - { - "description": "sort in increasing order of \"id\"", - "type": "string", - "enum": [ - "id_ascending" - ] - } - ] - }, - "SystemMetricName": { - "type": "string", - "enum": [ - "virtual_disk_space_provisioned", - "cpus_provisioned", - "ram_provisioned" - ] - }, - "PaginationOrder": { - "description": "The order in which the client wants to page through the requested collection", - "type": "string", - "enum": [ - "ascending", - "descending" - ] - }, - "VersionSortMode": { - "description": "Supported sort modes when scanning by semantic version", - "oneOf": [ - { - "description": "Sort in increasing semantic version order (oldest first)", - "type": "string", - "enum": [ - "version_ascending" - ] - }, - { - "description": "Sort in decreasing semantic version order (newest first)", - "type": "string", - "enum": [ - "version_descending" - ] - } - ] - }, - "NameSortMode": { - "description": "Supported set of sort modes for scanning by name only\n\nCurrently, we only support scanning in ascending order.", - "oneOf": [ - { - "description": "sort in increasing order of \"name\"", - "type": "string", - "enum": [ - "name_ascending" - ] - } - ] - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - }, - "tags": [ - { - "name": "affinity", - "description": "Anti-affinity groups give control over instance placement.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/affinity" - } - }, - { - "name": "console-auth", - "description": "API for console authentication", - "externalDocs": { - "url": "http://docs.oxide.computer/api/console-auth" - } - }, - { - "name": "current-user", - "description": "Information pertaining to the current user.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/current-user" - } - }, - { - "name": "disks", - "description": "Virtual disks are used to store instance-local data which includes the operating system.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/disks" - } - }, - { - "name": "experimental", - "description": "Experimental, unstable interfaces, primarily for use by Oxide personnel", - "externalDocs": { - "url": "http://docs.oxide.computer/api/experimental" - } - }, - { - "name": "floating-ips", - "description": "Floating IPs allow a project to allocate well-known IPs to instances.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/floating-ips" - } - }, - { - "name": "images", - "description": "Images are read-only virtual disks that may be used to boot virtual machines.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/images" - } - }, - { - "name": "instances", - "description": "Virtual machine instances are the basic unit of computation. These operations are used for provisioning, controlling, and destroying instances.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/instances" - } - }, - { - "name": "login", - "description": "Authentication endpoints", - "externalDocs": { - "url": "http://docs.oxide.computer/api/login" - } - }, - { - "name": "metrics", - "description": "Silo-scoped metrics", - "externalDocs": { - "url": "http://docs.oxide.computer/api/metrics" - } - }, - { - "name": "multicast-groups", - "description": "Multicast groups provide efficient one-to-many network communication.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/multicast-groups" - } - }, - { - "name": "policy", - "description": "System-wide IAM policy", - "externalDocs": { - "url": "http://docs.oxide.computer/api/policy" - } - }, - { - "name": "projects", - "description": "Projects are a grouping of associated resources such as instances and disks within a silo for purposes of billing and access control.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/projects" - } - }, - { - "name": "silos", - "description": "Silos represent a logical partition of users and resources.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/silos" - } - }, - { - "name": "snapshots", - "description": "Snapshots of virtual disks at a particular point in time.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/snapshots" - } - }, - { - "name": "system/alerts", - "description": "Alerts deliver notifications for events that occur on the Oxide rack", - "externalDocs": { - "url": "http://docs.oxide.computer/api/alerts" - } - }, - { - "name": "system/audit-log", - "description": "These endpoints relate to audit logs.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-audit-log" - } - }, - { - "name": "system/hardware", - "description": "These operations pertain to hardware inventory and management. Racks are the unit of expansion of an Oxide deployment. Racks are in turn composed of sleds, switches, power supplies, and a cabled backplane.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-hardware" - } - }, - { - "name": "system/ip-pools", - "description": "IP pools are collections of external IPs that can be assigned to silos. When a pool is linked to a silo, users in that silo can allocate IPs from the pool for their instances.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-ip-pools" - } - }, - { - "name": "system/metrics", - "description": "Metrics provide insight into the operation of the Oxide deployment. These include telemetry on hardware and software components that can be used to understand the current state as well as to diagnose issues.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-metrics" - } - }, - { - "name": "system/networking", - "description": "This provides rack-level network configuration.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-networking" - } - }, - { - "name": "system/probes", - "description": "Probes for testing network connectivity", - "externalDocs": { - "url": "http://docs.oxide.computer/api/probes" - } - }, - { - "name": "system/silos", - "description": "Silos represent a logical partition of users and resources.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-silos" - } - }, - { - "name": "system/status", - "description": "Endpoints related to system health", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-status" - } - }, - { - "name": "system/update", - "description": "Upload and manage system updates", - "externalDocs": { - "url": "http://docs.oxide.computer/api/system-update" - } - }, - { - "name": "tokens", - "description": "API clients use device access tokens for authentication.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/tokens" - } - }, - { - "name": "vpcs", - "description": "Virtual Private Clouds (VPCs) provide isolated network environments for managing and deploying services.", - "externalDocs": { - "url": "http://docs.oxide.computer/api/vpcs" - } - } - ] -} diff --git a/openapi/nexus/nexus-2025120300.0.0-dfe193.json.gitref b/openapi/nexus/nexus-2025120300.0.0-dfe193.json.gitref new file mode 100644 index 00000000000..9ba3d121f49 --- /dev/null +++ b/openapi/nexus/nexus-2025120300.0.0-dfe193.json.gitref @@ -0,0 +1 @@ +60f225c858b31c3f3cc4e1c75d1acc89caefc05f:openapi/nexus/nexus-2025120300.0.0-dfe193.json \ No newline at end of file diff --git a/openapi/sled-agent/sled-agent-1.0.0-2da304.json b/openapi/sled-agent/sled-agent-1.0.0-2da304.json deleted file mode 100644 index 23fcdb15b7a..00000000000 --- a/openapi/sled-agent/sled-agent-1.0.0-2da304.json +++ /dev/null @@ -1,8353 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Sled Agent API", - "description": "API for interacting with individual sleds", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "1.0.0" - }, - "paths": { - "/artifacts": { - "get": { - "operationId": "artifact_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactListResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}": { - "put": { - "operationId": "artifact_put", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactPutResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}/copy-from-depot": { - "post": { - "operationId": "artifact_copy_from_depot", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotBody" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts-config": { - "get": { - "operationId": "artifact_config_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "artifact_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/bootstore/status": { - "get": { - "summary": "Get the internal state of the local bootstore node", - "operationId": "bootstore_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BootstoreStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/chicken-switch/destroy-orphaned-datasets": { - "get": { - "summary": "This endpoint reports the status of the `destroy_orphaned_datasets`", - "description": "chicken switch. It will be removed with omicron#6177.", - "operationId": "chicken_switch_destroy_orphaned_datasets_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChickenSwitchDestroyOrphanedDatasets" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "This endpoint sets the `destroy_orphaned_datasets` chicken switch", - "description": "(allowing sled-agent to delete datasets it believes are orphaned). It will be removed with omicron#6177.", - "operationId": "chicken_switch_destroy_orphaned_datasets_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChickenSwitchDestroyOrphanedDatasets" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/disks/{disk_id}": { - "put": { - "operationId": "disk_put", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskRuntimeState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/eip-gateways": { - "put": { - "summary": "Update per-NIC IP address <-> internet gateway mappings.", - "operationId": "set_eip_gateways", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIpGatewayMap" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/inventory": { - "get": { - "summary": "Fetch basic information about this sled", - "operationId": "inventory", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Inventory" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/network-bootstore-config": { - "get": { - "summary": "This API endpoint is only reading the local sled agent's view of the", - "description": "bootstore. The boostore is a distributed data store that is eventually consistent. Reads from individual nodes may not represent the latest state.", - "operationId": "read_network_bootstore_config_cache", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "write_network_bootstore_config", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/omicron-config": { - "put": { - "operationId": "omicron_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OmicronSledConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-identifiers": { - "get": { - "summary": "Fetch sled identifiers", - "operationId": "sled_identifiers", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledIdentifiers" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-role": { - "get": { - "operationId": "sled_role_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledRole" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sleds": { - "put": { - "summary": "Add a sled to a rack that was already initialized via RSS", - "operationId": "sled_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddSledRequest" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/dladm-info": { - "get": { - "operationId": "support_dladm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/health-check": { - "get": { - "operationId": "support_health_check", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/ipadm-info": { - "get": { - "operationId": "support_ipadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/logs/download/{zone}": { - "get": { - "summary": "This endpoint returns a zip file of a zone's logs organized by service.", - "operationId": "support_logs_download", - "parameters": [ - { - "in": "path", - "name": "zone", - "description": "The zone for which one would like to collect logs for", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "max_rotated", - "description": "The max number of rotated logs to include in the final support bundle", - "required": true, - "schema": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support/logs/zones": { - "get": { - "summary": "This endpoint returns a list of known zones on a sled that have service", - "description": "logs that can be collected into a support bundle.", - "operationId": "support_logs", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/nvmeadm-info": { - "get": { - "operationId": "support_nvmeadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pargs-info": { - "get": { - "operationId": "support_pargs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pfiles-info": { - "get": { - "operationId": "support_pfiles_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pstack-info": { - "get": { - "operationId": "support_pstack_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zfs-info": { - "get": { - "operationId": "support_zfs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zoneadm-info": { - "get": { - "operationId": "support_zoneadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zpool-info": { - "get": { - "operationId": "support_zpool_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}": { - "get": { - "summary": "List all support bundles within a particular dataset", - "operationId": "support_bundle_list", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SupportBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}": { - "post": { - "summary": "Starts creation of a support bundle within a particular dataset", - "description": "Callers should transfer chunks of the bundle with \"support_bundle_transfer\", and then call \"support_bundle_finalize\" once the bundle has finished transferring.\n\nIf a support bundle was previously created without being finalized successfully, this endpoint will reset the state.\n\nIf a support bundle was previously created and finalized successfully, this endpoint will return metadata indicating that it already exists.", - "operationId": "support_bundle_start_creation", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a support bundle from a particular dataset", - "operationId": "support_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download": { - "get": { - "summary": "Fetch a support bundle from a particular dataset", - "operationId": "support_bundle_download", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a support bundle from a particular dataset", - "operationId": "support_bundle_head", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download/{file}": { - "get": { - "summary": "Fetch a file within a support bundle from a particular dataset", - "operationId": "support_bundle_download_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a file within a support bundle from a particular dataset", - "operationId": "support_bundle_head_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/finalize": { - "post": { - "summary": "Finalizes the creation of a support bundle", - "description": "If the requested hash matched the bundle, the bundle is created. Otherwise, an error is returned.", - "operationId": "support_bundle_finalize", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - }, - { - "in": "query", - "name": "hash", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/index": { - "get": { - "summary": "Fetch the index (list of files within a support bundle)", - "operationId": "support_bundle_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about the list of files within a support bundle", - "operationId": "support_bundle_head_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/transfer": { - "put": { - "summary": "Transfers a chunk of a support bundle within a particular dataset", - "operationId": "support_bundle_transfer", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - }, - { - "in": "query", - "name": "offset", - "required": true, - "schema": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/switch-ports": { - "post": { - "operationId": "uplink_ensure", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPorts" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v2p": { - "get": { - "summary": "List v2p mappings present on sled", - "operationId": "list_v2p", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_VirtualNetworkInterfaceHost", - "type": "array", - "items": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Create a mapping from a virtual NIC to a physical host", - "operationId": "set_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a mapping from a virtual NIC to a physical host", - "operationId": "del_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}": { - "put": { - "operationId": "vmm_register", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_unregister", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmUnregisterResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/disks/{disk_id}/snapshot": { - "post": { - "summary": "Take a snapshot of a disk that is attached to an instance", - "operationId": "vmm_issue_disk_snapshot_request", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/external-ip": { - "put": { - "operationId": "vmm_put_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_delete_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/state": { - "get": { - "operationId": "vmm_get_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "vmm_put_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc/{vpc_id}/firewall/rules": { - "put": { - "operationId": "vpc_firewall_rules_put", - "parameters": [ - { - "in": "path", - "name": "vpc_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRulesEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc-routes": { - "get": { - "summary": "Get the current versions of VPC routing rules.", - "operationId": "list_vpc_routes", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteState", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteState" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update VPC routing rules.", - "operationId": "set_vpc_routes", - "requestBody": { - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteSet", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteSet" - } - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones": { - "get": { - "summary": "List the zones that are currently managed by the sled agent.", - "operationId": "zones_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup": { - "post": { - "summary": "Trigger a zone bundle cleanup.", - "operationId": "zone_bundle_cleanup", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_CleanupCount", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/CleanupCount" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/context": { - "get": { - "summary": "Return context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContext" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContextUpdate" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/utilization": { - "get": { - "summary": "Return utilization information about all zone bundles.", - "operationId": "zone_bundle_utilization", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_BundleUtilization", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/BundleUtilization" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles": { - "get": { - "summary": "List all zone bundles that exist, even for now-deleted zones.", - "operationId": "zone_bundle_list_all", - "parameters": [ - { - "in": "query", - "name": "filter", - "description": "An optional substring used to filter zone bundles.", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}": { - "get": { - "summary": "List the zone bundles that are available for a running zone.", - "operationId": "zone_bundle_list", - "parameters": [ - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}/{bundle_id}": { - "get": { - "summary": "Fetch the binary content of a single zone bundle.", - "operationId": "zone_bundle_get", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a zone bundle.", - "operationId": "zone_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "AddSledRequest": { - "description": "A request to Add a given sled after rack initialization has occurred", - "type": "object", - "properties": { - "sled_id": { - "$ref": "#/components/schemas/BaseboardId" - }, - "start_request": { - "$ref": "#/components/schemas/StartSledAgentRequest" - } - }, - "required": [ - "sled_id", - "start_request" - ] - }, - "ArtifactConfig": { - "type": "object", - "properties": { - "artifacts": { - "type": "array", - "items": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "uniqueItems": true - }, - "generation": { - "$ref": "#/components/schemas/Generation" - } - }, - "required": [ - "artifacts", - "generation" - ] - }, - "ArtifactCopyFromDepotBody": { - "type": "object", - "properties": { - "depot_base_url": { - "type": "string" - } - }, - "required": [ - "depot_base_url" - ] - }, - "ArtifactCopyFromDepotResponse": { - "type": "object" - }, - "ArtifactListResponse": { - "type": "object", - "properties": { - "generation": { - "$ref": "#/components/schemas/Generation" - }, - "list": { - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - }, - "required": [ - "generation", - "list" - ] - }, - "ArtifactPutResponse": { - "type": "object", - "properties": { - "datasets": { - "description": "The number of valid M.2 artifact datasets we found on the sled. There is typically one of these datasets for each functional M.2.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "successful_writes": { - "description": "The number of valid writes to the M.2 artifact datasets. This should be less than or equal to the number of artifact datasets.", - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "required": [ - "datasets", - "successful_writes" - ] - }, - "Baseboard": { - "description": "Describes properties that should uniquely identify a Gimlet.", - "oneOf": [ - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "gimlet" - ] - } - }, - "required": [ - "identifier", - "model", - "revision", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "pc" - ] - } - }, - "required": [ - "identifier", - "model", - "type" - ] - } - ] - }, - "BaseboardId": { - "description": "A representation of a Baseboard ID as used in the inventory subsystem This type is essentially the same as a `Baseboard` except it doesn't have a revision or HW type (Gimlet, PC, Unknown).", - "type": "object", - "properties": { - "part_number": { - "description": "Oxide Part Number", - "type": "string" - }, - "serial_number": { - "description": "Serial number (unique for a given part number)", - "type": "string" - } - }, - "required": [ - "part_number", - "serial_number" - ] - }, - "BfdMode": { - "description": "BFD connection mode.", - "type": "string", - "enum": [ - "single_hop", - "multi_hop" - ] - }, - "BfdPeerConfig": { - "type": "object", - "properties": { - "detection_threshold": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "type": "string", - "format": "ip" - }, - "mode": { - "$ref": "#/components/schemas/BfdMode" - }, - "remote": { - "type": "string", - "format": "ip" - }, - "required_rx": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "$ref": "#/components/schemas/SwitchLocation" - } - }, - "required": [ - "detection_threshold", - "mode", - "remote", - "required_rx", - "switch" - ] - }, - "BgpConfig": { - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number for the BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "checker": { - "nullable": true, - "description": "Checker to apply to incoming messages.", - "default": null, - "type": "string" - }, - "originate": { - "description": "The set of prefixes for the BGP router to originate.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - }, - "shaper": { - "nullable": true, - "description": "Shaper to apply to outgoing messages.", - "default": null, - "type": "string" - } - }, - "required": [ - "asn", - "originate" - ] - }, - "BgpPeerConfig": { - "type": "object", - "properties": { - "addr": { - "description": "Address of the peer.", - "type": "string", - "format": "ipv4" - }, - "allowed_export": { - "description": "Define export policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "allowed_import": { - "description": "Define import policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "asn": { - "description": "The autonomous system number of the router the peer belongs to.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "communities": { - "description": "Include the provided communities in updates sent to the peer.", - "default": [], - "type": "array", - "items": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "connect_retry": { - "nullable": true, - "description": "The interval in seconds between peer connection retry attempts.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "delay_open": { - "nullable": true, - "description": "How long to delay sending open messages to a peer. In seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "enforce_first_as": { - "description": "Enforce that the first AS in paths received from this peer is the peer's AS.", - "default": false, - "type": "boolean" - }, - "hold_time": { - "nullable": true, - "description": "How long to keep a session alive without a keepalive in seconds. Defaults to 6.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "idle_hold_time": { - "nullable": true, - "description": "How long to keep a peer in idle after a state machine reset in seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "keepalive": { - "nullable": true, - "description": "The interval to send keepalive messages at.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "local_pref": { - "nullable": true, - "description": "Apply a local preference to routes received from this peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "md5_auth_key": { - "nullable": true, - "description": "Use the given key for TCP-MD5 authentication with the peer.", - "default": null, - "type": "string" - }, - "min_ttl": { - "nullable": true, - "description": "Require messages from a peer have a minimum IP time to live field.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "multi_exit_discriminator": { - "nullable": true, - "description": "Apply the provided multi-exit discriminator (MED) updates sent to the peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "port": { - "description": "Switch port the peer is reachable on.", - "type": "string" - }, - "remote_asn": { - "nullable": true, - "description": "Require that a peer has a specified ASN.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "Associate a VLAN ID with a BGP peer session.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "addr", - "asn", - "port" - ] - }, - "BlobStorageBackend": { - "description": "A storage backend for a disk whose initial contents are given explicitly by the specification.", - "type": "object", - "properties": { - "base64": { - "description": "The disk's initial contents, encoded as a base64 string.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - } - }, - "required": [ - "base64", - "readonly" - ], - "additionalProperties": false - }, - "Board": { - "description": "A VM's mainboard.", - "type": "object", - "properties": { - "chipset": { - "description": "The chipset to expose to guest software.", - "allOf": [ - { - "$ref": "#/components/schemas/Chipset" - } - ] - }, - "cpuid": { - "nullable": true, - "description": "The CPUID values to expose to the guest. If `None`, bhyve will derive default values from the host's CPUID values.", - "allOf": [ - { - "$ref": "#/components/schemas/Cpuid" - } - ] - }, - "cpus": { - "description": "The number of virtual logical processors attached to this VM.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "guest_hv_interface": { - "description": "The hypervisor platform to expose to the guest. The default is a bhyve-compatible interface with no additional features.\n\nFor compatibility with older versions of Propolis, this field is only serialized if it specifies a non-default interface.", - "allOf": [ - { - "$ref": "#/components/schemas/GuestHypervisorInterface" - } - ] - }, - "memory_mb": { - "description": "The amount of guest RAM attached to this VM.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "chipset", - "cpus", - "memory_mb" - ], - "additionalProperties": false - }, - "BootImageHeader": { - "type": "object", - "properties": { - "data_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "flags": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "image_name": { - "type": "string" - }, - "image_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "sha256": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 32, - "maxItems": 32 - }, - "target_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "data_size", - "flags", - "image_name", - "image_size", - "sha256", - "target_size" - ] - }, - "BootOrderEntry": { - "description": "An entry in the boot order stored in a [`BootSettings`] component.", - "type": "object", - "properties": { - "id": { - "description": "The ID of another component in the spec that Propolis should try to boot from.\n\nCurrently, only disk device components are supported.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - } - }, - "required": [ - "id" - ] - }, - "BootPartitionContents": { - "type": "object", - "properties": { - "boot_disk": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/M2Slot" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/M2Slot" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_a": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_b": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "boot_disk", - "slot_a", - "slot_b" - ] - }, - "BootPartitionDetails": { - "type": "object", - "properties": { - "artifact_hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "artifact_size": { - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "header": { - "$ref": "#/components/schemas/BootImageHeader" - } - }, - "required": [ - "artifact_hash", - "artifact_size", - "header" - ] - }, - "BootSettings": { - "description": "Settings supplied to the guest's firmware image that specify the order in which it should consider its options when selecting a device to try to boot from.", - "type": "object", - "properties": { - "order": { - "description": "An ordered list of components to attempt to boot from.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BootOrderEntry" - } - } - }, - "required": [ - "order" - ], - "additionalProperties": false - }, - "BootstoreStatus": { - "type": "object", - "properties": { - "accepted_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "established_connections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EstablishedConnection" - } - }, - "fsm_ledger_generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "fsm_state": { - "type": "string" - }, - "negotiating_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "network_config_ledger_generation": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "peers": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - } - }, - "required": [ - "accepted_connections", - "established_connections", - "fsm_ledger_generation", - "fsm_state", - "negotiating_connections", - "peers" - ] - }, - "BundleUtilization": { - "description": "The portion of a debug dataset used for zone bundles.", - "type": "object", - "properties": { - "bytes_available": { - "description": "The total number of bytes available for zone bundles.\n\nThis is `dataset_quota` multiplied by the context's storage limit.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes_used": { - "description": "Total bundle usage, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "dataset_quota": { - "description": "The total dataset quota, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bytes_available", - "bytes_used", - "dataset_quota" - ] - }, - "ByteCount": { - "description": "Byte count to express memory or storage capacity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "ChickenSwitchDestroyOrphanedDatasets": { - "type": "object", - "properties": { - "destroy_orphans": { - "description": "If true, sled-agent will attempt to destroy durable ZFS datasets that it believes were associated with now-expunged Omicron zones.", - "type": "boolean" - } - }, - "required": [ - "destroy_orphans" - ] - }, - "Chipset": { - "description": "A kind of virtual chipset.", - "oneOf": [ - { - "description": "An Intel 440FX-compatible chipset.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i440_fx" - ] - }, - "value": { - "$ref": "#/components/schemas/I440Fx" - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "CleanupContext": { - "description": "Context provided for the zone bundle cleanup task.", - "type": "object", - "properties": { - "period": { - "description": "The period on which automatic checks and cleanup is performed.", - "allOf": [ - { - "$ref": "#/components/schemas/CleanupPeriod" - } - ] - }, - "priority": { - "description": "The priority ordering for keeping old bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "description": "The limit on the dataset quota available for zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/StorageLimit" - } - ] - } - }, - "required": [ - "period", - "priority", - "storage_limit" - ] - }, - "CleanupContextUpdate": { - "description": "Parameters used to update the zone bundle cleanup context.", - "type": "object", - "properties": { - "period": { - "nullable": true, - "description": "The new period on which automatic cleanups are run.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "priority": { - "nullable": true, - "description": "The priority ordering for preserving old zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "nullable": true, - "description": "The new limit on the underlying dataset quota allowed for bundles.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "CleanupCount": { - "description": "The count of bundles / bytes removed during a cleanup operation.", - "type": "object", - "properties": { - "bundles": { - "description": "The number of bundles removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes": { - "description": "The number of bytes removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bundles", - "bytes" - ] - }, - "CleanupPeriod": { - "description": "A period on which bundles are automatically cleaned up.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "ComponentV0": { - "oneOf": [ - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioDisk" - }, - "type": { - "type": "string", - "enum": [ - "virtio_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/NvmeDisk" - }, - "type": { - "type": "string", - "enum": [ - "nvme_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNic" - }, - "type": { - "type": "string", - "enum": [ - "virtio_nic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SerialPort" - }, - "type": { - "type": "string", - "enum": [ - "serial_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/PciPciBridge" - }, - "type": { - "type": "string", - "enum": [ - "pci_pci_bridge" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/QemuPvpanic" - }, - "type": { - "type": "string", - "enum": [ - "qemu_pvpanic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BootSettings" - }, - "type": { - "type": "string", - "enum": [ - "boot_settings" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPciPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_pci_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuP9" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_p9" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/P9fs" - }, - "type": { - "type": "string", - "enum": [ - "p9fs" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/MigrationFailureInjector" - }, - "type": { - "type": "string", - "enum": [ - "migration_failure_injector" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/CrucibleStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "crucible_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/FileStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "file_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BlobStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "blob_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "virtio_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/DlpiNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "dlpi_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - } - ] - }, - "CompressionAlgorithm": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "on" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "off" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "gzip" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "level": { - "$ref": "#/components/schemas/GzipLevel" - }, - "type": { - "type": "string", - "enum": [ - "gzip_n" - ] - } - }, - "required": [ - "level", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lz4" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lzjb" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "zle" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "ConfigReconcilerInventory": { - "description": "Describes the last attempt made by the sled-agent-config-reconciler to reconcile the current sled config against the actual state of the sled.", - "type": "object", - "properties": { - "boot_partitions": { - "$ref": "#/components/schemas/BootPartitionContents" - }, - "datasets": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "external_disks": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "last_reconciled_config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "orphaned_datasets": { - "title": "IdOrdMap", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/OrphanedDataset" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/OrphanedDataset" - }, - "uniqueItems": true - }, - "remove_mupdate_override": { - "nullable": true, - "description": "The result of removing the mupdate override file on disk.\n\n`None` if `remove_mupdate_override` was not provided in the sled config.", - "allOf": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideInventory" - } - ] - }, - "zones": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - } - }, - "required": [ - "boot_partitions", - "datasets", - "external_disks", - "last_reconciled_config", - "orphaned_datasets", - "zones" - ] - }, - "ConfigReconcilerInventoryResult": { - "oneOf": [ - { - "type": "object", - "properties": { - "result": { - "type": "string", - "enum": [ - "ok" - ] - } - }, - "required": [ - "result" - ] - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "result": { - "type": "string", - "enum": [ - "err" - ] - } - }, - "required": [ - "message", - "result" - ] - } - ] - }, - "ConfigReconcilerInventoryStatus": { - "description": "Status of the sled-agent-config-reconciler task.", - "oneOf": [ - { - "description": "The reconciler task has not yet run for the first time since sled-agent started.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "not_yet_run" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The reconciler task is actively running.", - "type": "object", - "properties": { - "config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "running_for": { - "$ref": "#/components/schemas/Duration" - }, - "started_at": { - "type": "string", - "format": "date-time" - }, - "status": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "config", - "running_for", - "started_at", - "status" - ] - }, - { - "description": "The reconciler task is currently idle, but previously did complete a reconciliation attempt.\n\nThis variant does not include the `OmicronSledConfig` used in the last attempt, because that's always available via [`ConfigReconcilerInventory::last_reconciled_config`].", - "type": "object", - "properties": { - "completed_at": { - "type": "string", - "format": "date-time" - }, - "ran_for": { - "$ref": "#/components/schemas/Duration" - }, - "status": { - "type": "string", - "enum": [ - "idle" - ] - } - }, - "required": [ - "completed_at", - "ran_for", - "status" - ] - } - ] - }, - "Cpuid": { - "description": "A set of CPUID values to expose to a guest.", - "type": "object", - "properties": { - "entries": { - "description": "A list of CPUID leaves/subleaves and their associated values.\n\nPropolis servers require that each entry's `leaf` be unique and that it falls in either the \"standard\" (0 to 0xFFFF) or \"extended\" (0x8000_0000 to 0x8000_FFFF) function ranges, since these are the only valid input ranges currently defined by Intel and AMD. See the Intel 64 and IA-32 Architectures Software Developer's Manual (June 2024) Table 3-17 and the AMD64 Architecture Programmer's Manual (March 2024) Volume 3's documentation of the CPUID instruction.", - "type": "array", - "items": { - "$ref": "#/components/schemas/CpuidEntry" - } - }, - "vendor": { - "description": "The CPU vendor to emulate.\n\nCPUID leaves in the extended range (0x8000_0000 to 0x8000_FFFF) have vendor-defined semantics. Propolis uses this value to determine these semantics when deciding whether it needs to specialize the supplied template values for these leaves.", - "allOf": [ - { - "$ref": "#/components/schemas/CpuidVendor" - } - ] - } - }, - "required": [ - "entries", - "vendor" - ], - "additionalProperties": false - }, - "CpuidEntry": { - "description": "A full description of a CPUID leaf/subleaf and the values it produces.", - "type": "object", - "properties": { - "eax": { - "description": "The value to return in eax.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ebx": { - "description": "The value to return in ebx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ecx": { - "description": "The value to return in ecx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "edx": { - "description": "The value to return in edx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "leaf": { - "description": "The leaf (function) number for this entry.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "subleaf": { - "nullable": true, - "description": "The subleaf (index) number for this entry, if it uses subleaves.", - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "eax", - "ebx", - "ecx", - "edx", - "leaf" - ], - "additionalProperties": false - }, - "CpuidVendor": { - "description": "A CPU vendor to use when interpreting the meanings of CPUID leaves in the extended ID range (0x80000000 to 0x8000FFFF).", - "type": "string", - "enum": [ - "amd", - "intel" - ] - }, - "CrucibleStorageBackend": { - "description": "A Crucible storage backend.", - "type": "object", - "properties": { - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "request_json": { - "description": "A serialized `[crucible_client_types::VolumeConstructionRequest]`. This is stored in serialized form so that breaking changes to the definition of a `VolumeConstructionRequest` do not inadvertently break instance spec deserialization.\n\nWhen using a spec to initialize a new instance, the spec author must ensure this request is well-formed and can be deserialized by the version of `crucible_client_types` used by the target Propolis.", - "type": "string" - } - }, - "required": [ - "readonly", - "request_json" - ], - "additionalProperties": false - }, - "DatasetConfig": { - "description": "Configuration information necessary to request a single dataset.\n\nThese datasets are tracked directly by Nexus.", - "type": "object", - "properties": { - "compression": { - "description": "The compression mode to be used by the dataset", - "allOf": [ - { - "$ref": "#/components/schemas/CompressionAlgorithm" - } - ] - }, - "id": { - "description": "The UUID of the dataset being requested", - "allOf": [ - { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - ] - }, - "name": { - "description": "The dataset's name", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetName" - } - ] - }, - "quota": { - "nullable": true, - "description": "The upper bound on the amount of storage used by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "reservation": { - "nullable": true, - "description": "The lower bound on the amount of storage usable by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "compression", - "id", - "name" - ] - }, - "DatasetKind": { - "description": "The kind of dataset. See the `DatasetKind` enum in omicron-common for possible values.", - "type": "string" - }, - "DatasetName": { - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/DatasetKind" - }, - "pool_name": { - "$ref": "#/components/schemas/ZpoolName" - } - }, - "required": [ - "kind", - "pool_name" - ] - }, - "DhcpConfig": { - "description": "DHCP configuration for a port\n\nNot present here: Hostname (DHCPv4 option 12; used in DHCPv6 option 39); we use `InstanceRuntimeState::hostname` for this value.", - "type": "object", - "properties": { - "dns_servers": { - "description": "DNS servers to send to the instance\n\n(DHCPv4 option 6; DHCPv6 option 23)", - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - }, - "host_domain": { - "nullable": true, - "description": "DNS zone this instance's hostname belongs to (e.g. the `project.example` part of `instance1.project.example`)\n\n(DHCPv4 option 15; used in DHCPv6 option 39)", - "type": "string" - }, - "search_domains": { - "description": "DNS search domains\n\n(DHCPv4 option 119; DHCPv6 option 24)", - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "dns_servers", - "search_domains" - ] - }, - "DiskEnsureBody": { - "description": "Sent from to a sled agent to establish the runtime state of a Disk", - "type": "object", - "properties": { - "initial_runtime": { - "description": "Last runtime state of the Disk known to Nexus (used if the agent has never seen this Disk before).", - "allOf": [ - { - "$ref": "#/components/schemas/DiskRuntimeState" - } - ] - }, - "target": { - "description": "requested runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskStateRequested" - } - ] - } - }, - "required": [ - "initial_runtime", - "target" - ] - }, - "DiskIdentity": { - "description": "Uniquely identifies a disk.", - "type": "object", - "properties": { - "model": { - "type": "string" - }, - "serial": { - "type": "string" - }, - "vendor": { - "type": "string" - } - }, - "required": [ - "model", - "serial", - "vendor" - ] - }, - "DiskRuntimeState": { - "description": "Runtime state of the Disk, which includes its attach state and some minimal metadata", - "type": "object", - "properties": { - "disk_state": { - "description": "runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskState" - } - ] - }, - "gen": { - "description": "generation number for this state", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "time_updated": { - "description": "timestamp for this information", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "disk_state", - "gen", - "time_updated" - ] - }, - "DiskState": { - "description": "State of a Disk", - "oneOf": [ - { - "description": "Disk is being initialized", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "creating" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready but detached from any Instance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready to receive blocks from an external source", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "import_ready" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from a URL", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_url" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from bulk writes", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_bulk_writes" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being finalized to state Detached", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "finalizing" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is undergoing maintenance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "maintenance" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is being detached from the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "detaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk has been destroyed", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is unavailable", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskStateRequested": { - "description": "Used to request a Disk state change", - "oneOf": [ - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskVariant": { - "type": "string", - "enum": [ - "U2", - "M2" - ] - }, - "DlpiNetworkBackend": { - "description": "A network backend associated with a DLPI VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "Duration": { - "type": "object", - "properties": { - "nanos": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "secs": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "nanos", - "secs" - ] - }, - "EarlyNetworkConfig": { - "description": "Network configuration required to bring up the control plane\n\nThe fields in this structure are those from [`crate::rack_init::RackInitializeRequest`] necessary for use beyond RSS. This is just for the initial rack configuration and cold boot purposes. Updates come from Nexus.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/EarlyNetworkConfigBody" - }, - "generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "EarlyNetworkConfigBody": { - "description": "This is the actual configuration of EarlyNetworking.\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "ntp_servers": { - "description": "The external NTP server addresses.", - "type": "array", - "items": { - "type": "string" - } - }, - "rack_network_config": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RackNetworkConfigV2" - } - ] - } - }, - "required": [ - "ntp_servers" - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "EstablishedConnection": { - "type": "object", - "properties": { - "addr": { - "type": "string" - }, - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - } - }, - "required": [ - "addr", - "baseboard" - ] - }, - "ExternalIpGatewayMap": { - "description": "Per-NIC mappings from external IP addresses to the Internet Gateways which can choose them as a source.", - "type": "object", - "properties": { - "mappings": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - } - } - } - }, - "required": [ - "mappings" - ] - }, - "FileStorageBackend": { - "description": "A storage backend backed by a file in the host system's file system.", - "type": "object", - "properties": { - "block_size": { - "description": "Block size of the backend", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "path": { - "description": "A path to a file that backs a disk.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "workers": { - "nullable": true, - "description": "Optional worker threads for the file backend, exposed for testing only.", - "type": "integer", - "format": "uint", - "minimum": 1 - } - }, - "required": [ - "block_size", - "path", - "readonly" - ], - "additionalProperties": false - }, - "Generation": { - "description": "Generation numbers stored in the database, used for optimistic concurrency control", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "GuestHypervisorInterface": { - "description": "A hypervisor interface to expose to the guest.", - "oneOf": [ - { - "description": "Expose a bhyve-like interface (\"bhyve bhyve \" as the hypervisor ID in leaf 0x4000_0000 and no additional leaves or features).", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bhyve" - ] - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "description": "Expose a Hyper-V-compatible hypervisor interface with the supplied features enabled.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "hyper_v" - ] - }, - "value": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HyperVFeatureFlag" - }, - "uniqueItems": true - } - }, - "required": [ - "features" - ], - "additionalProperties": false - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "GzipLevel": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "HostIdentifier": { - "description": "A `HostIdentifier` represents either an IP host or network (v4 or v6), or an entire VPC (identified by its VNI). It is used in firewall rule host filters.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "HostPhase2DesiredContents": { - "description": "Describes the desired contents of a host phase 2 slot (i.e., the boot partition on one of the internal M.2 drives).", - "oneOf": [ - { - "description": "Do not change the current contents.\n\nWe use this value when we've detected a sled has been mupdated (and we don't want to overwrite phase 2 images until we understand how to recover from that mupdate) and as the default value when reading an [`OmicronSledConfig`] that was ledgered before this concept existed.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "current_contents" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Set the phase 2 slot to the given artifact.\n\nThe artifact will come from an unpacked and distributed TUF repo.", - "type": "object", - "properties": { - "hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "type": { - "type": "string", - "enum": [ - "artifact" - ] - } - }, - "required": [ - "hash", - "type" - ] - } - ] - }, - "HostPhase2DesiredSlots": { - "description": "Describes the desired contents for both host phase 2 slots.", - "type": "object", - "properties": { - "slot_a": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - }, - "slot_b": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - } - }, - "required": [ - "slot_a", - "slot_b" - ] - }, - "HostPortConfig": { - "type": "object", - "properties": { - "addrs": { - "description": "IP Address and prefix (e.g., `192.168.0.1/16`) to apply to switchport (must be in infra_ip pool). May also include an optional VLAN ID.", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "lldp": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Switchport to use for external connectivity", - "type": "string" - }, - "tx_eq": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - } - }, - "required": [ - "addrs", - "port" - ] - }, - "Hostname": { - "title": "An RFC-1035-compliant hostname", - "description": "A hostname identifies a host on a network, and is usually a dot-delimited sequence of labels, where each label contains only letters, digits, or the hyphen. See RFCs 1035 and 952 for more details.", - "type": "string", - "pattern": "^([a-zA-Z0-9]+[a-zA-Z0-9\\-]*(?. They are either Internal or External, and should be unique", - "type": "string", - "pattern": "^ox[ip]_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" - }, - "TypedUuidForPropolisKind": { - "type": "string", - "format": "uuid" - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } -} diff --git a/openapi/sled-agent/sled-agent-1.0.0-2da304.json.gitref b/openapi/sled-agent/sled-agent-1.0.0-2da304.json.gitref new file mode 100644 index 00000000000..6062fc9a97d --- /dev/null +++ b/openapi/sled-agent/sled-agent-1.0.0-2da304.json.gitref @@ -0,0 +1 @@ +a582b520e5926304437d844dd68dcb03dd1d04cf:openapi/sled-agent/sled-agent-1.0.0-2da304.json \ No newline at end of file diff --git a/openapi/sled-agent/sled-agent-10.0.0-898597.json b/openapi/sled-agent/sled-agent-10.0.0-898597.json deleted file mode 100644 index 5e2fa2aeabf..00000000000 --- a/openapi/sled-agent/sled-agent-10.0.0-898597.json +++ /dev/null @@ -1,8993 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Sled Agent API", - "description": "API for interacting with individual sleds", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "10.0.0" - }, - "paths": { - "/artifacts": { - "get": { - "operationId": "artifact_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactListResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}": { - "put": { - "operationId": "artifact_put", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactPutResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}/copy-from-depot": { - "post": { - "operationId": "artifact_copy_from_depot", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotBody" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts-config": { - "get": { - "operationId": "artifact_config_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "artifact_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/bootstore/status": { - "get": { - "summary": "Get the internal state of the local bootstore node", - "operationId": "bootstore_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BootstoreStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/debug/switch-zone-policy": { - "get": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.", - "operationId": "debug_operator_switch_zone_policy_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.\n\nSetting the switch zone policy is asynchronous and inherently racy with the standard process of starting the switch zone. If the switch zone is in the process of being started or stopped when this policy is changed, the new policy may not take effect until that transition completes.", - "operationId": "debug_operator_switch_zone_policy_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/disks/{disk_id}": { - "put": { - "operationId": "disk_put", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskRuntimeState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/eip-gateways": { - "put": { - "summary": "Update per-NIC IP address <-> internet gateway mappings.", - "operationId": "set_eip_gateways", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIpGatewayMap" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/inventory": { - "get": { - "summary": "Fetch basic information about this sled", - "operationId": "inventory", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Inventory" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/local-storage/{zpool_id}/{dataset_id}": { - "post": { - "summary": "Create a local storage dataset", - "operationId": "local_storage_dataset_ensure", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/ExternalZpoolUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LocalStorageDatasetEnsureRequest" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a local storage dataset", - "operationId": "local_storage_dataset_delete", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/ExternalZpoolUuid" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/network-bootstore-config": { - "get": { - "summary": "This API endpoint is only reading the local sled agent's view of the", - "description": "bootstore. The boostore is a distributed data store that is eventually consistent. Reads from individual nodes may not represent the latest state.", - "operationId": "read_network_bootstore_config_cache", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "write_network_bootstore_config", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/omicron-config": { - "put": { - "operationId": "omicron_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OmicronSledConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/probes": { - "put": { - "summary": "Update the entire set of probe zones on this sled.", - "description": "Probe zones are used to debug networking configuration. They look similar to instances, in that they have an OPTE port on a VPC subnet and external addresses, but no actual VM.", - "operationId": "probes_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProbeSet" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-identifiers": { - "get": { - "summary": "Fetch sled identifiers", - "operationId": "sled_identifiers", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledIdentifiers" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sleds": { - "put": { - "summary": "Add a sled to a rack that was already initialized via RSS", - "operationId": "sled_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddSledRequest" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/dladm-info": { - "get": { - "operationId": "support_dladm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/health-check": { - "get": { - "operationId": "support_health_check", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/ipadm-info": { - "get": { - "operationId": "support_ipadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/logs/download/{zone}": { - "get": { - "summary": "This endpoint returns a zip file of a zone's logs organized by service.", - "operationId": "support_logs_download", - "parameters": [ - { - "in": "path", - "name": "zone", - "description": "The zone for which one would like to collect logs for", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "max_rotated", - "description": "The max number of rotated logs to include in the final support bundle", - "required": true, - "schema": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support/logs/zones": { - "get": { - "summary": "This endpoint returns a list of known zones on a sled that have service", - "description": "logs that can be collected into a support bundle.", - "operationId": "support_logs", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/nvmeadm-info": { - "get": { - "operationId": "support_nvmeadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pargs-info": { - "get": { - "operationId": "support_pargs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pfiles-info": { - "get": { - "operationId": "support_pfiles_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pstack-info": { - "get": { - "operationId": "support_pstack_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zfs-info": { - "get": { - "operationId": "support_zfs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zoneadm-info": { - "get": { - "operationId": "support_zoneadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zpool-info": { - "get": { - "operationId": "support_zpool_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}": { - "get": { - "summary": "List all support bundles within a particular dataset", - "operationId": "support_bundle_list", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SupportBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}": { - "post": { - "summary": "Starts creation of a support bundle within a particular dataset", - "description": "Callers should transfer chunks of the bundle with \"support_bundle_transfer\", and then call \"support_bundle_finalize\" once the bundle has finished transferring.\n\nIf a support bundle was previously created without being finalized successfully, this endpoint will reset the state.\n\nIf a support bundle was previously created and finalized successfully, this endpoint will return metadata indicating that it already exists.", - "operationId": "support_bundle_start_creation", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a support bundle from a particular dataset", - "operationId": "support_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download": { - "get": { - "summary": "Fetch a support bundle from a particular dataset", - "operationId": "support_bundle_download", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a support bundle from a particular dataset", - "operationId": "support_bundle_head", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download/{file}": { - "get": { - "summary": "Fetch a file within a support bundle from a particular dataset", - "operationId": "support_bundle_download_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a file within a support bundle from a particular dataset", - "operationId": "support_bundle_head_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/finalize": { - "post": { - "summary": "Finalizes the creation of a support bundle", - "description": "If the requested hash matched the bundle, the bundle is created. Otherwise, an error is returned.", - "operationId": "support_bundle_finalize", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - }, - { - "in": "query", - "name": "hash", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/index": { - "get": { - "summary": "Fetch the index (list of files within a support bundle)", - "operationId": "support_bundle_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about the list of files within a support bundle", - "operationId": "support_bundle_head_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/transfer": { - "put": { - "summary": "Transfers a chunk of a support bundle within a particular dataset", - "operationId": "support_bundle_transfer", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - }, - { - "in": "query", - "name": "offset", - "required": true, - "schema": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/switch-ports": { - "post": { - "operationId": "uplink_ensure", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPorts" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v2p": { - "get": { - "summary": "List v2p mappings present on sled", - "operationId": "list_v2p", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_VirtualNetworkInterfaceHost", - "type": "array", - "items": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Create a mapping from a virtual NIC to a physical host", - "operationId": "set_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a mapping from a virtual NIC to a physical host", - "operationId": "del_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}": { - "put": { - "operationId": "vmm_register", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_unregister", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmUnregisterResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/disks/{disk_id}/snapshot": { - "post": { - "summary": "Take a snapshot of a disk that is attached to an instance", - "operationId": "vmm_issue_disk_snapshot_request", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/external-ip": { - "put": { - "operationId": "vmm_put_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_delete_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/multicast-group": { - "put": { - "operationId": "vmm_join_multicast_group", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceMulticastBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_leave_multicast_group", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceMulticastBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/state": { - "get": { - "operationId": "vmm_get_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "vmm_put_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc/{vpc_id}/firewall/rules": { - "put": { - "operationId": "vpc_firewall_rules_put", - "parameters": [ - { - "in": "path", - "name": "vpc_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRulesEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc-routes": { - "get": { - "summary": "Get the current versions of VPC routing rules.", - "operationId": "list_vpc_routes", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteState", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteState" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update VPC routing rules.", - "operationId": "set_vpc_routes", - "requestBody": { - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteSet", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteSet" - } - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones": { - "get": { - "summary": "List the zones that are currently managed by the sled agent.", - "operationId": "zones_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup": { - "post": { - "summary": "Trigger a zone bundle cleanup.", - "operationId": "zone_bundle_cleanup", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_CleanupCount", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/CleanupCount" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/context": { - "get": { - "summary": "Return context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContext" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContextUpdate" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/utilization": { - "get": { - "summary": "Return utilization information about all zone bundles.", - "operationId": "zone_bundle_utilization", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_BundleUtilization", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/BundleUtilization" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles": { - "get": { - "summary": "List all zone bundles that exist, even for now-deleted zones.", - "operationId": "zone_bundle_list_all", - "parameters": [ - { - "in": "query", - "name": "filter", - "description": "An optional substring used to filter zone bundles.", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}": { - "get": { - "summary": "List the zone bundles that are available for a running zone.", - "operationId": "zone_bundle_list", - "parameters": [ - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}/{bundle_id}": { - "get": { - "summary": "Fetch the binary content of a single zone bundle.", - "operationId": "zone_bundle_get", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a zone bundle.", - "operationId": "zone_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "AddSledRequest": { - "description": "A request to Add a given sled after rack initialization has occurred", - "type": "object", - "properties": { - "sled_id": { - "$ref": "#/components/schemas/BaseboardId" - }, - "start_request": { - "$ref": "#/components/schemas/StartSledAgentRequest" - } - }, - "required": [ - "sled_id", - "start_request" - ] - }, - "ArtifactConfig": { - "type": "object", - "properties": { - "artifacts": { - "type": "array", - "items": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "uniqueItems": true - }, - "generation": { - "$ref": "#/components/schemas/Generation" - } - }, - "required": [ - "artifacts", - "generation" - ] - }, - "ArtifactCopyFromDepotBody": { - "type": "object", - "properties": { - "depot_base_url": { - "type": "string" - } - }, - "required": [ - "depot_base_url" - ] - }, - "ArtifactCopyFromDepotResponse": { - "type": "object" - }, - "ArtifactListResponse": { - "type": "object", - "properties": { - "generation": { - "$ref": "#/components/schemas/Generation" - }, - "list": { - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - }, - "required": [ - "generation", - "list" - ] - }, - "ArtifactPutResponse": { - "type": "object", - "properties": { - "datasets": { - "description": "The number of valid M.2 artifact datasets we found on the sled. There is typically one of these datasets for each functional M.2.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "successful_writes": { - "description": "The number of valid writes to the M.2 artifact datasets. This should be less than or equal to the number of artifact datasets.", - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "required": [ - "datasets", - "successful_writes" - ] - }, - "Baseboard": { - "description": "Describes properties that should uniquely identify a Gimlet.", - "oneOf": [ - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "gimlet" - ] - } - }, - "required": [ - "identifier", - "model", - "revision", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "pc" - ] - } - }, - "required": [ - "identifier", - "model", - "type" - ] - } - ] - }, - "BaseboardId": { - "description": "A representation of a Baseboard ID as used in the inventory subsystem This type is essentially the same as a `Baseboard` except it doesn't have a revision or HW type (Gimlet, PC, Unknown).", - "type": "object", - "properties": { - "part_number": { - "description": "Oxide Part Number", - "type": "string" - }, - "serial_number": { - "description": "Serial number (unique for a given part number)", - "type": "string" - } - }, - "required": [ - "part_number", - "serial_number" - ] - }, - "BfdMode": { - "description": "BFD connection mode.", - "type": "string", - "enum": [ - "single_hop", - "multi_hop" - ] - }, - "BfdPeerConfig": { - "type": "object", - "properties": { - "detection_threshold": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "type": "string", - "format": "ip" - }, - "mode": { - "$ref": "#/components/schemas/BfdMode" - }, - "remote": { - "type": "string", - "format": "ip" - }, - "required_rx": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "$ref": "#/components/schemas/SwitchLocation" - } - }, - "required": [ - "detection_threshold", - "mode", - "remote", - "required_rx", - "switch" - ] - }, - "BgpConfig": { - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number for the BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "checker": { - "nullable": true, - "description": "Checker to apply to incoming messages.", - "default": null, - "type": "string" - }, - "originate": { - "description": "The set of prefixes for the BGP router to originate.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - }, - "shaper": { - "nullable": true, - "description": "Shaper to apply to outgoing messages.", - "default": null, - "type": "string" - } - }, - "required": [ - "asn", - "originate" - ] - }, - "BgpPeerConfig": { - "type": "object", - "properties": { - "addr": { - "description": "Address of the peer.", - "type": "string", - "format": "ipv4" - }, - "allowed_export": { - "description": "Define export policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "allowed_import": { - "description": "Define import policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "asn": { - "description": "The autonomous system number of the router the peer belongs to.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "communities": { - "description": "Include the provided communities in updates sent to the peer.", - "default": [], - "type": "array", - "items": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "connect_retry": { - "nullable": true, - "description": "The interval in seconds between peer connection retry attempts.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "delay_open": { - "nullable": true, - "description": "How long to delay sending open messages to a peer. In seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "enforce_first_as": { - "description": "Enforce that the first AS in paths received from this peer is the peer's AS.", - "default": false, - "type": "boolean" - }, - "hold_time": { - "nullable": true, - "description": "How long to keep a session alive without a keepalive in seconds. Defaults to 6.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "idle_hold_time": { - "nullable": true, - "description": "How long to keep a peer in idle after a state machine reset in seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "keepalive": { - "nullable": true, - "description": "The interval to send keepalive messages at.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "local_pref": { - "nullable": true, - "description": "Apply a local preference to routes received from this peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "md5_auth_key": { - "nullable": true, - "description": "Use the given key for TCP-MD5 authentication with the peer.", - "default": null, - "type": "string" - }, - "min_ttl": { - "nullable": true, - "description": "Require messages from a peer have a minimum IP time to live field.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "multi_exit_discriminator": { - "nullable": true, - "description": "Apply the provided multi-exit discriminator (MED) updates sent to the peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "port": { - "description": "Switch port the peer is reachable on.", - "type": "string" - }, - "remote_asn": { - "nullable": true, - "description": "Require that a peer has a specified ASN.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "Associate a VLAN ID with a BGP peer session.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "addr", - "asn", - "port" - ] - }, - "BlobStorageBackend": { - "description": "A storage backend for a disk whose initial contents are given explicitly by the specification.", - "type": "object", - "properties": { - "base64": { - "description": "The disk's initial contents, encoded as a base64 string.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - } - }, - "required": [ - "base64", - "readonly" - ], - "additionalProperties": false - }, - "Board": { - "description": "A VM's mainboard.", - "type": "object", - "properties": { - "chipset": { - "description": "The chipset to expose to guest software.", - "allOf": [ - { - "$ref": "#/components/schemas/Chipset" - } - ] - }, - "cpuid": { - "nullable": true, - "description": "The CPUID values to expose to the guest. If `None`, bhyve will derive default values from the host's CPUID values.", - "allOf": [ - { - "$ref": "#/components/schemas/Cpuid" - } - ] - }, - "cpus": { - "description": "The number of virtual logical processors attached to this VM.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "guest_hv_interface": { - "description": "The hypervisor platform to expose to the guest. The default is a bhyve-compatible interface with no additional features.\n\nFor compatibility with older versions of Propolis, this field is only serialized if it specifies a non-default interface.", - "allOf": [ - { - "$ref": "#/components/schemas/GuestHypervisorInterface" - } - ] - }, - "memory_mb": { - "description": "The amount of guest RAM attached to this VM.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "chipset", - "cpus", - "memory_mb" - ], - "additionalProperties": false - }, - "BootImageHeader": { - "type": "object", - "properties": { - "data_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "flags": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "image_name": { - "type": "string" - }, - "image_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "sha256": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 32, - "maxItems": 32 - }, - "target_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "data_size", - "flags", - "image_name", - "image_size", - "sha256", - "target_size" - ] - }, - "BootOrderEntry": { - "description": "An entry in the boot order stored in a [`BootSettings`] component.", - "type": "object", - "properties": { - "id": { - "description": "The ID of another component in the spec that Propolis should try to boot from.\n\nCurrently, only disk device components are supported.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - } - }, - "required": [ - "id" - ] - }, - "BootPartitionContents": { - "type": "object", - "properties": { - "boot_disk": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/M2Slot" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/M2Slot" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_a": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_b": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "boot_disk", - "slot_a", - "slot_b" - ] - }, - "BootPartitionDetails": { - "type": "object", - "properties": { - "artifact_hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "artifact_size": { - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "header": { - "$ref": "#/components/schemas/BootImageHeader" - } - }, - "required": [ - "artifact_hash", - "artifact_size", - "header" - ] - }, - "BootSettings": { - "description": "Settings supplied to the guest's firmware image that specify the order in which it should consider its options when selecting a device to try to boot from.", - "type": "object", - "properties": { - "order": { - "description": "An ordered list of components to attempt to boot from.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BootOrderEntry" - } - } - }, - "required": [ - "order" - ], - "additionalProperties": false - }, - "BootstoreStatus": { - "type": "object", - "properties": { - "accepted_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "established_connections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EstablishedConnection" - } - }, - "fsm_ledger_generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "fsm_state": { - "type": "string" - }, - "negotiating_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "network_config_ledger_generation": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "peers": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - } - }, - "required": [ - "accepted_connections", - "established_connections", - "fsm_ledger_generation", - "fsm_state", - "negotiating_connections", - "peers" - ] - }, - "BundleUtilization": { - "description": "The portion of a debug dataset used for zone bundles.", - "type": "object", - "properties": { - "bytes_available": { - "description": "The total number of bytes available for zone bundles.\n\nThis is `dataset_quota` multiplied by the context's storage limit.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes_used": { - "description": "Total bundle usage, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "dataset_quota": { - "description": "The total dataset quota, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bytes_available", - "bytes_used", - "dataset_quota" - ] - }, - "ByteCount": { - "description": "Byte count to express memory or storage capacity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "Chipset": { - "description": "A kind of virtual chipset.", - "oneOf": [ - { - "description": "An Intel 440FX-compatible chipset.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i440_fx" - ] - }, - "value": { - "$ref": "#/components/schemas/I440Fx" - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "CleanupContext": { - "description": "Context provided for the zone bundle cleanup task.", - "type": "object", - "properties": { - "period": { - "description": "The period on which automatic checks and cleanup is performed.", - "allOf": [ - { - "$ref": "#/components/schemas/CleanupPeriod" - } - ] - }, - "priority": { - "description": "The priority ordering for keeping old bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "description": "The limit on the dataset quota available for zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/StorageLimit" - } - ] - } - }, - "required": [ - "period", - "priority", - "storage_limit" - ] - }, - "CleanupContextUpdate": { - "description": "Parameters used to update the zone bundle cleanup context.", - "type": "object", - "properties": { - "period": { - "nullable": true, - "description": "The new period on which automatic cleanups are run.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "priority": { - "nullable": true, - "description": "The priority ordering for preserving old zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "nullable": true, - "description": "The new limit on the underlying dataset quota allowed for bundles.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "CleanupCount": { - "description": "The count of bundles / bytes removed during a cleanup operation.", - "type": "object", - "properties": { - "bundles": { - "description": "The number of bundles removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes": { - "description": "The number of bytes removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bundles", - "bytes" - ] - }, - "CleanupPeriod": { - "description": "A period on which bundles are automatically cleaned up.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "ComponentV0": { - "oneOf": [ - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioDisk" - }, - "type": { - "type": "string", - "enum": [ - "virtio_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/NvmeDisk" - }, - "type": { - "type": "string", - "enum": [ - "nvme_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNic" - }, - "type": { - "type": "string", - "enum": [ - "virtio_nic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SerialPort" - }, - "type": { - "type": "string", - "enum": [ - "serial_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/PciPciBridge" - }, - "type": { - "type": "string", - "enum": [ - "pci_pci_bridge" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/QemuPvpanic" - }, - "type": { - "type": "string", - "enum": [ - "qemu_pvpanic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BootSettings" - }, - "type": { - "type": "string", - "enum": [ - "boot_settings" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPciPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_pci_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuP9" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_p9" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/P9fs" - }, - "type": { - "type": "string", - "enum": [ - "p9fs" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/MigrationFailureInjector" - }, - "type": { - "type": "string", - "enum": [ - "migration_failure_injector" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/CrucibleStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "crucible_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/FileStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "file_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BlobStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "blob_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "virtio_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/DlpiNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "dlpi_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - } - ] - }, - "CompressionAlgorithm": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "on" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "off" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "gzip" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "level": { - "$ref": "#/components/schemas/GzipLevel" - }, - "type": { - "type": "string", - "enum": [ - "gzip_n" - ] - } - }, - "required": [ - "level", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lz4" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lzjb" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "zle" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "ConfigReconcilerInventory": { - "description": "Describes the last attempt made by the sled-agent-config-reconciler to reconcile the current sled config against the actual state of the sled.", - "type": "object", - "properties": { - "boot_partitions": { - "$ref": "#/components/schemas/BootPartitionContents" - }, - "datasets": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "external_disks": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "last_reconciled_config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "orphaned_datasets": { - "title": "IdOrdMap", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/OrphanedDataset" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/OrphanedDataset" - }, - "uniqueItems": true - }, - "remove_mupdate_override": { - "nullable": true, - "description": "The result of removing the mupdate override file on disk.\n\n`None` if `remove_mupdate_override` was not provided in the sled config.", - "allOf": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideInventory" - } - ] - }, - "zones": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - } - }, - "required": [ - "boot_partitions", - "datasets", - "external_disks", - "last_reconciled_config", - "orphaned_datasets", - "zones" - ] - }, - "ConfigReconcilerInventoryResult": { - "oneOf": [ - { - "type": "object", - "properties": { - "result": { - "type": "string", - "enum": [ - "ok" - ] - } - }, - "required": [ - "result" - ] - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "result": { - "type": "string", - "enum": [ - "err" - ] - } - }, - "required": [ - "message", - "result" - ] - } - ] - }, - "ConfigReconcilerInventoryStatus": { - "description": "Status of the sled-agent-config-reconciler task.", - "oneOf": [ - { - "description": "The reconciler task has not yet run for the first time since sled-agent started.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "not_yet_run" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The reconciler task is actively running.", - "type": "object", - "properties": { - "config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "running_for": { - "$ref": "#/components/schemas/Duration" - }, - "started_at": { - "type": "string", - "format": "date-time" - }, - "status": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "config", - "running_for", - "started_at", - "status" - ] - }, - { - "description": "The reconciler task is currently idle, but previously did complete a reconciliation attempt.\n\nThis variant does not include the `OmicronSledConfig` used in the last attempt, because that's always available via [`ConfigReconcilerInventory::last_reconciled_config`].", - "type": "object", - "properties": { - "completed_at": { - "type": "string", - "format": "date-time" - }, - "ran_for": { - "$ref": "#/components/schemas/Duration" - }, - "status": { - "type": "string", - "enum": [ - "idle" - ] - } - }, - "required": [ - "completed_at", - "ran_for", - "status" - ] - } - ] - }, - "Cpuid": { - "description": "A set of CPUID values to expose to a guest.", - "type": "object", - "properties": { - "entries": { - "description": "A list of CPUID leaves/subleaves and their associated values.\n\nPropolis servers require that each entry's `leaf` be unique and that it falls in either the \"standard\" (0 to 0xFFFF) or \"extended\" (0x8000_0000 to 0x8000_FFFF) function ranges, since these are the only valid input ranges currently defined by Intel and AMD. See the Intel 64 and IA-32 Architectures Software Developer's Manual (June 2024) Table 3-17 and the AMD64 Architecture Programmer's Manual (March 2024) Volume 3's documentation of the CPUID instruction.", - "type": "array", - "items": { - "$ref": "#/components/schemas/CpuidEntry" - } - }, - "vendor": { - "description": "The CPU vendor to emulate.\n\nCPUID leaves in the extended range (0x8000_0000 to 0x8000_FFFF) have vendor-defined semantics. Propolis uses this value to determine these semantics when deciding whether it needs to specialize the supplied template values for these leaves.", - "allOf": [ - { - "$ref": "#/components/schemas/CpuidVendor" - } - ] - } - }, - "required": [ - "entries", - "vendor" - ], - "additionalProperties": false - }, - "CpuidEntry": { - "description": "A full description of a CPUID leaf/subleaf and the values it produces.", - "type": "object", - "properties": { - "eax": { - "description": "The value to return in eax.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ebx": { - "description": "The value to return in ebx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ecx": { - "description": "The value to return in ecx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "edx": { - "description": "The value to return in edx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "leaf": { - "description": "The leaf (function) number for this entry.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "subleaf": { - "nullable": true, - "description": "The subleaf (index) number for this entry, if it uses subleaves.", - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "eax", - "ebx", - "ecx", - "edx", - "leaf" - ], - "additionalProperties": false - }, - "CpuidVendor": { - "description": "A CPU vendor to use when interpreting the meanings of CPUID leaves in the extended ID range (0x80000000 to 0x8000FFFF).", - "type": "string", - "enum": [ - "amd", - "intel" - ] - }, - "CrucibleStorageBackend": { - "description": "A Crucible storage backend.", - "type": "object", - "properties": { - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "request_json": { - "description": "A serialized `[crucible_client_types::VolumeConstructionRequest]`. This is stored in serialized form so that breaking changes to the definition of a `VolumeConstructionRequest` do not inadvertently break instance spec deserialization.\n\nWhen using a spec to initialize a new instance, the spec author must ensure this request is well-formed and can be deserialized by the version of `crucible_client_types` used by the target Propolis.", - "type": "string" - } - }, - "required": [ - "readonly", - "request_json" - ], - "additionalProperties": false - }, - "DatasetConfig": { - "description": "Configuration information necessary to request a single dataset.\n\nThese datasets are tracked directly by Nexus.", - "type": "object", - "properties": { - "compression": { - "description": "The compression mode to be used by the dataset", - "allOf": [ - { - "$ref": "#/components/schemas/CompressionAlgorithm" - } - ] - }, - "id": { - "description": "The UUID of the dataset being requested", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetUuid" - } - ] - }, - "name": { - "description": "The dataset's name", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetName" - } - ] - }, - "quota": { - "nullable": true, - "description": "The upper bound on the amount of storage used by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "reservation": { - "nullable": true, - "description": "The lower bound on the amount of storage usable by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "compression", - "id", - "name" - ] - }, - "DatasetKind": { - "description": "The kind of dataset. See the `DatasetKind` enum in omicron-common for possible values.", - "type": "string" - }, - "DatasetName": { - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/DatasetKind" - }, - "pool_name": { - "$ref": "#/components/schemas/ZpoolName" - } - }, - "required": [ - "kind", - "pool_name" - ] - }, - "DatasetUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::DatasetUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "DelegatedZvol": { - "description": "Delegate a ZFS volume to a zone", - "oneOf": [ - { - "description": "Delegate a slice of the local storage dataset present on this pool into the zone.", - "type": "object", - "properties": { - "dataset_id": { - "$ref": "#/components/schemas/DatasetUuid" - }, - "type": { - "type": "string", - "enum": [ - "local_storage" - ] - }, - "zpool_id": { - "$ref": "#/components/schemas/ExternalZpoolUuid" - } - }, - "required": [ - "dataset_id", - "type", - "zpool_id" - ] - } - ] - }, - "DhcpConfig": { - "description": "DHCP configuration for a port\n\nNot present here: Hostname (DHCPv4 option 12; used in DHCPv6 option 39); we use `InstanceRuntimeState::hostname` for this value.", - "type": "object", - "properties": { - "dns_servers": { - "description": "DNS servers to send to the instance\n\n(DHCPv4 option 6; DHCPv6 option 23)", - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - }, - "host_domain": { - "nullable": true, - "description": "DNS zone this instance's hostname belongs to (e.g. the `project.example` part of `instance1.project.example`)\n\n(DHCPv4 option 15; used in DHCPv6 option 39)", - "type": "string" - }, - "search_domains": { - "description": "DNS search domains\n\n(DHCPv4 option 119; DHCPv6 option 24)", - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "dns_servers", - "search_domains" - ] - }, - "DiskEnsureBody": { - "description": "Sent from to a sled agent to establish the runtime state of a Disk", - "type": "object", - "properties": { - "initial_runtime": { - "description": "Last runtime state of the Disk known to Nexus (used if the agent has never seen this Disk before).", - "allOf": [ - { - "$ref": "#/components/schemas/DiskRuntimeState" - } - ] - }, - "target": { - "description": "requested runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskStateRequested" - } - ] - } - }, - "required": [ - "initial_runtime", - "target" - ] - }, - "DiskIdentity": { - "description": "Uniquely identifies a disk.", - "type": "object", - "properties": { - "model": { - "type": "string" - }, - "serial": { - "type": "string" - }, - "vendor": { - "type": "string" - } - }, - "required": [ - "model", - "serial", - "vendor" - ] - }, - "DiskRuntimeState": { - "description": "Runtime state of the Disk, which includes its attach state and some minimal metadata", - "type": "object", - "properties": { - "disk_state": { - "description": "runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskState" - } - ] - }, - "gen": { - "description": "generation number for this state", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "time_updated": { - "description": "timestamp for this information", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "disk_state", - "gen", - "time_updated" - ] - }, - "DiskState": { - "description": "State of a Disk", - "oneOf": [ - { - "description": "Disk is being initialized", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "creating" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready but detached from any Instance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready to receive blocks from an external source", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "import_ready" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from a URL", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_url" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from bulk writes", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_bulk_writes" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being finalized to state Detached", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "finalizing" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is undergoing maintenance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "maintenance" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is being detached from the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "detaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk has been destroyed", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is unavailable", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskStateRequested": { - "description": "Used to request a Disk state change", - "oneOf": [ - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskVariant": { - "type": "string", - "enum": [ - "U2", - "M2" - ] - }, - "DlpiNetworkBackend": { - "description": "A network backend associated with a DLPI VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "Duration": { - "type": "object", - "properties": { - "nanos": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "secs": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "nanos", - "secs" - ] - }, - "EarlyNetworkConfig": { - "description": "Network configuration required to bring up the control plane\n\nThe fields in this structure are those from [`crate::rack_init::RackInitializeRequest`] necessary for use beyond RSS. This is just for the initial rack configuration and cold boot purposes. Updates come from Nexus.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/EarlyNetworkConfigBody" - }, - "generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "EarlyNetworkConfigBody": { - "description": "This is the actual configuration of EarlyNetworking.\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "ntp_servers": { - "description": "The external NTP server addresses.", - "type": "array", - "items": { - "type": "string" - } - }, - "rack_network_config": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RackNetworkConfigV2" - } - ] - } - }, - "required": [ - "ntp_servers" - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "EstablishedConnection": { - "type": "object", - "properties": { - "addr": { - "type": "string" - }, - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - } - }, - "required": [ - "addr", - "baseboard" - ] - }, - "ExternalIp": { - "description": "An external IP address used by a probe.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used by the address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external IP address.", - "type": "string", - "format": "ip" - }, - "kind": { - "description": "The kind of address this is.", - "allOf": [ - { - "$ref": "#/components/schemas/IpKind" - } - ] - }, - "last_port": { - "description": "The last port used by the address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "kind", - "last_port" - ] - }, - "ExternalIpGatewayMap": { - "description": "Per-NIC mappings from external IP addresses to the Internet Gateways which can choose them as a source.", - "type": "object", - "properties": { - "mappings": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - } - } - } - }, - "required": [ - "mappings" - ] - }, - "ExternalZpoolUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ExternalZpoolUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "FileStorageBackend": { - "description": "A storage backend backed by a file in the host system's file system.", - "type": "object", - "properties": { - "block_size": { - "description": "Block size of the backend", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "path": { - "description": "A path to a file that backs a disk.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "workers": { - "nullable": true, - "description": "Optional worker threads for the file backend, exposed for testing only.", - "type": "integer", - "format": "uint", - "minimum": 1 - } - }, - "required": [ - "block_size", - "path", - "readonly" - ], - "additionalProperties": false - }, - "Generation": { - "description": "Generation numbers stored in the database, used for optimistic concurrency control", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "GuestHypervisorInterface": { - "description": "A hypervisor interface to expose to the guest.", - "oneOf": [ - { - "description": "Expose a bhyve-like interface (\"bhyve bhyve \" as the hypervisor ID in leaf 0x4000_0000 and no additional leaves or features).", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bhyve" - ] - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "description": "Expose a Hyper-V-compatible hypervisor interface with the supplied features enabled.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "hyper_v" - ] - }, - "value": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HyperVFeatureFlag" - }, - "uniqueItems": true - } - }, - "required": [ - "features" - ], - "additionalProperties": false - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "GzipLevel": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "HostIdentifier": { - "description": "A `HostIdentifier` represents either an IP host or network (v4 or v6), or an entire VPC (identified by its VNI). It is used in firewall rule host filters.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "HostPhase2DesiredContents": { - "description": "Describes the desired contents of a host phase 2 slot (i.e., the boot partition on one of the internal M.2 drives).", - "oneOf": [ - { - "description": "Do not change the current contents.\n\nWe use this value when we've detected a sled has been mupdated (and we don't want to overwrite phase 2 images until we understand how to recover from that mupdate) and as the default value when reading an [`OmicronSledConfig`] that was ledgered before this concept existed.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "current_contents" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Set the phase 2 slot to the given artifact.\n\nThe artifact will come from an unpacked and distributed TUF repo.", - "type": "object", - "properties": { - "hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "type": { - "type": "string", - "enum": [ - "artifact" - ] - } - }, - "required": [ - "hash", - "type" - ] - } - ] - }, - "HostPhase2DesiredSlots": { - "description": "Describes the desired contents for both host phase 2 slots.", - "type": "object", - "properties": { - "slot_a": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - }, - "slot_b": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - } - }, - "required": [ - "slot_a", - "slot_b" - ] - }, - "HostPortConfig": { - "type": "object", - "properties": { - "addrs": { - "description": "IP Address and prefix (e.g., `192.168.0.1/16`) to apply to switchport (must be in infra_ip pool). May also include an optional VLAN ID.", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "lldp": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Switchport to use for external connectivity", - "type": "string" - }, - "tx_eq": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - } - }, - "required": [ - "addrs", - "port" - ] - }, - "Hostname": { - "title": "An RFC-1035-compliant hostname", - "description": "A hostname identifies a host on a network, and is usually a dot-delimited sequence of labels, where each label contains only letters, digits, or the hyphen. See RFCs 1035 and 952 for more details.", - "type": "string", - "pattern": "^([a-zA-Z0-9]+[a-zA-Z0-9\\-]*(? for background.", - "oneOf": [ - { - "description": "Start the switch zone if a switch is present.\n\nThis is the default policy.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "start_if_switch_present" - ] - } - }, - "required": [ - "policy" - ] - }, - { - "description": "Even if a switch zone is present, stop the switch zone.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "stop_despite_switch_presence" - ] - } - }, - "required": [ - "policy" - ] - } - ] - }, - "OrphanedDataset": { - "type": "object", - "properties": { - "available": { - "$ref": "#/components/schemas/ByteCount" - }, - "id": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/DatasetUuid" - } - ] - }, - "mounted": { - "type": "boolean" - }, - "name": { - "$ref": "#/components/schemas/DatasetName" - }, - "reason": { - "type": "string" - }, - "used": { - "$ref": "#/components/schemas/ByteCount" - } - }, - "required": [ - "available", - "mounted", - "name", - "reason", - "used" - ] - }, - "P9fs": { - "description": "Describes a filesystem to expose through a P9 device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "chunk_size": { - "description": "The chunk size to use in the 9P protocol. Vanilla Helios images should use 8192. Falcon Helios base images and Linux can use up to 65536.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach the guest to this P9 filesystem.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - }, - "source": { - "description": "The host source path to mount into the guest.", - "type": "string" - }, - "target": { - "description": "The 9P target filesystem tag.", - "type": "string" - } - }, - "required": [ - "chunk_size", - "pci_path", - "source", - "target" - ], - "additionalProperties": false - }, - "PciPath": { - "description": "A PCI bus/device/function tuple.", - "type": "object", - "properties": { - "bus": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "device": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "function": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "bus", - "device", - "function" - ] - }, - "PciPciBridge": { - "description": "A PCI-PCI bridge.", - "type": "object", - "properties": { - "downstream_bus": { - "description": "The logical bus number of this bridge's downstream bus. Other devices may use this bus number in their PCI paths to indicate they should be attached to this bridge's bus.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach this bridge.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "downstream_bus", - "pci_path" - ], - "additionalProperties": false - }, - "PhysicalDiskUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::PhysicalDiskUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "PortConfigV2": { - "type": "object", - "properties": { - "addresses": { - "description": "This port's addresses and optional vlan IDs", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "autoneg": { - "description": "Whether or not to set autonegotiation", - "default": false, - "type": "boolean" - }, - "bgp_peers": { - "description": "BGP peers on this port", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeerConfig" - } - }, - "lldp": { - "nullable": true, - "description": "LLDP configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Nmae of the port this config applies to.", - "type": "string" - }, - "routes": { - "description": "The set of routes associated with this port.", - "type": "array", - "items": { - "$ref": "#/components/schemas/RouteConfig" - } - }, - "switch": { - "description": "Switch the port belongs to.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - }, - "tx_eq": { - "nullable": true, - "description": "TX-EQ configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - }, - "uplink_port_fec": { - "nullable": true, - "description": "Port forward error correction type.", - "allOf": [ - { - "$ref": "#/components/schemas/PortFec" - } - ] - }, - "uplink_port_speed": { - "description": "Port speed.", - "allOf": [ - { - "$ref": "#/components/schemas/PortSpeed" - } - ] - } - }, - "required": [ - "addresses", - "bgp_peers", - "port", - "routes", - "switch", - "uplink_port_speed" - ] - }, - "PortFec": { - "description": "Switchport FEC options", - "type": "string", - "enum": [ - "firecode", - "none", - "rs" - ] - }, - "PortSpeed": { - "description": "Switchport Speed options", - "type": "string", - "enum": [ - "speed0_g", - "speed1_g", - "speed10_g", - "speed25_g", - "speed40_g", - "speed50_g", - "speed100_g", - "speed200_g", - "speed400_g" - ] - }, - "PriorityDimension": { - "description": "A dimension along with bundles can be sorted, to determine priority.", - "oneOf": [ - { - "description": "Sorting by time, with older bundles with lower priority.", - "type": "string", - "enum": [ - "time" - ] - }, - { - "description": "Sorting by the cause for creating the bundle.", - "type": "string", - "enum": [ - "cause" - ] - } - ] - }, - "PriorityOrder": { - "description": "The priority order for bundles during cleanup.\n\nBundles are sorted along the dimensions in [`PriorityDimension`], with each dimension appearing exactly once. During cleanup, lesser-priority bundles are pruned first, to maintain the dataset quota. Note that bundles are sorted by each dimension in the order in which they appear, with each dimension having higher priority than the next.", - "type": "array", - "items": { - "$ref": "#/components/schemas/PriorityDimension" - }, - "minItems": 2, - "maxItems": 2 - }, - "PrivateIpConfig": { - "description": "VPC-private IP address configuration for a network interface.", - "oneOf": [ - { - "description": "The interface has only an IPv4 configuration.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "v4" - ] - }, - "value": { - "$ref": "#/components/schemas/PrivateIpv4Config" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The interface has only an IPv6 configuration.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "v6" - ] - }, - "value": { - "$ref": "#/components/schemas/PrivateIpv6Config" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The interface is dual-stack.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dual_stack" - ] - }, - "value": { - "type": "object", - "properties": { - "v4": { - "description": "The interface's IPv4 configuration.", - "allOf": [ - { - "$ref": "#/components/schemas/PrivateIpv4Config" - } - ] - }, - "v6": { - "description": "The interface's IPv6 configuration.", - "allOf": [ - { - "$ref": "#/components/schemas/PrivateIpv6Config" - } - ] - } - }, - "required": [ - "v4", - "v6" - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "PrivateIpv4Config": { - "description": "VPC-private IPv4 configuration for a network interface.", - "type": "object", - "properties": { - "ip": { - "description": "VPC-private IP address.", - "type": "string", - "format": "ipv4" - }, - "subnet": { - "description": "The IP subnet.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv4Net" - } - ] - }, - "transit_ips": { - "description": "Additional networks on which the interface can send / receive traffic.", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - } - }, - "required": [ - "ip", - "subnet" - ] - }, - "PrivateIpv6Config": { - "description": "VPC-private IPv6 configuration for a network interface.", - "type": "object", - "properties": { - "ip": { - "description": "VPC-private IP address.", - "type": "string", - "format": "ipv6" - }, - "subnet": { - "description": "The IP subnet.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Net" - } - ] - }, - "transit_ips": { - "description": "Additional networks on which the interface can send / receive traffic.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv6Net" - } - } - }, - "required": [ - "ip", - "subnet", - "transit_ips" - ] - }, - "ProbeCreate": { - "description": "Parameters used to create a probe.", - "type": "object", - "properties": { - "external_ips": { - "description": "The external IP addresses assigned to the probe.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalIp" - } - }, - "id": { - "description": "The ID for the probe.", - "allOf": [ - { - "$ref": "#/components/schemas/ProbeUuid" - } - ] - }, - "interface": { - "description": "The probe's networking interface.", - "allOf": [ - { - "$ref": "#/components/schemas/NetworkInterface" - } - ] - } - }, - "required": [ - "external_ips", - "id", - "interface" - ] - }, - "ProbeSet": { - "description": "A set of probes that the target sled should run.", - "type": "object", - "properties": { - "probes": { - "title": "IdHashMap", - "description": "The exact set of probes to run.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ProbeCreate" - } - ], - "path": "iddqd::IdHashMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ProbeCreate" - }, - "uniqueItems": true - } - }, - "required": [ - "probes" - ] - }, - "ProbeUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ProbeUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "QemuPvpanic": { - "type": "object", - "properties": { - "enable_isa": { - "description": "Enable the QEMU PVPANIC ISA bus device (I/O port 0x505).", - "type": "boolean" - } - }, - "required": [ - "enable_isa" - ], - "additionalProperties": false - }, - "RackNetworkConfigV2": { - "description": "Initial network configuration", - "type": "object", - "properties": { - "bfd": { - "description": "BFD configuration for connecting the rack to external networks", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/BfdPeerConfig" - } - }, - "bgp": { - "description": "BGP configurations for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpConfig" - } - }, - "infra_ip_first": { - "description": "First ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "infra_ip_last": { - "description": "Last ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "ports": { - "description": "Uplinks for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/PortConfigV2" - } - }, - "rack_subnet": { - "$ref": "#/components/schemas/Ipv6Net" - } - }, - "required": [ - "bgp", - "infra_ip_first", - "infra_ip_last", - "ports", - "rack_subnet" - ] - }, - "RemoveMupdateOverrideBootSuccessInventory": { - "description": "Status of removing the mupdate override on the boot disk.", - "oneOf": [ - { - "description": "The mupdate override was successfully removed.", - "type": "string", - "enum": [ - "removed" - ] - }, - { - "description": "No mupdate override was found.\n\nThis is considered a success for idempotency reasons.", - "type": "string", - "enum": [ - "no_override" - ] - } - ] - }, - "RemoveMupdateOverrideInventory": { - "description": "Status of removing the mupdate override in the inventory.", - "type": "object", - "properties": { - "boot_disk_result": { - "description": "The result of removing the mupdate override on the boot disk.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_message": { - "description": "What happened on non-boot disks.\n\nWe aren't modeling this out in more detail, because we plan to not try and keep ledgered data in sync across both disks in the future.", - "type": "string" - } - }, - "required": [ - "boot_disk_result", - "non_boot_message" - ] - }, - "ResolvedVpcFirewallRule": { - "description": "VPC firewall rule after object name resolution has been performed by Nexus", - "type": "object", - "properties": { - "action": { - "$ref": "#/components/schemas/VpcFirewallRuleAction" - }, - "direction": { - "$ref": "#/components/schemas/VpcFirewallRuleDirection" - }, - "filter_hosts": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/HostIdentifier" - }, - "uniqueItems": true - }, - "filter_ports": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/L4PortRange" - } - }, - "filter_protocols": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleProtocol" - } - }, - "priority": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "status": { - "$ref": "#/components/schemas/VpcFirewallRuleStatus" - }, - "targets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NetworkInterface" - } - } - }, - "required": [ - "action", - "direction", - "priority", - "status", - "targets" - ] - }, - "ResolvedVpcRoute": { - "description": "A VPC route resolved into a concrete target.", - "type": "object", - "properties": { - "dest": { - "$ref": "#/components/schemas/IpNet" - }, - "target": { - "$ref": "#/components/schemas/RouterTarget" - } - }, - "required": [ - "dest", - "target" - ] - }, - "ResolvedVpcRouteSet": { - "description": "An updated set of routes for a given VPC and/or subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "routes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRoute" - }, - "uniqueItems": true - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id", - "routes" - ] - }, - "ResolvedVpcRouteState": { - "description": "Version information for routes on a given VPC subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id" - ] - }, - "RouteConfig": { - "type": "object", - "properties": { - "destination": { - "description": "The destination of the route.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "nexthop": { - "description": "The nexthop/gateway address.", - "type": "string", - "format": "ip" - }, - "rib_priority": { - "nullable": true, - "description": "The RIB priority (i.e. Admin Distance) associated with this route.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id associated with this route.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "destination", - "nexthop" - ] - }, - "RouterId": { - "description": "Identifier for a VPC and/or subnet.", - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/RouterKind" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "kind", - "vni" - ] - }, - "RouterKind": { - "description": "The scope of a set of VPC router rules.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "system" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "subnet": { - "$ref": "#/components/schemas/IpNet" - }, - "type": { - "type": "string", - "enum": [ - "custom" - ] - } - }, - "required": [ - "subnet", - "type" - ] - } - ] - }, - "RouterTarget": { - "description": "The target for a given router entry.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "drop" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "internet_gateway" - ] - }, - "value": { - "$ref": "#/components/schemas/InternetGatewayRouterTarget" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc_subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "RouterVersion": { - "description": "Information on the current parent router (and version) of a route set according to the control plane.", - "type": "object", - "properties": { - "router_id": { - "type": "string", - "format": "uuid" - }, - "version": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "router_id", - "version" - ] - }, - "SerialPort": { - "description": "A serial port device.", - "type": "object", - "properties": { - "num": { - "description": "The serial port number for this port.", - "allOf": [ - { - "$ref": "#/components/schemas/SerialPortNumber" - } - ] - } - }, - "required": [ - "num" - ], - "additionalProperties": false - }, - "SerialPortNumber": { - "description": "A serial port identifier, which determines what I/O ports a guest can use to access a port.", - "type": "string", - "enum": [ - "com1", - "com2", - "com3", - "com4" - ] - }, - "SledCpuFamily": { - "description": "Identifies the kind of CPU present on a sled, determined by reading CPUID.\n\nThis is intended to broadly support the control plane answering the question \"can I run this instance on that sled?\" given an instance with either no or some CPU platform requirement. It is not enough information for more precise placement questions - for example, is a CPU a high-frequency part or many-core part? We don't include Genoa here, but in that CPU family there are high frequency parts, many-core parts, and large-cache parts. To support those questions (or satisfactorily answer #8730) we would need to collect additional information and send it along.", - "oneOf": [ - { - "description": "The CPU vendor or its family number don't correspond to any of the known family variants.", - "type": "string", - "enum": [ - "unknown" - ] - }, - { - "description": "AMD Milan processors (or very close). Could be an actual Milan in a Gimlet, a close-to-Milan client Zen 3 part, or Zen 4 (for which Milan is the greatest common denominator).", - "type": "string", - "enum": [ - "amd_milan" - ] - }, - { - "description": "AMD Turin processors (or very close). Could be an actual Turin in a Cosmo, or a close-to-Turin client Zen 5 part.", - "type": "string", - "enum": [ - "amd_turin" - ] - }, - { - "description": "AMD Turin Dense processors. There are no \"Turin Dense-like\" CPUs unlike other cases, so this means a bona fide Zen 5c Turin Dense part.", - "type": "string", - "enum": [ - "amd_turin_dense" - ] - } - ] - }, - "SledDiagnosticsQueryOutput": { - "oneOf": [ - { - "type": "object", - "properties": { - "success": { - "type": "object", - "properties": { - "command": { - "description": "The command and its arguments.", - "type": "string" - }, - "exit_code": { - "nullable": true, - "description": "The exit code if one was present when the command exited.", - "type": "integer", - "format": "int32" - }, - "exit_status": { - "description": "The exit status of the command. This will be the exit code (if any) and exit reason such as from a signal.", - "type": "string" - }, - "stdio": { - "description": "Any stdout/stderr produced by the command.", - "type": "string" - } - }, - "required": [ - "command", - "exit_status", - "stdio" - ] - } - }, - "required": [ - "success" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "failure": { - "type": "object", - "properties": { - "error": { - "description": "The reason the command failed to execute.", - "type": "string" - } - }, - "required": [ - "error" - ] - } - }, - "required": [ - "failure" - ], - "additionalProperties": false - } - ] - }, - "SledIdentifiers": { - "description": "Identifiers for a single sled.\n\nThis is intended primarily to be used in timeseries, to identify sled from which metric data originates.", - "type": "object", - "properties": { - "model": { - "description": "Model name of the sled", - "type": "string" - }, - "rack_id": { - "description": "Control plane ID of the rack this sled is a member of", - "type": "string", - "format": "uuid" - }, - "revision": { - "description": "Revision number of the sled", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "serial": { - "description": "Serial number of the sled", - "type": "string" - }, - "sled_id": { - "description": "Control plane ID for the sled itself", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "model", - "rack_id", - "revision", - "serial", - "sled_id" - ] - }, - "SledRole": { - "description": "Describes the role of the sled within the rack.\n\nNote that this may change if the sled is physically moved within the rack.", - "oneOf": [ - { - "description": "The sled is a general compute sled.", - "type": "string", - "enum": [ - "gimlet" - ] - }, - { - "description": "The sled is attached to the network switch, and has additional responsibilities.", - "type": "string", - "enum": [ - "scrimlet" - ] - } - ] - }, - "SledUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::SledUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "SledVmmState": { - "description": "A wrapper type containing a sled's total knowledge of the state of a VMM.", - "type": "object", - "properties": { - "migration_in": { - "nullable": true, - "description": "The current state of any inbound migration to this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "migration_out": { - "nullable": true, - "description": "The state of any outbound migration from this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "vmm_state": { - "description": "The most recent state of the sled's VMM process.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmRuntimeState" - } - ] - } - }, - "required": [ - "vmm_state" - ] - }, - "SoftNpuP9": { - "description": "Describes a PCI device that shares host files with the guest using the P9 protocol.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPciPort": { - "description": "Describes a SoftNPU PCI device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPort": { - "description": "Describes a port in a SoftNPU emulated ASIC.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the port's associated DLPI backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "link_name": { - "description": "The data link name for this port.", - "type": "string" - } - }, - "required": [ - "backend_id", - "link_name" - ], - "additionalProperties": false - }, - "SourceNatConfig": { - "description": "An IP address and port range used for source NAT, i.e., making outbound network connections from guests or services.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used for source NAT, inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external address provided to the instance or service.", - "type": "string", - "format": "ip" - }, - "last_port": { - "description": "The last port used for source NAT, also inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "last_port" - ] - }, - "SpecKey": { - "description": "A key identifying a component in an instance spec.", - "oneOf": [ - { - "title": "uuid", - "allOf": [ - { - "type": "string", - "format": "uuid" - } - ] - }, - { - "title": "name", - "allOf": [ - { - "type": "string" - } - ] - } - ] - }, - "StartSledAgentRequest": { - "description": "Configuration information for launching a Sled Agent.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/StartSledAgentRequestBody" - }, - "generation": { - "description": "The current generation number of data as stored in CRDB.\n\nThe initial generation is set during RSS time and then only mutated by Nexus. For now, we don't actually anticipate mutating this data, but we leave open the possiblity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "StartSledAgentRequestBody": { - "description": "This is the actual app level data of `StartSledAgentRequest`\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "id": { - "description": "Uuid of the Sled Agent to be created.", - "allOf": [ - { - "$ref": "#/components/schemas/SledUuid" - } - ] - }, - "is_lrtq_learner": { - "description": "Is this node an LRTQ learner node?\n\nWe only put the node into learner mode if `use_trust_quorum` is also true.", - "type": "boolean" - }, - "rack_id": { - "description": "Uuid of the rack to which this sled agent belongs.", - "type": "string", - "format": "uuid" - }, - "subnet": { - "description": "Portion of the IP space to be managed by the Sled Agent.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Subnet" - } - ] - }, - "use_trust_quorum": { - "description": "Use trust quorum for key generation", - "type": "boolean" - } - }, - "required": [ - "id", - "is_lrtq_learner", - "rack_id", - "subnet", - "use_trust_quorum" - ] - }, - "StorageLimit": { - "description": "The limit on space allowed for zone bundles, as a percentage of the overall dataset's quota.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "SupportBundleMetadata": { - "description": "Metadata about a support bundle", - "type": "object", - "properties": { - "state": { - "$ref": "#/components/schemas/SupportBundleState" - }, - "support_bundle_id": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - "required": [ - "state", - "support_bundle_id" - ] - }, - "SupportBundleState": { - "type": "string", - "enum": [ - "complete", - "incomplete" - ] - }, - "SupportBundleUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::SupportBundleUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "SwitchLocation": { - "description": "Identifies switch physical location", - "oneOf": [ - { - "description": "Switch in upper slot", - "type": "string", - "enum": [ - "switch0" - ] - }, - { - "description": "Switch in lower slot", - "type": "string", - "enum": [ - "switch1" - ] - } - ] - }, - "SwitchPorts": { - "description": "A set of switch uplinks.", - "type": "object", - "properties": { - "uplinks": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HostPortConfig" - } - } - }, - "required": [ - "uplinks" - ] - }, - "TxEqConfig": { - "description": "Per-port tx-eq overrides. This can be used to fine-tune the transceiver equalization settings to improve signal integrity.", - "type": "object", - "properties": { - "main": { - "nullable": true, - "description": "Main tap", - "type": "integer", - "format": "int32" - }, - "post1": { - "nullable": true, - "description": "Post-cursor tap1", - "type": "integer", - "format": "int32" - }, - "post2": { - "nullable": true, - "description": "Post-cursor tap2", - "type": "integer", - "format": "int32" - }, - "pre1": { - "nullable": true, - "description": "Pre-cursor tap1", - "type": "integer", - "format": "int32" - }, - "pre2": { - "nullable": true, - "description": "Pre-cursor tap2", - "type": "integer", - "format": "int32" - } - } - }, - "UplinkAddressConfig": { - "type": "object", - "properties": { - "address": { - "$ref": "#/components/schemas/IpNet" - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id (if any) associated with this address.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "address" - ] - }, - "VirtioDisk": { - "description": "A disk that presents a virtio-block interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the disk's backend component.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "pci_path": { - "description": "The PCI bus/device/function at which this disk should be attached.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtioNetworkBackend": { - "description": "A network backend associated with a virtio-net (viona) VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the viona VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "VirtioNic": { - "description": "A network card that presents a virtio-net interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the device's backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "interface_id": { - "description": "A caller-defined correlation identifier for this interface. If Propolis is configured to collect network interface kstats in its Oximeter metrics, the metric series for this interface will be associated with this identifier.", - "type": "string", - "format": "uuid" - }, - "pci_path": { - "description": "The PCI path at which to attach this device.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "interface_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtualNetworkInterfaceHost": { - "description": "A mapping from a virtual NIC to a physical host", - "type": "object", - "properties": { - "physical_host_ip": { - "type": "string", - "format": "ipv6" - }, - "virtual_ip": { - "type": "string", - "format": "ip" - }, - "virtual_mac": { - "$ref": "#/components/schemas/MacAddr" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "physical_host_ip", - "virtual_ip", - "virtual_mac", - "vni" - ] - }, - "VmmIssueDiskSnapshotRequestBody": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmIssueDiskSnapshotRequestResponse": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmPutStateBody": { - "description": "The body of a request to move a previously-ensured instance into a specific runtime state.", - "type": "object", - "properties": { - "state": { - "description": "The state into which the instance should be driven.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmStateRequested" - } - ] - } - }, - "required": [ - "state" - ] - }, - "VmmPutStateResponse": { - "description": "The response sent from a request to move an instance into a specific runtime state.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current runtime state of the instance after handling the request to change its state. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "VmmRuntimeState": { - "description": "The dynamic runtime properties of an individual VMM process.", - "type": "object", - "properties": { - "gen": { - "description": "The generation number for this VMM's state.", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "state": { - "description": "The last state reported by this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmState" - } - ] - }, - "time_updated": { - "description": "Timestamp for the VMM's state.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "gen", - "state", - "time_updated" - ] - }, - "VmmSpec": { - "description": "Specifies the virtual hardware configuration of a new Propolis VMM in the form of a Propolis instance specification.\n\nSled-agent expects that when an instance spec is provided alongside an `InstanceSledLocalConfig` to initialize a new instance, the NIC IDs in that config's network interface list will match the IDs of the virtio network backends in the instance spec.", - "allOf": [ - { - "$ref": "#/components/schemas/InstanceSpecV0" - } - ] - }, - "VmmState": { - "description": "One of the states that a VMM can be in.", - "oneOf": [ - { - "description": "The VMM is initializing and has not started running guest CPUs yet.", - "type": "string", - "enum": [ - "starting" - ] - }, - { - "description": "The VMM has finished initializing and may be running guest CPUs.", - "type": "string", - "enum": [ - "running" - ] - }, - { - "description": "The VMM is shutting down.", - "type": "string", - "enum": [ - "stopping" - ] - }, - { - "description": "The VMM's guest has stopped, and the guest will not run again, but the VMM process may not have released all of its resources yet.", - "type": "string", - "enum": [ - "stopped" - ] - }, - { - "description": "The VMM is being restarted or its guest OS is rebooting.", - "type": "string", - "enum": [ - "rebooting" - ] - }, - { - "description": "The VMM is part of a live migration.", - "type": "string", - "enum": [ - "migrating" - ] - }, - { - "description": "The VMM process reported an internal failure.", - "type": "string", - "enum": [ - "failed" - ] - }, - { - "description": "The VMM process has been destroyed and its resources have been released.", - "type": "string", - "enum": [ - "destroyed" - ] - } - ] - }, - "VmmStateRequested": { - "description": "Requestable running state of an Instance.\n\nA subset of [`omicron_common::api::external::InstanceState`].", - "oneOf": [ - { - "description": "Run this instance by migrating in from a previous running incarnation of the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "migration_target" - ] - }, - "value": { - "$ref": "#/components/schemas/InstanceMigrationTargetParams" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Start the instance if it is not already running.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Stop the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "stopped" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Immediately reset the instance, as though it had stopped and immediately began to run again.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "reboot" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "VmmUnregisterResponse": { - "description": "The response sent from a request to unregister an instance.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current state of the instance after handling the request to unregister it. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "Vni": { - "description": "A Geneve Virtual Network Identifier", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "VpcFirewallIcmpFilter": { - "type": "object", - "properties": { - "code": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/IcmpParamRange" - } - ] - }, - "icmp_type": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "icmp_type" - ] - }, - "VpcFirewallRuleAction": { - "type": "string", - "enum": [ - "allow", - "deny" - ] - }, - "VpcFirewallRuleDirection": { - "type": "string", - "enum": [ - "inbound", - "outbound" - ] - }, - "VpcFirewallRuleProtocol": { - "description": "The protocols that may be specified in a firewall rule's filter", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "tcp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "udp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "icmp" - ] - }, - "value": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallIcmpFilter" - } - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleStatus": { - "type": "string", - "enum": [ - "disabled", - "enabled" - ] - }, - "VpcFirewallRulesEnsureBody": { - "description": "Update firewall rules for a VPC", - "type": "object", - "properties": { - "rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcFirewallRule" - } - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "rules", - "vni" - ] - }, - "ZoneArtifactInventory": { - "description": "Inventory representation of a single zone artifact on a boot disk.\n\nPart of [`ZoneManifestBootInventory`].", - "type": "object", - "properties": { - "expected_hash": { - "description": "The expected digest of the file's contents.", - "type": "string", - "format": "hex string (32 bytes)" - }, - "expected_size": { - "description": "The expected size of the file, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "file_name": { - "description": "The name of the zone file on disk, for example `nexus.tar.gz`. Zone files are always \".tar.gz\".", - "type": "string" - }, - "path": { - "description": "The full path to the zone file.", - "type": "string", - "format": "Utf8PathBuf" - }, - "status": { - "description": "The status of the artifact.\n\nThis is `Ok(())` if the artifact is present and matches the expected size and digest, or an error message if it is missing or does not match.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "type": "null" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "type": "string", - "enum": [ - null - ] - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "expected_hash", - "expected_size", - "file_name", - "path", - "status" - ] - }, - "ZoneBundleCause": { - "description": "The reason or cause for a zone bundle, i.e., why it was created.", - "oneOf": [ - { - "description": "Some other, unspecified reason.", - "type": "string", - "enum": [ - "other" - ] - }, - { - "description": "A zone bundle taken when a sled agent finds a zone that it does not expect to be running.", - "type": "string", - "enum": [ - "unexpected_zone" - ] - }, - { - "description": "An instance zone was terminated.", - "type": "string", - "enum": [ - "terminated_instance" - ] - } - ] - }, - "ZoneBundleId": { - "description": "An identifier for a zone bundle.", - "type": "object", - "properties": { - "bundle_id": { - "description": "The ID for this bundle itself.", - "type": "string", - "format": "uuid" - }, - "zone_name": { - "description": "The name of the zone this bundle is derived from.", - "type": "string" - } - }, - "required": [ - "bundle_id", - "zone_name" - ] - }, - "ZoneBundleMetadata": { - "description": "Metadata about a zone bundle.", - "type": "object", - "properties": { - "cause": { - "description": "The reason or cause a bundle was created.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleCause" - } - ] - }, - "id": { - "description": "Identifier for this zone bundle", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleId" - } - ] - }, - "time_created": { - "description": "The time at which this zone bundle was created.", - "type": "string", - "format": "date-time" - }, - "version": { - "description": "A version number for this zone bundle.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "cause", - "id", - "time_created", - "version" - ] - }, - "ZoneImageResolverInventory": { - "description": "Inventory representation of zone image resolver status and health.", - "type": "object", - "properties": { - "mupdate_override": { - "description": "The mupdate override status.", - "allOf": [ - { - "$ref": "#/components/schemas/MupdateOverrideInventory" - } - ] - }, - "zone_manifest": { - "description": "The zone manifest status.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneManifestInventory" - } - ] - } - }, - "required": [ - "mupdate_override", - "zone_manifest" - ] - }, - "ZoneManifestBootInventory": { - "description": "Inventory representation of zone artifacts on the boot disk.\n\nPart of [`ZoneManifestInventory`].", - "type": "object", - "properties": { - "artifacts": { - "title": "IdOrdMap", - "description": "The artifacts on disk.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneArtifactInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneArtifactInventory" - }, - "uniqueItems": true - }, - "source": { - "description": "The manifest source.\n\nIn production this is [`OmicronZoneManifestSource::Installinator`], but in some development and testing flows Sled Agent synthesizes zone manifests. In those cases, the source is [`OmicronZoneManifestSource::SledAgent`].", - "allOf": [ - { - "$ref": "#/components/schemas/OmicronZoneManifestSource" - } - ] - } - }, - "required": [ - "artifacts", - "source" - ] - }, - "ZoneManifestInventory": { - "description": "Inventory representation of a zone manifest.\n\nPart of [`ZoneImageResolverInventory`].\n\nA zone manifest is a listing of all the zones present in a system's install dataset. This struct contains information about the install dataset gathered from a system.", - "type": "object", - "properties": { - "boot_disk_path": { - "description": "The full path to the zone manifest file on the boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "boot_inventory": { - "description": "The manifest read from the boot disk, and whether the manifest is valid.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_status": { - "title": "IdOrdMap", - "description": "Information about the install dataset on non-boot disks.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - }, - "uniqueItems": true - } - }, - "required": [ - "boot_disk_path", - "boot_inventory", - "non_boot_status" - ] - }, - "ZoneManifestNonBootInventory": { - "description": "Inventory representation of a zone manifest on a non-boot disk.\n\nUnlike [`ZoneManifestBootInventory`] which is structured since Reconfigurator makes decisions based on it, information about non-boot disks is purely advisory. For simplicity, we store information in an unstructured format.", - "type": "object", - "properties": { - "is_valid": { - "description": "Whether the status is valid.", - "type": "boolean" - }, - "message": { - "description": "A message describing the status.\n\nIf `is_valid` is true, then the message describes the list of artifacts found and their hashes.\n\nIf `is_valid` is false, then this message describes the reason for the invalid status. This could include errors reading the zone manifest, or zone file mismatches.", - "type": "string" - }, - "path": { - "description": "The full path to the zone manifest JSON on the non-boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "zpool_id": { - "description": "The ID of the non-boot zpool.", - "allOf": [ - { - "$ref": "#/components/schemas/InternalZpoolUuid" - } - ] - } - }, - "required": [ - "is_valid", - "message", - "path", - "zpool_id" - ] - }, - "ZpoolName": { - "title": "The name of a Zpool", - "description": "Zpool names are of the format ox{i,p}_. They are either Internal or External, and should be unique", - "type": "string", - "pattern": "^ox[ip]_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" - }, - "ZpoolUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ZpoolUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "PropolisUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::PropolisUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } -} diff --git a/openapi/sled-agent/sled-agent-10.0.0-898597.json.gitref b/openapi/sled-agent/sled-agent-10.0.0-898597.json.gitref new file mode 100644 index 00000000000..2dbdef952e1 --- /dev/null +++ b/openapi/sled-agent/sled-agent-10.0.0-898597.json.gitref @@ -0,0 +1 @@ +f062472edf65eb3d66179a9d8dfb66619f458c96:openapi/sled-agent/sled-agent-10.0.0-898597.json \ No newline at end of file diff --git a/openapi/sled-agent/sled-agent-11.0.0-5f3d9f.json b/openapi/sled-agent/sled-agent-11.0.0-5f3d9f.json deleted file mode 100644 index 62813d54e05..00000000000 --- a/openapi/sled-agent/sled-agent-11.0.0-5f3d9f.json +++ /dev/null @@ -1,9177 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Sled Agent API", - "description": "API for interacting with individual sleds", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "11.0.0" - }, - "paths": { - "/artifacts": { - "get": { - "operationId": "artifact_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactListResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}": { - "put": { - "operationId": "artifact_put", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactPutResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}/copy-from-depot": { - "post": { - "operationId": "artifact_copy_from_depot", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotBody" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts-config": { - "get": { - "operationId": "artifact_config_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "artifact_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/bootstore/status": { - "get": { - "summary": "Get the internal state of the local bootstore node", - "operationId": "bootstore_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BootstoreStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/debug/switch-zone-policy": { - "get": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.", - "operationId": "debug_operator_switch_zone_policy_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.\n\nSetting the switch zone policy is asynchronous and inherently racy with the standard process of starting the switch zone. If the switch zone is in the process of being started or stopped when this policy is changed, the new policy may not take effect until that transition completes.", - "operationId": "debug_operator_switch_zone_policy_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/disks/{disk_id}": { - "put": { - "operationId": "disk_put", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskRuntimeState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/eip-gateways": { - "put": { - "summary": "Update per-NIC IP address <-> internet gateway mappings.", - "operationId": "set_eip_gateways", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIpGatewayMap" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/inventory": { - "get": { - "summary": "Fetch basic information about this sled", - "operationId": "inventory", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Inventory" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/local-storage/{zpool_id}/{dataset_id}": { - "post": { - "summary": "Create a local storage dataset", - "operationId": "local_storage_dataset_ensure", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/ExternalZpoolUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LocalStorageDatasetEnsureRequest" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a local storage dataset", - "operationId": "local_storage_dataset_delete", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/ExternalZpoolUuid" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/network-bootstore-config": { - "get": { - "summary": "This API endpoint is only reading the local sled agent's view of the", - "description": "bootstore. The boostore is a distributed data store that is eventually consistent. Reads from individual nodes may not represent the latest state.", - "operationId": "read_network_bootstore_config_cache", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "write_network_bootstore_config", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/omicron-config": { - "put": { - "operationId": "omicron_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OmicronSledConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/probes": { - "put": { - "summary": "Update the entire set of probe zones on this sled.", - "description": "Probe zones are used to debug networking configuration. They look similar to instances, in that they have an OPTE port on a VPC subnet and external addresses, but no actual VM.", - "operationId": "probes_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProbeSet" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-identifiers": { - "get": { - "summary": "Fetch sled identifiers", - "operationId": "sled_identifiers", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledIdentifiers" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sleds": { - "put": { - "summary": "Add a sled to a rack that was already initialized via RSS", - "operationId": "sled_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddSledRequest" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/dladm-info": { - "get": { - "operationId": "support_dladm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/health-check": { - "get": { - "operationId": "support_health_check", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/ipadm-info": { - "get": { - "operationId": "support_ipadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/logs/download/{zone}": { - "get": { - "summary": "This endpoint returns a zip file of a zone's logs organized by service.", - "operationId": "support_logs_download", - "parameters": [ - { - "in": "path", - "name": "zone", - "description": "The zone for which one would like to collect logs for", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "max_rotated", - "description": "The max number of rotated logs to include in the final support bundle", - "required": true, - "schema": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support/logs/zones": { - "get": { - "summary": "This endpoint returns a list of known zones on a sled that have service", - "description": "logs that can be collected into a support bundle.", - "operationId": "support_logs", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/nvmeadm-info": { - "get": { - "operationId": "support_nvmeadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pargs-info": { - "get": { - "operationId": "support_pargs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pfiles-info": { - "get": { - "operationId": "support_pfiles_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pstack-info": { - "get": { - "operationId": "support_pstack_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zfs-info": { - "get": { - "operationId": "support_zfs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zoneadm-info": { - "get": { - "operationId": "support_zoneadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zpool-info": { - "get": { - "operationId": "support_zpool_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}": { - "get": { - "summary": "List all support bundles within a particular dataset", - "operationId": "support_bundle_list", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SupportBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}": { - "post": { - "summary": "Starts creation of a support bundle within a particular dataset", - "description": "Callers should transfer chunks of the bundle with \"support_bundle_transfer\", and then call \"support_bundle_finalize\" once the bundle has finished transferring.\n\nIf a support bundle was previously created without being finalized successfully, this endpoint will reset the state.\n\nIf a support bundle was previously created and finalized successfully, this endpoint will return metadata indicating that it already exists.", - "operationId": "support_bundle_start_creation", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a support bundle from a particular dataset", - "operationId": "support_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download": { - "get": { - "summary": "Fetch a support bundle from a particular dataset", - "operationId": "support_bundle_download", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a support bundle from a particular dataset", - "operationId": "support_bundle_head", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download/{file}": { - "get": { - "summary": "Fetch a file within a support bundle from a particular dataset", - "operationId": "support_bundle_download_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a file within a support bundle from a particular dataset", - "operationId": "support_bundle_head_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/finalize": { - "post": { - "summary": "Finalizes the creation of a support bundle", - "description": "If the requested hash matched the bundle, the bundle is created. Otherwise, an error is returned.", - "operationId": "support_bundle_finalize", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - }, - { - "in": "query", - "name": "hash", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/index": { - "get": { - "summary": "Fetch the index (list of files within a support bundle)", - "operationId": "support_bundle_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about the list of files within a support bundle", - "operationId": "support_bundle_head_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/transfer": { - "put": { - "summary": "Transfers a chunk of a support bundle within a particular dataset", - "operationId": "support_bundle_transfer", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - }, - { - "in": "query", - "name": "offset", - "required": true, - "schema": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/switch-ports": { - "post": { - "operationId": "uplink_ensure", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPorts" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v2p": { - "get": { - "summary": "List v2p mappings present on sled", - "operationId": "list_v2p", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_VirtualNetworkInterfaceHost", - "type": "array", - "items": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Create a mapping from a virtual NIC to a physical host", - "operationId": "set_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a mapping from a virtual NIC to a physical host", - "operationId": "del_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}": { - "put": { - "operationId": "vmm_register", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_unregister", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmUnregisterResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/disks/{disk_id}/snapshot": { - "post": { - "summary": "Take a snapshot of a disk that is attached to an instance", - "operationId": "vmm_issue_disk_snapshot_request", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/external-ip": { - "put": { - "operationId": "vmm_put_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_delete_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/multicast-group": { - "put": { - "operationId": "vmm_join_multicast_group", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceMulticastBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_leave_multicast_group", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceMulticastBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/state": { - "get": { - "operationId": "vmm_get_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "vmm_put_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc/{vpc_id}/firewall/rules": { - "put": { - "operationId": "vpc_firewall_rules_put", - "parameters": [ - { - "in": "path", - "name": "vpc_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRulesEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc-routes": { - "get": { - "summary": "Get the current versions of VPC routing rules.", - "operationId": "list_vpc_routes", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteState", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteState" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update VPC routing rules.", - "operationId": "set_vpc_routes", - "requestBody": { - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteSet", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteSet" - } - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones": { - "get": { - "summary": "List the zones that are currently managed by the sled agent.", - "operationId": "zones_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup": { - "post": { - "summary": "Trigger a zone bundle cleanup.", - "operationId": "zone_bundle_cleanup", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_CleanupCount", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/CleanupCount" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/context": { - "get": { - "summary": "Return context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContext" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContextUpdate" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/utilization": { - "get": { - "summary": "Return utilization information about all zone bundles.", - "operationId": "zone_bundle_utilization", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_BundleUtilization", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/BundleUtilization" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles": { - "get": { - "summary": "List all zone bundles that exist, even for now-deleted zones.", - "operationId": "zone_bundle_list_all", - "parameters": [ - { - "in": "query", - "name": "filter", - "description": "An optional substring used to filter zone bundles.", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}": { - "get": { - "summary": "List the zone bundles that are available for a running zone.", - "operationId": "zone_bundle_list", - "parameters": [ - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}/{bundle_id}": { - "get": { - "summary": "Fetch the binary content of a single zone bundle.", - "operationId": "zone_bundle_get", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a zone bundle.", - "operationId": "zone_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "AddSledRequest": { - "description": "A request to Add a given sled after rack initialization has occurred", - "type": "object", - "properties": { - "sled_id": { - "$ref": "#/components/schemas/BaseboardId" - }, - "start_request": { - "$ref": "#/components/schemas/StartSledAgentRequest" - } - }, - "required": [ - "sled_id", - "start_request" - ] - }, - "ArtifactConfig": { - "type": "object", - "properties": { - "artifacts": { - "type": "array", - "items": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "uniqueItems": true - }, - "generation": { - "$ref": "#/components/schemas/Generation" - } - }, - "required": [ - "artifacts", - "generation" - ] - }, - "ArtifactCopyFromDepotBody": { - "type": "object", - "properties": { - "depot_base_url": { - "type": "string" - } - }, - "required": [ - "depot_base_url" - ] - }, - "ArtifactCopyFromDepotResponse": { - "type": "object" - }, - "ArtifactListResponse": { - "type": "object", - "properties": { - "generation": { - "$ref": "#/components/schemas/Generation" - }, - "list": { - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - }, - "required": [ - "generation", - "list" - ] - }, - "ArtifactPutResponse": { - "type": "object", - "properties": { - "datasets": { - "description": "The number of valid M.2 artifact datasets we found on the sled. There is typically one of these datasets for each functional M.2.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "successful_writes": { - "description": "The number of valid writes to the M.2 artifact datasets. This should be less than or equal to the number of artifact datasets.", - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "required": [ - "datasets", - "successful_writes" - ] - }, - "Baseboard": { - "description": "Describes properties that should uniquely identify a Gimlet.", - "oneOf": [ - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "gimlet" - ] - } - }, - "required": [ - "identifier", - "model", - "revision", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "pc" - ] - } - }, - "required": [ - "identifier", - "model", - "type" - ] - } - ] - }, - "BaseboardId": { - "description": "A representation of a Baseboard ID as used in the inventory subsystem This type is essentially the same as a `Baseboard` except it doesn't have a revision or HW type (Gimlet, PC, Unknown).", - "type": "object", - "properties": { - "part_number": { - "description": "Oxide Part Number", - "type": "string" - }, - "serial_number": { - "description": "Serial number (unique for a given part number)", - "type": "string" - } - }, - "required": [ - "part_number", - "serial_number" - ] - }, - "BfdMode": { - "description": "BFD connection mode.", - "type": "string", - "enum": [ - "single_hop", - "multi_hop" - ] - }, - "BfdPeerConfig": { - "type": "object", - "properties": { - "detection_threshold": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "type": "string", - "format": "ip" - }, - "mode": { - "$ref": "#/components/schemas/BfdMode" - }, - "remote": { - "type": "string", - "format": "ip" - }, - "required_rx": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "$ref": "#/components/schemas/SwitchLocation" - } - }, - "required": [ - "detection_threshold", - "mode", - "remote", - "required_rx", - "switch" - ] - }, - "BgpConfig": { - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number for the BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "checker": { - "nullable": true, - "description": "Checker to apply to incoming messages.", - "default": null, - "type": "string" - }, - "originate": { - "description": "The set of prefixes for the BGP router to originate.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - }, - "shaper": { - "nullable": true, - "description": "Shaper to apply to outgoing messages.", - "default": null, - "type": "string" - } - }, - "required": [ - "asn", - "originate" - ] - }, - "BgpPeerConfig": { - "type": "object", - "properties": { - "addr": { - "description": "Address of the peer.", - "type": "string", - "format": "ipv4" - }, - "allowed_export": { - "description": "Define export policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "allowed_import": { - "description": "Define import policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "asn": { - "description": "The autonomous system number of the router the peer belongs to.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "communities": { - "description": "Include the provided communities in updates sent to the peer.", - "default": [], - "type": "array", - "items": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "connect_retry": { - "nullable": true, - "description": "The interval in seconds between peer connection retry attempts.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "delay_open": { - "nullable": true, - "description": "How long to delay sending open messages to a peer. In seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "enforce_first_as": { - "description": "Enforce that the first AS in paths received from this peer is the peer's AS.", - "default": false, - "type": "boolean" - }, - "hold_time": { - "nullable": true, - "description": "How long to keep a session alive without a keepalive in seconds. Defaults to 6.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "idle_hold_time": { - "nullable": true, - "description": "How long to keep a peer in idle after a state machine reset in seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "keepalive": { - "nullable": true, - "description": "The interval to send keepalive messages at.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "local_pref": { - "nullable": true, - "description": "Apply a local preference to routes received from this peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "md5_auth_key": { - "nullable": true, - "description": "Use the given key for TCP-MD5 authentication with the peer.", - "default": null, - "type": "string" - }, - "min_ttl": { - "nullable": true, - "description": "Require messages from a peer have a minimum IP time to live field.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "multi_exit_discriminator": { - "nullable": true, - "description": "Apply the provided multi-exit discriminator (MED) updates sent to the peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "port": { - "description": "Switch port the peer is reachable on.", - "type": "string" - }, - "remote_asn": { - "nullable": true, - "description": "Require that a peer has a specified ASN.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "Associate a VLAN ID with a BGP peer session.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "addr", - "asn", - "port" - ] - }, - "BlobStorageBackend": { - "description": "A storage backend for a disk whose initial contents are given explicitly by the specification.", - "type": "object", - "properties": { - "base64": { - "description": "The disk's initial contents, encoded as a base64 string.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - } - }, - "required": [ - "base64", - "readonly" - ], - "additionalProperties": false - }, - "Board": { - "description": "A VM's mainboard.", - "type": "object", - "properties": { - "chipset": { - "description": "The chipset to expose to guest software.", - "allOf": [ - { - "$ref": "#/components/schemas/Chipset" - } - ] - }, - "cpuid": { - "nullable": true, - "description": "The CPUID values to expose to the guest. If `None`, bhyve will derive default values from the host's CPUID values.", - "allOf": [ - { - "$ref": "#/components/schemas/Cpuid" - } - ] - }, - "cpus": { - "description": "The number of virtual logical processors attached to this VM.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "guest_hv_interface": { - "description": "The hypervisor platform to expose to the guest. The default is a bhyve-compatible interface with no additional features.\n\nFor compatibility with older versions of Propolis, this field is only serialized if it specifies a non-default interface.", - "allOf": [ - { - "$ref": "#/components/schemas/GuestHypervisorInterface" - } - ] - }, - "memory_mb": { - "description": "The amount of guest RAM attached to this VM.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "chipset", - "cpus", - "memory_mb" - ], - "additionalProperties": false - }, - "BootImageHeader": { - "type": "object", - "properties": { - "data_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "flags": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "image_name": { - "type": "string" - }, - "image_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "sha256": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 32, - "maxItems": 32 - }, - "target_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "data_size", - "flags", - "image_name", - "image_size", - "sha256", - "target_size" - ] - }, - "BootOrderEntry": { - "description": "An entry in the boot order stored in a [`BootSettings`] component.", - "type": "object", - "properties": { - "id": { - "description": "The ID of another component in the spec that Propolis should try to boot from.\n\nCurrently, only disk device components are supported.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - } - }, - "required": [ - "id" - ] - }, - "BootPartitionContents": { - "type": "object", - "properties": { - "boot_disk": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/M2Slot" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/M2Slot" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_a": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_b": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "boot_disk", - "slot_a", - "slot_b" - ] - }, - "BootPartitionDetails": { - "type": "object", - "properties": { - "artifact_hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "artifact_size": { - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "header": { - "$ref": "#/components/schemas/BootImageHeader" - } - }, - "required": [ - "artifact_hash", - "artifact_size", - "header" - ] - }, - "BootSettings": { - "description": "Settings supplied to the guest's firmware image that specify the order in which it should consider its options when selecting a device to try to boot from.", - "type": "object", - "properties": { - "order": { - "description": "An ordered list of components to attempt to boot from.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BootOrderEntry" - } - } - }, - "required": [ - "order" - ], - "additionalProperties": false - }, - "BootstoreStatus": { - "type": "object", - "properties": { - "accepted_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "established_connections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EstablishedConnection" - } - }, - "fsm_ledger_generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "fsm_state": { - "type": "string" - }, - "negotiating_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "network_config_ledger_generation": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "peers": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - } - }, - "required": [ - "accepted_connections", - "established_connections", - "fsm_ledger_generation", - "fsm_state", - "negotiating_connections", - "peers" - ] - }, - "BundleUtilization": { - "description": "The portion of a debug dataset used for zone bundles.", - "type": "object", - "properties": { - "bytes_available": { - "description": "The total number of bytes available for zone bundles.\n\nThis is `dataset_quota` multiplied by the context's storage limit.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes_used": { - "description": "Total bundle usage, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "dataset_quota": { - "description": "The total dataset quota, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bytes_available", - "bytes_used", - "dataset_quota" - ] - }, - "ByteCount": { - "description": "Byte count to express memory or storage capacity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "Chipset": { - "description": "A kind of virtual chipset.", - "oneOf": [ - { - "description": "An Intel 440FX-compatible chipset.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i440_fx" - ] - }, - "value": { - "$ref": "#/components/schemas/I440Fx" - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "CleanupContext": { - "description": "Context provided for the zone bundle cleanup task.", - "type": "object", - "properties": { - "period": { - "description": "The period on which automatic checks and cleanup is performed.", - "allOf": [ - { - "$ref": "#/components/schemas/CleanupPeriod" - } - ] - }, - "priority": { - "description": "The priority ordering for keeping old bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "description": "The limit on the dataset quota available for zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/StorageLimit" - } - ] - } - }, - "required": [ - "period", - "priority", - "storage_limit" - ] - }, - "CleanupContextUpdate": { - "description": "Parameters used to update the zone bundle cleanup context.", - "type": "object", - "properties": { - "period": { - "nullable": true, - "description": "The new period on which automatic cleanups are run.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "priority": { - "nullable": true, - "description": "The priority ordering for preserving old zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "nullable": true, - "description": "The new limit on the underlying dataset quota allowed for bundles.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "CleanupCount": { - "description": "The count of bundles / bytes removed during a cleanup operation.", - "type": "object", - "properties": { - "bundles": { - "description": "The number of bundles removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes": { - "description": "The number of bytes removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bundles", - "bytes" - ] - }, - "CleanupPeriod": { - "description": "A period on which bundles are automatically cleaned up.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "ComponentV0": { - "oneOf": [ - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioDisk" - }, - "type": { - "type": "string", - "enum": [ - "virtio_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/NvmeDisk" - }, - "type": { - "type": "string", - "enum": [ - "nvme_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNic" - }, - "type": { - "type": "string", - "enum": [ - "virtio_nic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SerialPort" - }, - "type": { - "type": "string", - "enum": [ - "serial_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/PciPciBridge" - }, - "type": { - "type": "string", - "enum": [ - "pci_pci_bridge" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/QemuPvpanic" - }, - "type": { - "type": "string", - "enum": [ - "qemu_pvpanic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BootSettings" - }, - "type": { - "type": "string", - "enum": [ - "boot_settings" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPciPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_pci_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuP9" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_p9" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/P9fs" - }, - "type": { - "type": "string", - "enum": [ - "p9fs" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/MigrationFailureInjector" - }, - "type": { - "type": "string", - "enum": [ - "migration_failure_injector" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/CrucibleStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "crucible_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/FileStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "file_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BlobStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "blob_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "virtio_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/DlpiNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "dlpi_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - } - ] - }, - "CompressionAlgorithm": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "on" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "off" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "gzip" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "level": { - "$ref": "#/components/schemas/GzipLevel" - }, - "type": { - "type": "string", - "enum": [ - "gzip_n" - ] - } - }, - "required": [ - "level", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lz4" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lzjb" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "zle" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "ConfigReconcilerInventory": { - "description": "Describes the last attempt made by the sled-agent-config-reconciler to reconcile the current sled config against the actual state of the sled.", - "type": "object", - "properties": { - "boot_partitions": { - "$ref": "#/components/schemas/BootPartitionContents" - }, - "datasets": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "external_disks": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "last_reconciled_config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "orphaned_datasets": { - "title": "IdOrdMap", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/OrphanedDataset" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/OrphanedDataset" - }, - "uniqueItems": true - }, - "remove_mupdate_override": { - "nullable": true, - "description": "The result of removing the mupdate override file on disk.\n\n`None` if `remove_mupdate_override` was not provided in the sled config.", - "allOf": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideInventory" - } - ] - }, - "zones": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - } - }, - "required": [ - "boot_partitions", - "datasets", - "external_disks", - "last_reconciled_config", - "orphaned_datasets", - "zones" - ] - }, - "ConfigReconcilerInventoryResult": { - "oneOf": [ - { - "type": "object", - "properties": { - "result": { - "type": "string", - "enum": [ - "ok" - ] - } - }, - "required": [ - "result" - ] - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "result": { - "type": "string", - "enum": [ - "err" - ] - } - }, - "required": [ - "message", - "result" - ] - } - ] - }, - "ConfigReconcilerInventoryStatus": { - "description": "Status of the sled-agent-config-reconciler task.", - "oneOf": [ - { - "description": "The reconciler task has not yet run for the first time since sled-agent started.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "not_yet_run" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The reconciler task is actively running.", - "type": "object", - "properties": { - "config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "running_for": { - "$ref": "#/components/schemas/Duration" - }, - "started_at": { - "type": "string", - "format": "date-time" - }, - "status": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "config", - "running_for", - "started_at", - "status" - ] - }, - { - "description": "The reconciler task is currently idle, but previously did complete a reconciliation attempt.\n\nThis variant does not include the `OmicronSledConfig` used in the last attempt, because that's always available via [`ConfigReconcilerInventory::last_reconciled_config`].", - "type": "object", - "properties": { - "completed_at": { - "type": "string", - "format": "date-time" - }, - "ran_for": { - "$ref": "#/components/schemas/Duration" - }, - "status": { - "type": "string", - "enum": [ - "idle" - ] - } - }, - "required": [ - "completed_at", - "ran_for", - "status" - ] - } - ] - }, - "Cpuid": { - "description": "A set of CPUID values to expose to a guest.", - "type": "object", - "properties": { - "entries": { - "description": "A list of CPUID leaves/subleaves and their associated values.\n\nPropolis servers require that each entry's `leaf` be unique and that it falls in either the \"standard\" (0 to 0xFFFF) or \"extended\" (0x8000_0000 to 0x8000_FFFF) function ranges, since these are the only valid input ranges currently defined by Intel and AMD. See the Intel 64 and IA-32 Architectures Software Developer's Manual (June 2024) Table 3-17 and the AMD64 Architecture Programmer's Manual (March 2024) Volume 3's documentation of the CPUID instruction.", - "type": "array", - "items": { - "$ref": "#/components/schemas/CpuidEntry" - } - }, - "vendor": { - "description": "The CPU vendor to emulate.\n\nCPUID leaves in the extended range (0x8000_0000 to 0x8000_FFFF) have vendor-defined semantics. Propolis uses this value to determine these semantics when deciding whether it needs to specialize the supplied template values for these leaves.", - "allOf": [ - { - "$ref": "#/components/schemas/CpuidVendor" - } - ] - } - }, - "required": [ - "entries", - "vendor" - ], - "additionalProperties": false - }, - "CpuidEntry": { - "description": "A full description of a CPUID leaf/subleaf and the values it produces.", - "type": "object", - "properties": { - "eax": { - "description": "The value to return in eax.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ebx": { - "description": "The value to return in ebx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ecx": { - "description": "The value to return in ecx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "edx": { - "description": "The value to return in edx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "leaf": { - "description": "The leaf (function) number for this entry.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "subleaf": { - "nullable": true, - "description": "The subleaf (index) number for this entry, if it uses subleaves.", - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "eax", - "ebx", - "ecx", - "edx", - "leaf" - ], - "additionalProperties": false - }, - "CpuidVendor": { - "description": "A CPU vendor to use when interpreting the meanings of CPUID leaves in the extended ID range (0x80000000 to 0x8000FFFF).", - "type": "string", - "enum": [ - "amd", - "intel" - ] - }, - "CrucibleStorageBackend": { - "description": "A Crucible storage backend.", - "type": "object", - "properties": { - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "request_json": { - "description": "A serialized `[crucible_client_types::VolumeConstructionRequest]`. This is stored in serialized form so that breaking changes to the definition of a `VolumeConstructionRequest` do not inadvertently break instance spec deserialization.\n\nWhen using a spec to initialize a new instance, the spec author must ensure this request is well-formed and can be deserialized by the version of `crucible_client_types` used by the target Propolis.", - "type": "string" - } - }, - "required": [ - "readonly", - "request_json" - ], - "additionalProperties": false - }, - "DatasetConfig": { - "description": "Configuration information necessary to request a single dataset.\n\nThese datasets are tracked directly by Nexus.", - "type": "object", - "properties": { - "compression": { - "description": "The compression mode to be used by the dataset", - "allOf": [ - { - "$ref": "#/components/schemas/CompressionAlgorithm" - } - ] - }, - "id": { - "description": "The UUID of the dataset being requested", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetUuid" - } - ] - }, - "name": { - "description": "The dataset's name", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetName" - } - ] - }, - "quota": { - "nullable": true, - "description": "The upper bound on the amount of storage used by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "reservation": { - "nullable": true, - "description": "The lower bound on the amount of storage usable by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "compression", - "id", - "name" - ] - }, - "DatasetKind": { - "description": "The kind of dataset. See the `DatasetKind` enum in omicron-common for possible values.", - "type": "string" - }, - "DatasetName": { - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/DatasetKind" - }, - "pool_name": { - "$ref": "#/components/schemas/ZpoolName" - } - }, - "required": [ - "kind", - "pool_name" - ] - }, - "DatasetUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::DatasetUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "DelegatedZvol": { - "description": "Delegate a ZFS volume to a zone", - "oneOf": [ - { - "description": "Delegate a slice of the local storage dataset present on this pool into the zone.", - "type": "object", - "properties": { - "dataset_id": { - "$ref": "#/components/schemas/DatasetUuid" - }, - "type": { - "type": "string", - "enum": [ - "local_storage" - ] - }, - "zpool_id": { - "$ref": "#/components/schemas/ExternalZpoolUuid" - } - }, - "required": [ - "dataset_id", - "type", - "zpool_id" - ] - } - ] - }, - "DhcpConfig": { - "description": "DHCP configuration for a port\n\nNot present here: Hostname (DHCPv4 option 12; used in DHCPv6 option 39); we use `InstanceRuntimeState::hostname` for this value.", - "type": "object", - "properties": { - "dns_servers": { - "description": "DNS servers to send to the instance\n\n(DHCPv4 option 6; DHCPv6 option 23)", - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - }, - "host_domain": { - "nullable": true, - "description": "DNS zone this instance's hostname belongs to (e.g. the `project.example` part of `instance1.project.example`)\n\n(DHCPv4 option 15; used in DHCPv6 option 39)", - "type": "string" - }, - "search_domains": { - "description": "DNS search domains\n\n(DHCPv4 option 119; DHCPv6 option 24)", - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "dns_servers", - "search_domains" - ] - }, - "DiskEnsureBody": { - "description": "Sent from to a sled agent to establish the runtime state of a Disk", - "type": "object", - "properties": { - "initial_runtime": { - "description": "Last runtime state of the Disk known to Nexus (used if the agent has never seen this Disk before).", - "allOf": [ - { - "$ref": "#/components/schemas/DiskRuntimeState" - } - ] - }, - "target": { - "description": "requested runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskStateRequested" - } - ] - } - }, - "required": [ - "initial_runtime", - "target" - ] - }, - "DiskIdentity": { - "description": "Uniquely identifies a disk.", - "type": "object", - "properties": { - "model": { - "type": "string" - }, - "serial": { - "type": "string" - }, - "vendor": { - "type": "string" - } - }, - "required": [ - "model", - "serial", - "vendor" - ] - }, - "DiskRuntimeState": { - "description": "Runtime state of the Disk, which includes its attach state and some minimal metadata", - "type": "object", - "properties": { - "disk_state": { - "description": "runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskState" - } - ] - }, - "gen": { - "description": "generation number for this state", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "time_updated": { - "description": "timestamp for this information", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "disk_state", - "gen", - "time_updated" - ] - }, - "DiskState": { - "description": "State of a Disk", - "oneOf": [ - { - "description": "Disk is being initialized", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "creating" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready but detached from any Instance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready to receive blocks from an external source", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "import_ready" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from a URL", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_url" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from bulk writes", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_bulk_writes" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being finalized to state Detached", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "finalizing" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is undergoing maintenance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "maintenance" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is being detached from the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "detaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk has been destroyed", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is unavailable", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskStateRequested": { - "description": "Used to request a Disk state change", - "oneOf": [ - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskVariant": { - "type": "string", - "enum": [ - "U2", - "M2" - ] - }, - "DlpiNetworkBackend": { - "description": "A network backend associated with a DLPI VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "Duration": { - "type": "object", - "properties": { - "nanos": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "secs": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "nanos", - "secs" - ] - }, - "EarlyNetworkConfig": { - "description": "Network configuration required to bring up the control plane\n\nThe fields in this structure are those from [`crate::rack_init::RackInitializeRequest`] necessary for use beyond RSS. This is just for the initial rack configuration and cold boot purposes. Updates come from Nexus.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/EarlyNetworkConfigBody" - }, - "generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "EarlyNetworkConfigBody": { - "description": "This is the actual configuration of EarlyNetworking.\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "ntp_servers": { - "description": "The external NTP server addresses.", - "type": "array", - "items": { - "type": "string" - } - }, - "rack_network_config": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RackNetworkConfigV2" - } - ] - } - }, - "required": [ - "ntp_servers" - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "EstablishedConnection": { - "type": "object", - "properties": { - "addr": { - "type": "string" - }, - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - } - }, - "required": [ - "addr", - "baseboard" - ] - }, - "ExternalIp": { - "description": "An external IP address used by a probe.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used by the address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external IP address.", - "type": "string", - "format": "ip" - }, - "kind": { - "description": "The kind of address this is.", - "allOf": [ - { - "$ref": "#/components/schemas/IpKind" - } - ] - }, - "last_port": { - "description": "The last port used by the address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "kind", - "last_port" - ] - }, - "ExternalIpConfig": { - "description": "A single- or dual-stack external IP configuration.", - "oneOf": [ - { - "description": "Single-stack IPv4 external IP configuration.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "v4" - ] - }, - "value": { - "$ref": "#/components/schemas/ExternalIpv4Config" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Single-stack IPv6 external IP configuration.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "v6" - ] - }, - "value": { - "$ref": "#/components/schemas/ExternalIpv6Config" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Both IPv4 and IPv6 external IP configuration.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dual_stack" - ] - }, - "value": { - "type": "object", - "properties": { - "v4": { - "$ref": "#/components/schemas/ExternalIpv4Config" - }, - "v6": { - "$ref": "#/components/schemas/ExternalIpv6Config" - } - }, - "required": [ - "v4", - "v6" - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "ExternalIpGatewayMap": { - "description": "Per-NIC mappings from external IP addresses to the Internet Gateways which can choose them as a source.", - "type": "object", - "properties": { - "mappings": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - } - } - } - }, - "required": [ - "mappings" - ] - }, - "ExternalIpv4Config": { - "description": "External IP address configuration.\n\nThis encapsulates all the external addresses of a single IP version, including source NAT, Ephemeral, and Floating IPs. Note that not all of these need to be specified, but this type can only be constructed if _at least one_ of them is.", - "type": "object", - "properties": { - "ephemeral_ip": { - "nullable": true, - "description": "An Ephemeral address for in- and outbound connectivity.", - "type": "string", - "format": "ipv4" - }, - "floating_ips": { - "description": "Additional Floating IPs for in- and outbound connectivity.", - "type": "array", - "items": { - "type": "string", - "format": "ipv4" - } - }, - "source_nat": { - "nullable": true, - "description": "Source NAT configuration, for outbound-only connectivity.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceNatConfigV4" - } - ] - } - }, - "required": [ - "floating_ips" - ] - }, - "ExternalIpv6Config": { - "description": "External IP address configuration.\n\nThis encapsulates all the external addresses of a single IP version, including source NAT, Ephemeral, and Floating IPs. Note that not all of these need to be specified, but this type can only be constructed if _at least one_ of them is.", - "type": "object", - "properties": { - "ephemeral_ip": { - "nullable": true, - "description": "An Ephemeral address for in- and outbound connectivity.", - "type": "string", - "format": "ipv6" - }, - "floating_ips": { - "description": "Additional Floating IPs for in- and outbound connectivity.", - "type": "array", - "items": { - "type": "string", - "format": "ipv6" - } - }, - "source_nat": { - "nullable": true, - "description": "Source NAT configuration, for outbound-only connectivity.", - "allOf": [ - { - "$ref": "#/components/schemas/SourceNatConfigV6" - } - ] - } - }, - "required": [ - "floating_ips" - ] - }, - "ExternalZpoolUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ExternalZpoolUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "FileStorageBackend": { - "description": "A storage backend backed by a file in the host system's file system.", - "type": "object", - "properties": { - "block_size": { - "description": "Block size of the backend", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "path": { - "description": "A path to a file that backs a disk.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "workers": { - "nullable": true, - "description": "Optional worker threads for the file backend, exposed for testing only.", - "type": "integer", - "format": "uint", - "minimum": 1 - } - }, - "required": [ - "block_size", - "path", - "readonly" - ], - "additionalProperties": false - }, - "Generation": { - "description": "Generation numbers stored in the database, used for optimistic concurrency control", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "GuestHypervisorInterface": { - "description": "A hypervisor interface to expose to the guest.", - "oneOf": [ - { - "description": "Expose a bhyve-like interface (\"bhyve bhyve \" as the hypervisor ID in leaf 0x4000_0000 and no additional leaves or features).", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bhyve" - ] - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "description": "Expose a Hyper-V-compatible hypervisor interface with the supplied features enabled.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "hyper_v" - ] - }, - "value": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HyperVFeatureFlag" - }, - "uniqueItems": true - } - }, - "required": [ - "features" - ], - "additionalProperties": false - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "GzipLevel": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "HostIdentifier": { - "description": "A `HostIdentifier` represents either an IP host or network (v4 or v6), or an entire VPC (identified by its VNI). It is used in firewall rule host filters.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "HostPhase2DesiredContents": { - "description": "Describes the desired contents of a host phase 2 slot (i.e., the boot partition on one of the internal M.2 drives).", - "oneOf": [ - { - "description": "Do not change the current contents.\n\nWe use this value when we've detected a sled has been mupdated (and we don't want to overwrite phase 2 images until we understand how to recover from that mupdate) and as the default value when reading an [`OmicronSledConfig`] that was ledgered before this concept existed.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "current_contents" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Set the phase 2 slot to the given artifact.\n\nThe artifact will come from an unpacked and distributed TUF repo.", - "type": "object", - "properties": { - "hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "type": { - "type": "string", - "enum": [ - "artifact" - ] - } - }, - "required": [ - "hash", - "type" - ] - } - ] - }, - "HostPhase2DesiredSlots": { - "description": "Describes the desired contents for both host phase 2 slots.", - "type": "object", - "properties": { - "slot_a": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - }, - "slot_b": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - } - }, - "required": [ - "slot_a", - "slot_b" - ] - }, - "HostPortConfig": { - "type": "object", - "properties": { - "addrs": { - "description": "IP Address and prefix (e.g., `192.168.0.1/16`) to apply to switchport (must be in infra_ip pool). May also include an optional VLAN ID.", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "lldp": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Switchport to use for external connectivity", - "type": "string" - }, - "tx_eq": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - } - }, - "required": [ - "addrs", - "port" - ] - }, - "Hostname": { - "title": "An RFC-1035-compliant hostname", - "description": "A hostname identifies a host on a network, and is usually a dot-delimited sequence of labels, where each label contains only letters, digits, or the hyphen. See RFCs 1035 and 952 for more details.", - "type": "string", - "pattern": "^([a-zA-Z0-9]+[a-zA-Z0-9\\-]*(? for background.", - "oneOf": [ - { - "description": "Start the switch zone if a switch is present.\n\nThis is the default policy.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "start_if_switch_present" - ] - } - }, - "required": [ - "policy" - ] - }, - { - "description": "Even if a switch zone is present, stop the switch zone.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "stop_despite_switch_presence" - ] - } - }, - "required": [ - "policy" - ] - } - ] - }, - "OrphanedDataset": { - "type": "object", - "properties": { - "available": { - "$ref": "#/components/schemas/ByteCount" - }, - "id": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/DatasetUuid" - } - ] - }, - "mounted": { - "type": "boolean" - }, - "name": { - "$ref": "#/components/schemas/DatasetName" - }, - "reason": { - "type": "string" - }, - "used": { - "$ref": "#/components/schemas/ByteCount" - } - }, - "required": [ - "available", - "mounted", - "name", - "reason", - "used" - ] - }, - "P9fs": { - "description": "Describes a filesystem to expose through a P9 device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "chunk_size": { - "description": "The chunk size to use in the 9P protocol. Vanilla Helios images should use 8192. Falcon Helios base images and Linux can use up to 65536.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach the guest to this P9 filesystem.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - }, - "source": { - "description": "The host source path to mount into the guest.", - "type": "string" - }, - "target": { - "description": "The 9P target filesystem tag.", - "type": "string" - } - }, - "required": [ - "chunk_size", - "pci_path", - "source", - "target" - ], - "additionalProperties": false - }, - "PciPath": { - "description": "A PCI bus/device/function tuple.", - "type": "object", - "properties": { - "bus": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "device": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "function": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "bus", - "device", - "function" - ] - }, - "PciPciBridge": { - "description": "A PCI-PCI bridge.", - "type": "object", - "properties": { - "downstream_bus": { - "description": "The logical bus number of this bridge's downstream bus. Other devices may use this bus number in their PCI paths to indicate they should be attached to this bridge's bus.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach this bridge.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "downstream_bus", - "pci_path" - ], - "additionalProperties": false - }, - "PhysicalDiskUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::PhysicalDiskUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "PortConfigV2": { - "type": "object", - "properties": { - "addresses": { - "description": "This port's addresses and optional vlan IDs", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "autoneg": { - "description": "Whether or not to set autonegotiation", - "default": false, - "type": "boolean" - }, - "bgp_peers": { - "description": "BGP peers on this port", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeerConfig" - } - }, - "lldp": { - "nullable": true, - "description": "LLDP configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Nmae of the port this config applies to.", - "type": "string" - }, - "routes": { - "description": "The set of routes associated with this port.", - "type": "array", - "items": { - "$ref": "#/components/schemas/RouteConfig" - } - }, - "switch": { - "description": "Switch the port belongs to.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - }, - "tx_eq": { - "nullable": true, - "description": "TX-EQ configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - }, - "uplink_port_fec": { - "nullable": true, - "description": "Port forward error correction type.", - "allOf": [ - { - "$ref": "#/components/schemas/PortFec" - } - ] - }, - "uplink_port_speed": { - "description": "Port speed.", - "allOf": [ - { - "$ref": "#/components/schemas/PortSpeed" - } - ] - } - }, - "required": [ - "addresses", - "bgp_peers", - "port", - "routes", - "switch", - "uplink_port_speed" - ] - }, - "PortFec": { - "description": "Switchport FEC options", - "type": "string", - "enum": [ - "firecode", - "none", - "rs" - ] - }, - "PortSpeed": { - "description": "Switchport Speed options", - "type": "string", - "enum": [ - "speed0_g", - "speed1_g", - "speed10_g", - "speed25_g", - "speed40_g", - "speed50_g", - "speed100_g", - "speed200_g", - "speed400_g" - ] - }, - "PriorityDimension": { - "description": "A dimension along with bundles can be sorted, to determine priority.", - "oneOf": [ - { - "description": "Sorting by time, with older bundles with lower priority.", - "type": "string", - "enum": [ - "time" - ] - }, - { - "description": "Sorting by the cause for creating the bundle.", - "type": "string", - "enum": [ - "cause" - ] - } - ] - }, - "PriorityOrder": { - "description": "The priority order for bundles during cleanup.\n\nBundles are sorted along the dimensions in [`PriorityDimension`], with each dimension appearing exactly once. During cleanup, lesser-priority bundles are pruned first, to maintain the dataset quota. Note that bundles are sorted by each dimension in the order in which they appear, with each dimension having higher priority than the next.", - "type": "array", - "items": { - "$ref": "#/components/schemas/PriorityDimension" - }, - "minItems": 2, - "maxItems": 2 - }, - "PrivateIpConfig": { - "description": "VPC-private IP address configuration for a network interface.", - "oneOf": [ - { - "description": "The interface has only an IPv4 configuration.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "v4" - ] - }, - "value": { - "$ref": "#/components/schemas/PrivateIpv4Config" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The interface has only an IPv6 configuration.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "v6" - ] - }, - "value": { - "$ref": "#/components/schemas/PrivateIpv6Config" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "The interface is dual-stack.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "dual_stack" - ] - }, - "value": { - "type": "object", - "properties": { - "v4": { - "description": "The interface's IPv4 configuration.", - "allOf": [ - { - "$ref": "#/components/schemas/PrivateIpv4Config" - } - ] - }, - "v6": { - "description": "The interface's IPv6 configuration.", - "allOf": [ - { - "$ref": "#/components/schemas/PrivateIpv6Config" - } - ] - } - }, - "required": [ - "v4", - "v6" - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "PrivateIpv4Config": { - "description": "VPC-private IPv4 configuration for a network interface.", - "type": "object", - "properties": { - "ip": { - "description": "VPC-private IP address.", - "type": "string", - "format": "ipv4" - }, - "subnet": { - "description": "The IP subnet.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv4Net" - } - ] - }, - "transit_ips": { - "description": "Additional networks on which the interface can send / receive traffic.", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - } - }, - "required": [ - "ip", - "subnet" - ] - }, - "PrivateIpv6Config": { - "description": "VPC-private IPv6 configuration for a network interface.", - "type": "object", - "properties": { - "ip": { - "description": "VPC-private IP address.", - "type": "string", - "format": "ipv6" - }, - "subnet": { - "description": "The IP subnet.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Net" - } - ] - }, - "transit_ips": { - "description": "Additional networks on which the interface can send / receive traffic.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv6Net" - } - } - }, - "required": [ - "ip", - "subnet", - "transit_ips" - ] - }, - "ProbeCreate": { - "description": "Parameters used to create a probe.", - "type": "object", - "properties": { - "external_ips": { - "description": "The external IP addresses assigned to the probe.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalIp" - } - }, - "id": { - "description": "The ID for the probe.", - "allOf": [ - { - "$ref": "#/components/schemas/ProbeUuid" - } - ] - }, - "interface": { - "description": "The probe's networking interface.", - "allOf": [ - { - "$ref": "#/components/schemas/NetworkInterface" - } - ] - } - }, - "required": [ - "external_ips", - "id", - "interface" - ] - }, - "ProbeSet": { - "description": "A set of probes that the target sled should run.", - "type": "object", - "properties": { - "probes": { - "title": "IdHashMap", - "description": "The exact set of probes to run.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ProbeCreate" - } - ], - "path": "iddqd::IdHashMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ProbeCreate" - }, - "uniqueItems": true - } - }, - "required": [ - "probes" - ] - }, - "ProbeUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ProbeUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "QemuPvpanic": { - "type": "object", - "properties": { - "enable_isa": { - "description": "Enable the QEMU PVPANIC ISA bus device (I/O port 0x505).", - "type": "boolean" - } - }, - "required": [ - "enable_isa" - ], - "additionalProperties": false - }, - "RackNetworkConfigV2": { - "description": "Initial network configuration", - "type": "object", - "properties": { - "bfd": { - "description": "BFD configuration for connecting the rack to external networks", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/BfdPeerConfig" - } - }, - "bgp": { - "description": "BGP configurations for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpConfig" - } - }, - "infra_ip_first": { - "description": "First ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "infra_ip_last": { - "description": "Last ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "ports": { - "description": "Uplinks for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/PortConfigV2" - } - }, - "rack_subnet": { - "$ref": "#/components/schemas/Ipv6Net" - } - }, - "required": [ - "bgp", - "infra_ip_first", - "infra_ip_last", - "ports", - "rack_subnet" - ] - }, - "RemoveMupdateOverrideBootSuccessInventory": { - "description": "Status of removing the mupdate override on the boot disk.", - "oneOf": [ - { - "description": "The mupdate override was successfully removed.", - "type": "string", - "enum": [ - "removed" - ] - }, - { - "description": "No mupdate override was found.\n\nThis is considered a success for idempotency reasons.", - "type": "string", - "enum": [ - "no_override" - ] - } - ] - }, - "RemoveMupdateOverrideInventory": { - "description": "Status of removing the mupdate override in the inventory.", - "type": "object", - "properties": { - "boot_disk_result": { - "description": "The result of removing the mupdate override on the boot disk.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_message": { - "description": "What happened on non-boot disks.\n\nWe aren't modeling this out in more detail, because we plan to not try and keep ledgered data in sync across both disks in the future.", - "type": "string" - } - }, - "required": [ - "boot_disk_result", - "non_boot_message" - ] - }, - "ResolvedVpcFirewallRule": { - "description": "VPC firewall rule after object name resolution has been performed by Nexus", - "type": "object", - "properties": { - "action": { - "$ref": "#/components/schemas/VpcFirewallRuleAction" - }, - "direction": { - "$ref": "#/components/schemas/VpcFirewallRuleDirection" - }, - "filter_hosts": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/HostIdentifier" - }, - "uniqueItems": true - }, - "filter_ports": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/L4PortRange" - } - }, - "filter_protocols": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleProtocol" - } - }, - "priority": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "status": { - "$ref": "#/components/schemas/VpcFirewallRuleStatus" - }, - "targets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NetworkInterface" - } - } - }, - "required": [ - "action", - "direction", - "priority", - "status", - "targets" - ] - }, - "ResolvedVpcRoute": { - "description": "A VPC route resolved into a concrete target.", - "type": "object", - "properties": { - "dest": { - "$ref": "#/components/schemas/IpNet" - }, - "target": { - "$ref": "#/components/schemas/RouterTarget" - } - }, - "required": [ - "dest", - "target" - ] - }, - "ResolvedVpcRouteSet": { - "description": "An updated set of routes for a given VPC and/or subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "routes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRoute" - }, - "uniqueItems": true - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id", - "routes" - ] - }, - "ResolvedVpcRouteState": { - "description": "Version information for routes on a given VPC subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id" - ] - }, - "RouteConfig": { - "type": "object", - "properties": { - "destination": { - "description": "The destination of the route.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "nexthop": { - "description": "The nexthop/gateway address.", - "type": "string", - "format": "ip" - }, - "rib_priority": { - "nullable": true, - "description": "The RIB priority (i.e. Admin Distance) associated with this route.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id associated with this route.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "destination", - "nexthop" - ] - }, - "RouterId": { - "description": "Identifier for a VPC and/or subnet.", - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/RouterKind" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "kind", - "vni" - ] - }, - "RouterKind": { - "description": "The scope of a set of VPC router rules.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "system" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "subnet": { - "$ref": "#/components/schemas/IpNet" - }, - "type": { - "type": "string", - "enum": [ - "custom" - ] - } - }, - "required": [ - "subnet", - "type" - ] - } - ] - }, - "RouterTarget": { - "description": "The target for a given router entry.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "drop" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "internet_gateway" - ] - }, - "value": { - "$ref": "#/components/schemas/InternetGatewayRouterTarget" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc_subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "RouterVersion": { - "description": "Information on the current parent router (and version) of a route set according to the control plane.", - "type": "object", - "properties": { - "router_id": { - "type": "string", - "format": "uuid" - }, - "version": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "router_id", - "version" - ] - }, - "SerialPort": { - "description": "A serial port device.", - "type": "object", - "properties": { - "num": { - "description": "The serial port number for this port.", - "allOf": [ - { - "$ref": "#/components/schemas/SerialPortNumber" - } - ] - } - }, - "required": [ - "num" - ], - "additionalProperties": false - }, - "SerialPortNumber": { - "description": "A serial port identifier, which determines what I/O ports a guest can use to access a port.", - "type": "string", - "enum": [ - "com1", - "com2", - "com3", - "com4" - ] - }, - "SledCpuFamily": { - "description": "Identifies the kind of CPU present on a sled, determined by reading CPUID.\n\nThis is intended to broadly support the control plane answering the question \"can I run this instance on that sled?\" given an instance with either no or some CPU platform requirement. It is not enough information for more precise placement questions - for example, is a CPU a high-frequency part or many-core part? We don't include Genoa here, but in that CPU family there are high frequency parts, many-core parts, and large-cache parts. To support those questions (or satisfactorily answer #8730) we would need to collect additional information and send it along.", - "oneOf": [ - { - "description": "The CPU vendor or its family number don't correspond to any of the known family variants.", - "type": "string", - "enum": [ - "unknown" - ] - }, - { - "description": "AMD Milan processors (or very close). Could be an actual Milan in a Gimlet, a close-to-Milan client Zen 3 part, or Zen 4 (for which Milan is the greatest common denominator).", - "type": "string", - "enum": [ - "amd_milan" - ] - }, - { - "description": "AMD Turin processors (or very close). Could be an actual Turin in a Cosmo, or a close-to-Turin client Zen 5 part.", - "type": "string", - "enum": [ - "amd_turin" - ] - }, - { - "description": "AMD Turin Dense processors. There are no \"Turin Dense-like\" CPUs unlike other cases, so this means a bona fide Zen 5c Turin Dense part.", - "type": "string", - "enum": [ - "amd_turin_dense" - ] - } - ] - }, - "SledDiagnosticsQueryOutput": { - "oneOf": [ - { - "type": "object", - "properties": { - "success": { - "type": "object", - "properties": { - "command": { - "description": "The command and its arguments.", - "type": "string" - }, - "exit_code": { - "nullable": true, - "description": "The exit code if one was present when the command exited.", - "type": "integer", - "format": "int32" - }, - "exit_status": { - "description": "The exit status of the command. This will be the exit code (if any) and exit reason such as from a signal.", - "type": "string" - }, - "stdio": { - "description": "Any stdout/stderr produced by the command.", - "type": "string" - } - }, - "required": [ - "command", - "exit_status", - "stdio" - ] - } - }, - "required": [ - "success" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "failure": { - "type": "object", - "properties": { - "error": { - "description": "The reason the command failed to execute.", - "type": "string" - } - }, - "required": [ - "error" - ] - } - }, - "required": [ - "failure" - ], - "additionalProperties": false - } - ] - }, - "SledIdentifiers": { - "description": "Identifiers for a single sled.\n\nThis is intended primarily to be used in timeseries, to identify sled from which metric data originates.", - "type": "object", - "properties": { - "model": { - "description": "Model name of the sled", - "type": "string" - }, - "rack_id": { - "description": "Control plane ID of the rack this sled is a member of", - "type": "string", - "format": "uuid" - }, - "revision": { - "description": "Revision number of the sled", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "serial": { - "description": "Serial number of the sled", - "type": "string" - }, - "sled_id": { - "description": "Control plane ID for the sled itself", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "model", - "rack_id", - "revision", - "serial", - "sled_id" - ] - }, - "SledRole": { - "description": "Describes the role of the sled within the rack.\n\nNote that this may change if the sled is physically moved within the rack.", - "oneOf": [ - { - "description": "The sled is a general compute sled.", - "type": "string", - "enum": [ - "gimlet" - ] - }, - { - "description": "The sled is attached to the network switch, and has additional responsibilities.", - "type": "string", - "enum": [ - "scrimlet" - ] - } - ] - }, - "SledUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::SledUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "SledVmmState": { - "description": "A wrapper type containing a sled's total knowledge of the state of a VMM.", - "type": "object", - "properties": { - "migration_in": { - "nullable": true, - "description": "The current state of any inbound migration to this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "migration_out": { - "nullable": true, - "description": "The state of any outbound migration from this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "vmm_state": { - "description": "The most recent state of the sled's VMM process.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmRuntimeState" - } - ] - } - }, - "required": [ - "vmm_state" - ] - }, - "SoftNpuP9": { - "description": "Describes a PCI device that shares host files with the guest using the P9 protocol.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPciPort": { - "description": "Describes a SoftNPU PCI device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPort": { - "description": "Describes a port in a SoftNPU emulated ASIC.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the port's associated DLPI backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "link_name": { - "description": "The data link name for this port.", - "type": "string" - } - }, - "required": [ - "backend_id", - "link_name" - ], - "additionalProperties": false - }, - "SourceNatConfigGeneric": { - "description": "An IP address and port range used for source NAT, i.e., making outbound network connections from guests or services.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used for source NAT, inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external address provided to the instance or service.", - "type": "string", - "format": "ip" - }, - "last_port": { - "description": "The last port used for source NAT, also inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "last_port" - ] - }, - "SourceNatConfigV4": { - "description": "An IP address and port range used for source NAT, i.e., making outbound network connections from guests or services.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used for source NAT, inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external address provided to the instance or service.", - "type": "string", - "format": "ipv4" - }, - "last_port": { - "description": "The last port used for source NAT, also inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "last_port" - ] - }, - "SourceNatConfigV6": { - "description": "An IP address and port range used for source NAT, i.e., making outbound network connections from guests or services.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used for source NAT, inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external address provided to the instance or service.", - "type": "string", - "format": "ipv6" - }, - "last_port": { - "description": "The last port used for source NAT, also inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "last_port" - ] - }, - "SpecKey": { - "description": "A key identifying a component in an instance spec.", - "oneOf": [ - { - "title": "uuid", - "allOf": [ - { - "type": "string", - "format": "uuid" - } - ] - }, - { - "title": "name", - "allOf": [ - { - "type": "string" - } - ] - } - ] - }, - "StartSledAgentRequest": { - "description": "Configuration information for launching a Sled Agent.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/StartSledAgentRequestBody" - }, - "generation": { - "description": "The current generation number of data as stored in CRDB.\n\nThe initial generation is set during RSS time and then only mutated by Nexus. For now, we don't actually anticipate mutating this data, but we leave open the possiblity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "StartSledAgentRequestBody": { - "description": "This is the actual app level data of `StartSledAgentRequest`\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "id": { - "description": "Uuid of the Sled Agent to be created.", - "allOf": [ - { - "$ref": "#/components/schemas/SledUuid" - } - ] - }, - "is_lrtq_learner": { - "description": "Is this node an LRTQ learner node?\n\nWe only put the node into learner mode if `use_trust_quorum` is also true.", - "type": "boolean" - }, - "rack_id": { - "description": "Uuid of the rack to which this sled agent belongs.", - "type": "string", - "format": "uuid" - }, - "subnet": { - "description": "Portion of the IP space to be managed by the Sled Agent.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Subnet" - } - ] - }, - "use_trust_quorum": { - "description": "Use trust quorum for key generation", - "type": "boolean" - } - }, - "required": [ - "id", - "is_lrtq_learner", - "rack_id", - "subnet", - "use_trust_quorum" - ] - }, - "StorageLimit": { - "description": "The limit on space allowed for zone bundles, as a percentage of the overall dataset's quota.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "SupportBundleMetadata": { - "description": "Metadata about a support bundle", - "type": "object", - "properties": { - "state": { - "$ref": "#/components/schemas/SupportBundleState" - }, - "support_bundle_id": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - "required": [ - "state", - "support_bundle_id" - ] - }, - "SupportBundleState": { - "type": "string", - "enum": [ - "complete", - "incomplete" - ] - }, - "SupportBundleUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::SupportBundleUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "SwitchLocation": { - "description": "Identifies switch physical location", - "oneOf": [ - { - "description": "Switch in upper slot", - "type": "string", - "enum": [ - "switch0" - ] - }, - { - "description": "Switch in lower slot", - "type": "string", - "enum": [ - "switch1" - ] - } - ] - }, - "SwitchPorts": { - "description": "A set of switch uplinks.", - "type": "object", - "properties": { - "uplinks": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HostPortConfig" - } - } - }, - "required": [ - "uplinks" - ] - }, - "TxEqConfig": { - "description": "Per-port tx-eq overrides. This can be used to fine-tune the transceiver equalization settings to improve signal integrity.", - "type": "object", - "properties": { - "main": { - "nullable": true, - "description": "Main tap", - "type": "integer", - "format": "int32" - }, - "post1": { - "nullable": true, - "description": "Post-cursor tap1", - "type": "integer", - "format": "int32" - }, - "post2": { - "nullable": true, - "description": "Post-cursor tap2", - "type": "integer", - "format": "int32" - }, - "pre1": { - "nullable": true, - "description": "Pre-cursor tap1", - "type": "integer", - "format": "int32" - }, - "pre2": { - "nullable": true, - "description": "Pre-cursor tap2", - "type": "integer", - "format": "int32" - } - } - }, - "UplinkAddressConfig": { - "type": "object", - "properties": { - "address": { - "$ref": "#/components/schemas/IpNet" - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id (if any) associated with this address.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "address" - ] - }, - "VirtioDisk": { - "description": "A disk that presents a virtio-block interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the disk's backend component.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "pci_path": { - "description": "The PCI bus/device/function at which this disk should be attached.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtioNetworkBackend": { - "description": "A network backend associated with a virtio-net (viona) VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the viona VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "VirtioNic": { - "description": "A network card that presents a virtio-net interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the device's backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "interface_id": { - "description": "A caller-defined correlation identifier for this interface. If Propolis is configured to collect network interface kstats in its Oximeter metrics, the metric series for this interface will be associated with this identifier.", - "type": "string", - "format": "uuid" - }, - "pci_path": { - "description": "The PCI path at which to attach this device.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "interface_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtualNetworkInterfaceHost": { - "description": "A mapping from a virtual NIC to a physical host", - "type": "object", - "properties": { - "physical_host_ip": { - "type": "string", - "format": "ipv6" - }, - "virtual_ip": { - "type": "string", - "format": "ip" - }, - "virtual_mac": { - "$ref": "#/components/schemas/MacAddr" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "physical_host_ip", - "virtual_ip", - "virtual_mac", - "vni" - ] - }, - "VmmIssueDiskSnapshotRequestBody": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmIssueDiskSnapshotRequestResponse": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmPutStateBody": { - "description": "The body of a request to move a previously-ensured instance into a specific runtime state.", - "type": "object", - "properties": { - "state": { - "description": "The state into which the instance should be driven.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmStateRequested" - } - ] - } - }, - "required": [ - "state" - ] - }, - "VmmPutStateResponse": { - "description": "The response sent from a request to move an instance into a specific runtime state.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current runtime state of the instance after handling the request to change its state. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "VmmRuntimeState": { - "description": "The dynamic runtime properties of an individual VMM process.", - "type": "object", - "properties": { - "gen": { - "description": "The generation number for this VMM's state.", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "state": { - "description": "The last state reported by this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmState" - } - ] - }, - "time_updated": { - "description": "Timestamp for the VMM's state.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "gen", - "state", - "time_updated" - ] - }, - "VmmSpec": { - "description": "Specifies the virtual hardware configuration of a new Propolis VMM in the form of a Propolis instance specification.\n\nSled-agent expects that when an instance spec is provided alongside an `InstanceSledLocalConfig` to initialize a new instance, the NIC IDs in that config's network interface list will match the IDs of the virtio network backends in the instance spec.", - "allOf": [ - { - "$ref": "#/components/schemas/InstanceSpecV0" - } - ] - }, - "VmmState": { - "description": "One of the states that a VMM can be in.", - "oneOf": [ - { - "description": "The VMM is initializing and has not started running guest CPUs yet.", - "type": "string", - "enum": [ - "starting" - ] - }, - { - "description": "The VMM has finished initializing and may be running guest CPUs.", - "type": "string", - "enum": [ - "running" - ] - }, - { - "description": "The VMM is shutting down.", - "type": "string", - "enum": [ - "stopping" - ] - }, - { - "description": "The VMM's guest has stopped, and the guest will not run again, but the VMM process may not have released all of its resources yet.", - "type": "string", - "enum": [ - "stopped" - ] - }, - { - "description": "The VMM is being restarted or its guest OS is rebooting.", - "type": "string", - "enum": [ - "rebooting" - ] - }, - { - "description": "The VMM is part of a live migration.", - "type": "string", - "enum": [ - "migrating" - ] - }, - { - "description": "The VMM process reported an internal failure.", - "type": "string", - "enum": [ - "failed" - ] - }, - { - "description": "The VMM process has been destroyed and its resources have been released.", - "type": "string", - "enum": [ - "destroyed" - ] - } - ] - }, - "VmmStateRequested": { - "description": "Requestable running state of an Instance.\n\nA subset of [`omicron_common::api::external::InstanceState`].", - "oneOf": [ - { - "description": "Run this instance by migrating in from a previous running incarnation of the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "migration_target" - ] - }, - "value": { - "$ref": "#/components/schemas/InstanceMigrationTargetParams" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Start the instance if it is not already running.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Stop the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "stopped" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Immediately reset the instance, as though it had stopped and immediately began to run again.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "reboot" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "VmmUnregisterResponse": { - "description": "The response sent from a request to unregister an instance.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current state of the instance after handling the request to unregister it. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "Vni": { - "description": "A Geneve Virtual Network Identifier", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "VpcFirewallIcmpFilter": { - "type": "object", - "properties": { - "code": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/IcmpParamRange" - } - ] - }, - "icmp_type": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "icmp_type" - ] - }, - "VpcFirewallRuleAction": { - "type": "string", - "enum": [ - "allow", - "deny" - ] - }, - "VpcFirewallRuleDirection": { - "type": "string", - "enum": [ - "inbound", - "outbound" - ] - }, - "VpcFirewallRuleProtocol": { - "description": "The protocols that may be specified in a firewall rule's filter", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "tcp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "udp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "icmp" - ] - }, - "value": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallIcmpFilter" - } - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleStatus": { - "type": "string", - "enum": [ - "disabled", - "enabled" - ] - }, - "VpcFirewallRulesEnsureBody": { - "description": "Update firewall rules for a VPC", - "type": "object", - "properties": { - "rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcFirewallRule" - } - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "rules", - "vni" - ] - }, - "ZoneArtifactInventory": { - "description": "Inventory representation of a single zone artifact on a boot disk.\n\nPart of [`ZoneManifestBootInventory`].", - "type": "object", - "properties": { - "expected_hash": { - "description": "The expected digest of the file's contents.", - "type": "string", - "format": "hex string (32 bytes)" - }, - "expected_size": { - "description": "The expected size of the file, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "file_name": { - "description": "The name of the zone file on disk, for example `nexus.tar.gz`. Zone files are always \".tar.gz\".", - "type": "string" - }, - "path": { - "description": "The full path to the zone file.", - "type": "string", - "format": "Utf8PathBuf" - }, - "status": { - "description": "The status of the artifact.\n\nThis is `Ok(())` if the artifact is present and matches the expected size and digest, or an error message if it is missing or does not match.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "type": "null" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "type": "string", - "enum": [ - null - ] - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "expected_hash", - "expected_size", - "file_name", - "path", - "status" - ] - }, - "ZoneBundleCause": { - "description": "The reason or cause for a zone bundle, i.e., why it was created.", - "oneOf": [ - { - "description": "Some other, unspecified reason.", - "type": "string", - "enum": [ - "other" - ] - }, - { - "description": "A zone bundle taken when a sled agent finds a zone that it does not expect to be running.", - "type": "string", - "enum": [ - "unexpected_zone" - ] - }, - { - "description": "An instance zone was terminated.", - "type": "string", - "enum": [ - "terminated_instance" - ] - } - ] - }, - "ZoneBundleId": { - "description": "An identifier for a zone bundle.", - "type": "object", - "properties": { - "bundle_id": { - "description": "The ID for this bundle itself.", - "type": "string", - "format": "uuid" - }, - "zone_name": { - "description": "The name of the zone this bundle is derived from.", - "type": "string" - } - }, - "required": [ - "bundle_id", - "zone_name" - ] - }, - "ZoneBundleMetadata": { - "description": "Metadata about a zone bundle.", - "type": "object", - "properties": { - "cause": { - "description": "The reason or cause a bundle was created.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleCause" - } - ] - }, - "id": { - "description": "Identifier for this zone bundle", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleId" - } - ] - }, - "time_created": { - "description": "The time at which this zone bundle was created.", - "type": "string", - "format": "date-time" - }, - "version": { - "description": "A version number for this zone bundle.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "cause", - "id", - "time_created", - "version" - ] - }, - "ZoneImageResolverInventory": { - "description": "Inventory representation of zone image resolver status and health.", - "type": "object", - "properties": { - "mupdate_override": { - "description": "The mupdate override status.", - "allOf": [ - { - "$ref": "#/components/schemas/MupdateOverrideInventory" - } - ] - }, - "zone_manifest": { - "description": "The zone manifest status.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneManifestInventory" - } - ] - } - }, - "required": [ - "mupdate_override", - "zone_manifest" - ] - }, - "ZoneManifestBootInventory": { - "description": "Inventory representation of zone artifacts on the boot disk.\n\nPart of [`ZoneManifestInventory`].", - "type": "object", - "properties": { - "artifacts": { - "title": "IdOrdMap", - "description": "The artifacts on disk.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneArtifactInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneArtifactInventory" - }, - "uniqueItems": true - }, - "source": { - "description": "The manifest source.\n\nIn production this is [`OmicronZoneManifestSource::Installinator`], but in some development and testing flows Sled Agent synthesizes zone manifests. In those cases, the source is [`OmicronZoneManifestSource::SledAgent`].", - "allOf": [ - { - "$ref": "#/components/schemas/OmicronZoneManifestSource" - } - ] - } - }, - "required": [ - "artifacts", - "source" - ] - }, - "ZoneManifestInventory": { - "description": "Inventory representation of a zone manifest.\n\nPart of [`ZoneImageResolverInventory`].\n\nA zone manifest is a listing of all the zones present in a system's install dataset. This struct contains information about the install dataset gathered from a system.", - "type": "object", - "properties": { - "boot_disk_path": { - "description": "The full path to the zone manifest file on the boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "boot_inventory": { - "description": "The manifest read from the boot disk, and whether the manifest is valid.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_status": { - "title": "IdOrdMap", - "description": "Information about the install dataset on non-boot disks.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - }, - "uniqueItems": true - } - }, - "required": [ - "boot_disk_path", - "boot_inventory", - "non_boot_status" - ] - }, - "ZoneManifestNonBootInventory": { - "description": "Inventory representation of a zone manifest on a non-boot disk.\n\nUnlike [`ZoneManifestBootInventory`] which is structured since Reconfigurator makes decisions based on it, information about non-boot disks is purely advisory. For simplicity, we store information in an unstructured format.", - "type": "object", - "properties": { - "is_valid": { - "description": "Whether the status is valid.", - "type": "boolean" - }, - "message": { - "description": "A message describing the status.\n\nIf `is_valid` is true, then the message describes the list of artifacts found and their hashes.\n\nIf `is_valid` is false, then this message describes the reason for the invalid status. This could include errors reading the zone manifest, or zone file mismatches.", - "type": "string" - }, - "path": { - "description": "The full path to the zone manifest JSON on the non-boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "zpool_id": { - "description": "The ID of the non-boot zpool.", - "allOf": [ - { - "$ref": "#/components/schemas/InternalZpoolUuid" - } - ] - } - }, - "required": [ - "is_valid", - "message", - "path", - "zpool_id" - ] - }, - "ZpoolName": { - "title": "The name of a Zpool", - "description": "Zpool names are of the format ox{i,p}_. They are either Internal or External, and should be unique", - "type": "string", - "pattern": "^ox[ip]_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" - }, - "ZpoolUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ZpoolUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "PropolisUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::PropolisUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } -} diff --git a/openapi/sled-agent/sled-agent-11.0.0-5f3d9f.json.gitref b/openapi/sled-agent/sled-agent-11.0.0-5f3d9f.json.gitref new file mode 100644 index 00000000000..842c0344443 --- /dev/null +++ b/openapi/sled-agent/sled-agent-11.0.0-5f3d9f.json.gitref @@ -0,0 +1 @@ +99c3f3ef97f80d1401c54ce0c625af125d4faef3:openapi/sled-agent/sled-agent-11.0.0-5f3d9f.json \ No newline at end of file diff --git a/openapi/sled-agent/sled-agent-2.0.0-a3e161.json b/openapi/sled-agent/sled-agent-2.0.0-a3e161.json deleted file mode 100644 index 132bc5b27a0..00000000000 --- a/openapi/sled-agent/sled-agent-2.0.0-a3e161.json +++ /dev/null @@ -1,8330 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Sled Agent API", - "description": "API for interacting with individual sleds", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "2.0.0" - }, - "paths": { - "/artifacts": { - "get": { - "operationId": "artifact_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactListResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}": { - "put": { - "operationId": "artifact_put", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactPutResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}/copy-from-depot": { - "post": { - "operationId": "artifact_copy_from_depot", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotBody" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts-config": { - "get": { - "operationId": "artifact_config_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "artifact_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/bootstore/status": { - "get": { - "summary": "Get the internal state of the local bootstore node", - "operationId": "bootstore_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BootstoreStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/chicken-switch/destroy-orphaned-datasets": { - "put": { - "summary": "This endpoint sets the `destroy_orphaned_datasets` chicken switch", - "description": "(allowing sled-agent to delete datasets it believes are orphaned). It will be removed with omicron#6177.", - "operationId": "chicken_switch_destroy_orphaned_datasets_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ChickenSwitchDestroyOrphanedDatasets" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/disks/{disk_id}": { - "put": { - "operationId": "disk_put", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskRuntimeState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/eip-gateways": { - "put": { - "summary": "Update per-NIC IP address <-> internet gateway mappings.", - "operationId": "set_eip_gateways", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIpGatewayMap" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/inventory": { - "get": { - "summary": "Fetch basic information about this sled", - "operationId": "inventory", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Inventory" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/network-bootstore-config": { - "get": { - "summary": "This API endpoint is only reading the local sled agent's view of the", - "description": "bootstore. The boostore is a distributed data store that is eventually consistent. Reads from individual nodes may not represent the latest state.", - "operationId": "read_network_bootstore_config_cache", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "write_network_bootstore_config", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/omicron-config": { - "put": { - "operationId": "omicron_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OmicronSledConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-identifiers": { - "get": { - "summary": "Fetch sled identifiers", - "operationId": "sled_identifiers", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledIdentifiers" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-role": { - "get": { - "operationId": "sled_role_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledRole" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sleds": { - "put": { - "summary": "Add a sled to a rack that was already initialized via RSS", - "operationId": "sled_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddSledRequest" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/dladm-info": { - "get": { - "operationId": "support_dladm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/health-check": { - "get": { - "operationId": "support_health_check", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/ipadm-info": { - "get": { - "operationId": "support_ipadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/logs/download/{zone}": { - "get": { - "summary": "This endpoint returns a zip file of a zone's logs organized by service.", - "operationId": "support_logs_download", - "parameters": [ - { - "in": "path", - "name": "zone", - "description": "The zone for which one would like to collect logs for", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "max_rotated", - "description": "The max number of rotated logs to include in the final support bundle", - "required": true, - "schema": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support/logs/zones": { - "get": { - "summary": "This endpoint returns a list of known zones on a sled that have service", - "description": "logs that can be collected into a support bundle.", - "operationId": "support_logs", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/nvmeadm-info": { - "get": { - "operationId": "support_nvmeadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pargs-info": { - "get": { - "operationId": "support_pargs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pfiles-info": { - "get": { - "operationId": "support_pfiles_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pstack-info": { - "get": { - "operationId": "support_pstack_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zfs-info": { - "get": { - "operationId": "support_zfs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zoneadm-info": { - "get": { - "operationId": "support_zoneadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zpool-info": { - "get": { - "operationId": "support_zpool_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}": { - "get": { - "summary": "List all support bundles within a particular dataset", - "operationId": "support_bundle_list", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SupportBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}": { - "post": { - "summary": "Starts creation of a support bundle within a particular dataset", - "description": "Callers should transfer chunks of the bundle with \"support_bundle_transfer\", and then call \"support_bundle_finalize\" once the bundle has finished transferring.\n\nIf a support bundle was previously created without being finalized successfully, this endpoint will reset the state.\n\nIf a support bundle was previously created and finalized successfully, this endpoint will return metadata indicating that it already exists.", - "operationId": "support_bundle_start_creation", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a support bundle from a particular dataset", - "operationId": "support_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download": { - "get": { - "summary": "Fetch a support bundle from a particular dataset", - "operationId": "support_bundle_download", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a support bundle from a particular dataset", - "operationId": "support_bundle_head", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download/{file}": { - "get": { - "summary": "Fetch a file within a support bundle from a particular dataset", - "operationId": "support_bundle_download_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a file within a support bundle from a particular dataset", - "operationId": "support_bundle_head_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/finalize": { - "post": { - "summary": "Finalizes the creation of a support bundle", - "description": "If the requested hash matched the bundle, the bundle is created. Otherwise, an error is returned.", - "operationId": "support_bundle_finalize", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - }, - { - "in": "query", - "name": "hash", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/index": { - "get": { - "summary": "Fetch the index (list of files within a support bundle)", - "operationId": "support_bundle_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about the list of files within a support bundle", - "operationId": "support_bundle_head_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/transfer": { - "put": { - "summary": "Transfers a chunk of a support bundle within a particular dataset", - "operationId": "support_bundle_transfer", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - }, - { - "in": "query", - "name": "offset", - "required": true, - "schema": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/switch-ports": { - "post": { - "operationId": "uplink_ensure", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPorts" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v2p": { - "get": { - "summary": "List v2p mappings present on sled", - "operationId": "list_v2p", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_VirtualNetworkInterfaceHost", - "type": "array", - "items": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Create a mapping from a virtual NIC to a physical host", - "operationId": "set_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a mapping from a virtual NIC to a physical host", - "operationId": "del_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}": { - "put": { - "operationId": "vmm_register", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_unregister", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmUnregisterResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/disks/{disk_id}/snapshot": { - "post": { - "summary": "Take a snapshot of a disk that is attached to an instance", - "operationId": "vmm_issue_disk_snapshot_request", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/external-ip": { - "put": { - "operationId": "vmm_put_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_delete_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/state": { - "get": { - "operationId": "vmm_get_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "vmm_put_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc/{vpc_id}/firewall/rules": { - "put": { - "operationId": "vpc_firewall_rules_put", - "parameters": [ - { - "in": "path", - "name": "vpc_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRulesEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc-routes": { - "get": { - "summary": "Get the current versions of VPC routing rules.", - "operationId": "list_vpc_routes", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteState", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteState" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update VPC routing rules.", - "operationId": "set_vpc_routes", - "requestBody": { - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteSet", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteSet" - } - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones": { - "get": { - "summary": "List the zones that are currently managed by the sled agent.", - "operationId": "zones_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup": { - "post": { - "summary": "Trigger a zone bundle cleanup.", - "operationId": "zone_bundle_cleanup", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_CleanupCount", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/CleanupCount" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/context": { - "get": { - "summary": "Return context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContext" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContextUpdate" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/utilization": { - "get": { - "summary": "Return utilization information about all zone bundles.", - "operationId": "zone_bundle_utilization", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_BundleUtilization", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/BundleUtilization" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles": { - "get": { - "summary": "List all zone bundles that exist, even for now-deleted zones.", - "operationId": "zone_bundle_list_all", - "parameters": [ - { - "in": "query", - "name": "filter", - "description": "An optional substring used to filter zone bundles.", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}": { - "get": { - "summary": "List the zone bundles that are available for a running zone.", - "operationId": "zone_bundle_list", - "parameters": [ - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}/{bundle_id}": { - "get": { - "summary": "Fetch the binary content of a single zone bundle.", - "operationId": "zone_bundle_get", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a zone bundle.", - "operationId": "zone_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "AddSledRequest": { - "description": "A request to Add a given sled after rack initialization has occurred", - "type": "object", - "properties": { - "sled_id": { - "$ref": "#/components/schemas/BaseboardId" - }, - "start_request": { - "$ref": "#/components/schemas/StartSledAgentRequest" - } - }, - "required": [ - "sled_id", - "start_request" - ] - }, - "ArtifactConfig": { - "type": "object", - "properties": { - "artifacts": { - "type": "array", - "items": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "uniqueItems": true - }, - "generation": { - "$ref": "#/components/schemas/Generation" - } - }, - "required": [ - "artifacts", - "generation" - ] - }, - "ArtifactCopyFromDepotBody": { - "type": "object", - "properties": { - "depot_base_url": { - "type": "string" - } - }, - "required": [ - "depot_base_url" - ] - }, - "ArtifactCopyFromDepotResponse": { - "type": "object" - }, - "ArtifactListResponse": { - "type": "object", - "properties": { - "generation": { - "$ref": "#/components/schemas/Generation" - }, - "list": { - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - }, - "required": [ - "generation", - "list" - ] - }, - "ArtifactPutResponse": { - "type": "object", - "properties": { - "datasets": { - "description": "The number of valid M.2 artifact datasets we found on the sled. There is typically one of these datasets for each functional M.2.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "successful_writes": { - "description": "The number of valid writes to the M.2 artifact datasets. This should be less than or equal to the number of artifact datasets.", - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "required": [ - "datasets", - "successful_writes" - ] - }, - "Baseboard": { - "description": "Describes properties that should uniquely identify a Gimlet.", - "oneOf": [ - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "gimlet" - ] - } - }, - "required": [ - "identifier", - "model", - "revision", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "pc" - ] - } - }, - "required": [ - "identifier", - "model", - "type" - ] - } - ] - }, - "BaseboardId": { - "description": "A representation of a Baseboard ID as used in the inventory subsystem This type is essentially the same as a `Baseboard` except it doesn't have a revision or HW type (Gimlet, PC, Unknown).", - "type": "object", - "properties": { - "part_number": { - "description": "Oxide Part Number", - "type": "string" - }, - "serial_number": { - "description": "Serial number (unique for a given part number)", - "type": "string" - } - }, - "required": [ - "part_number", - "serial_number" - ] - }, - "BfdMode": { - "description": "BFD connection mode.", - "type": "string", - "enum": [ - "single_hop", - "multi_hop" - ] - }, - "BfdPeerConfig": { - "type": "object", - "properties": { - "detection_threshold": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "type": "string", - "format": "ip" - }, - "mode": { - "$ref": "#/components/schemas/BfdMode" - }, - "remote": { - "type": "string", - "format": "ip" - }, - "required_rx": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "$ref": "#/components/schemas/SwitchLocation" - } - }, - "required": [ - "detection_threshold", - "mode", - "remote", - "required_rx", - "switch" - ] - }, - "BgpConfig": { - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number for the BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "checker": { - "nullable": true, - "description": "Checker to apply to incoming messages.", - "default": null, - "type": "string" - }, - "originate": { - "description": "The set of prefixes for the BGP router to originate.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - }, - "shaper": { - "nullable": true, - "description": "Shaper to apply to outgoing messages.", - "default": null, - "type": "string" - } - }, - "required": [ - "asn", - "originate" - ] - }, - "BgpPeerConfig": { - "type": "object", - "properties": { - "addr": { - "description": "Address of the peer.", - "type": "string", - "format": "ipv4" - }, - "allowed_export": { - "description": "Define export policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "allowed_import": { - "description": "Define import policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "asn": { - "description": "The autonomous system number of the router the peer belongs to.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "communities": { - "description": "Include the provided communities in updates sent to the peer.", - "default": [], - "type": "array", - "items": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "connect_retry": { - "nullable": true, - "description": "The interval in seconds between peer connection retry attempts.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "delay_open": { - "nullable": true, - "description": "How long to delay sending open messages to a peer. In seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "enforce_first_as": { - "description": "Enforce that the first AS in paths received from this peer is the peer's AS.", - "default": false, - "type": "boolean" - }, - "hold_time": { - "nullable": true, - "description": "How long to keep a session alive without a keepalive in seconds. Defaults to 6.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "idle_hold_time": { - "nullable": true, - "description": "How long to keep a peer in idle after a state machine reset in seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "keepalive": { - "nullable": true, - "description": "The interval to send keepalive messages at.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "local_pref": { - "nullable": true, - "description": "Apply a local preference to routes received from this peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "md5_auth_key": { - "nullable": true, - "description": "Use the given key for TCP-MD5 authentication with the peer.", - "default": null, - "type": "string" - }, - "min_ttl": { - "nullable": true, - "description": "Require messages from a peer have a minimum IP time to live field.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "multi_exit_discriminator": { - "nullable": true, - "description": "Apply the provided multi-exit discriminator (MED) updates sent to the peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "port": { - "description": "Switch port the peer is reachable on.", - "type": "string" - }, - "remote_asn": { - "nullable": true, - "description": "Require that a peer has a specified ASN.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "Associate a VLAN ID with a BGP peer session.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "addr", - "asn", - "port" - ] - }, - "BlobStorageBackend": { - "description": "A storage backend for a disk whose initial contents are given explicitly by the specification.", - "type": "object", - "properties": { - "base64": { - "description": "The disk's initial contents, encoded as a base64 string.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - } - }, - "required": [ - "base64", - "readonly" - ], - "additionalProperties": false - }, - "Board": { - "description": "A VM's mainboard.", - "type": "object", - "properties": { - "chipset": { - "description": "The chipset to expose to guest software.", - "allOf": [ - { - "$ref": "#/components/schemas/Chipset" - } - ] - }, - "cpuid": { - "nullable": true, - "description": "The CPUID values to expose to the guest. If `None`, bhyve will derive default values from the host's CPUID values.", - "allOf": [ - { - "$ref": "#/components/schemas/Cpuid" - } - ] - }, - "cpus": { - "description": "The number of virtual logical processors attached to this VM.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "guest_hv_interface": { - "description": "The hypervisor platform to expose to the guest. The default is a bhyve-compatible interface with no additional features.\n\nFor compatibility with older versions of Propolis, this field is only serialized if it specifies a non-default interface.", - "allOf": [ - { - "$ref": "#/components/schemas/GuestHypervisorInterface" - } - ] - }, - "memory_mb": { - "description": "The amount of guest RAM attached to this VM.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "chipset", - "cpus", - "memory_mb" - ], - "additionalProperties": false - }, - "BootImageHeader": { - "type": "object", - "properties": { - "data_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "flags": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "image_name": { - "type": "string" - }, - "image_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "sha256": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 32, - "maxItems": 32 - }, - "target_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "data_size", - "flags", - "image_name", - "image_size", - "sha256", - "target_size" - ] - }, - "BootOrderEntry": { - "description": "An entry in the boot order stored in a [`BootSettings`] component.", - "type": "object", - "properties": { - "id": { - "description": "The ID of another component in the spec that Propolis should try to boot from.\n\nCurrently, only disk device components are supported.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - } - }, - "required": [ - "id" - ] - }, - "BootPartitionContents": { - "type": "object", - "properties": { - "boot_disk": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/M2Slot" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/M2Slot" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_a": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_b": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "boot_disk", - "slot_a", - "slot_b" - ] - }, - "BootPartitionDetails": { - "type": "object", - "properties": { - "artifact_hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "artifact_size": { - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "header": { - "$ref": "#/components/schemas/BootImageHeader" - } - }, - "required": [ - "artifact_hash", - "artifact_size", - "header" - ] - }, - "BootSettings": { - "description": "Settings supplied to the guest's firmware image that specify the order in which it should consider its options when selecting a device to try to boot from.", - "type": "object", - "properties": { - "order": { - "description": "An ordered list of components to attempt to boot from.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BootOrderEntry" - } - } - }, - "required": [ - "order" - ], - "additionalProperties": false - }, - "BootstoreStatus": { - "type": "object", - "properties": { - "accepted_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "established_connections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EstablishedConnection" - } - }, - "fsm_ledger_generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "fsm_state": { - "type": "string" - }, - "negotiating_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "network_config_ledger_generation": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "peers": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - } - }, - "required": [ - "accepted_connections", - "established_connections", - "fsm_ledger_generation", - "fsm_state", - "negotiating_connections", - "peers" - ] - }, - "BundleUtilization": { - "description": "The portion of a debug dataset used for zone bundles.", - "type": "object", - "properties": { - "bytes_available": { - "description": "The total number of bytes available for zone bundles.\n\nThis is `dataset_quota` multiplied by the context's storage limit.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes_used": { - "description": "Total bundle usage, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "dataset_quota": { - "description": "The total dataset quota, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bytes_available", - "bytes_used", - "dataset_quota" - ] - }, - "ByteCount": { - "description": "Byte count to express memory or storage capacity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "ChickenSwitchDestroyOrphanedDatasets": { - "type": "object", - "properties": { - "destroy_orphans": { - "description": "If true, sled-agent will attempt to destroy durable ZFS datasets that it believes were associated with now-expunged Omicron zones.", - "type": "boolean" - } - }, - "required": [ - "destroy_orphans" - ] - }, - "Chipset": { - "description": "A kind of virtual chipset.", - "oneOf": [ - { - "description": "An Intel 440FX-compatible chipset.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i440_fx" - ] - }, - "value": { - "$ref": "#/components/schemas/I440Fx" - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "CleanupContext": { - "description": "Context provided for the zone bundle cleanup task.", - "type": "object", - "properties": { - "period": { - "description": "The period on which automatic checks and cleanup is performed.", - "allOf": [ - { - "$ref": "#/components/schemas/CleanupPeriod" - } - ] - }, - "priority": { - "description": "The priority ordering for keeping old bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "description": "The limit on the dataset quota available for zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/StorageLimit" - } - ] - } - }, - "required": [ - "period", - "priority", - "storage_limit" - ] - }, - "CleanupContextUpdate": { - "description": "Parameters used to update the zone bundle cleanup context.", - "type": "object", - "properties": { - "period": { - "nullable": true, - "description": "The new period on which automatic cleanups are run.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "priority": { - "nullable": true, - "description": "The priority ordering for preserving old zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "nullable": true, - "description": "The new limit on the underlying dataset quota allowed for bundles.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "CleanupCount": { - "description": "The count of bundles / bytes removed during a cleanup operation.", - "type": "object", - "properties": { - "bundles": { - "description": "The number of bundles removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes": { - "description": "The number of bytes removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bundles", - "bytes" - ] - }, - "CleanupPeriod": { - "description": "A period on which bundles are automatically cleaned up.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "ComponentV0": { - "oneOf": [ - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioDisk" - }, - "type": { - "type": "string", - "enum": [ - "virtio_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/NvmeDisk" - }, - "type": { - "type": "string", - "enum": [ - "nvme_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNic" - }, - "type": { - "type": "string", - "enum": [ - "virtio_nic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SerialPort" - }, - "type": { - "type": "string", - "enum": [ - "serial_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/PciPciBridge" - }, - "type": { - "type": "string", - "enum": [ - "pci_pci_bridge" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/QemuPvpanic" - }, - "type": { - "type": "string", - "enum": [ - "qemu_pvpanic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BootSettings" - }, - "type": { - "type": "string", - "enum": [ - "boot_settings" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPciPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_pci_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuP9" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_p9" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/P9fs" - }, - "type": { - "type": "string", - "enum": [ - "p9fs" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/MigrationFailureInjector" - }, - "type": { - "type": "string", - "enum": [ - "migration_failure_injector" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/CrucibleStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "crucible_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/FileStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "file_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BlobStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "blob_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "virtio_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/DlpiNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "dlpi_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - } - ] - }, - "CompressionAlgorithm": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "on" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "off" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "gzip" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "level": { - "$ref": "#/components/schemas/GzipLevel" - }, - "type": { - "type": "string", - "enum": [ - "gzip_n" - ] - } - }, - "required": [ - "level", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lz4" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lzjb" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "zle" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "ConfigReconcilerInventory": { - "description": "Describes the last attempt made by the sled-agent-config-reconciler to reconcile the current sled config against the actual state of the sled.", - "type": "object", - "properties": { - "boot_partitions": { - "$ref": "#/components/schemas/BootPartitionContents" - }, - "datasets": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "external_disks": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "last_reconciled_config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "orphaned_datasets": { - "title": "IdOrdMap", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/OrphanedDataset" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/OrphanedDataset" - }, - "uniqueItems": true - }, - "remove_mupdate_override": { - "nullable": true, - "description": "The result of removing the mupdate override file on disk.\n\n`None` if `remove_mupdate_override` was not provided in the sled config.", - "allOf": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideInventory" - } - ] - }, - "zones": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - } - }, - "required": [ - "boot_partitions", - "datasets", - "external_disks", - "last_reconciled_config", - "orphaned_datasets", - "zones" - ] - }, - "ConfigReconcilerInventoryResult": { - "oneOf": [ - { - "type": "object", - "properties": { - "result": { - "type": "string", - "enum": [ - "ok" - ] - } - }, - "required": [ - "result" - ] - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "result": { - "type": "string", - "enum": [ - "err" - ] - } - }, - "required": [ - "message", - "result" - ] - } - ] - }, - "ConfigReconcilerInventoryStatus": { - "description": "Status of the sled-agent-config-reconciler task.", - "oneOf": [ - { - "description": "The reconciler task has not yet run for the first time since sled-agent started.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "not_yet_run" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The reconciler task is actively running.", - "type": "object", - "properties": { - "config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "running_for": { - "$ref": "#/components/schemas/Duration" - }, - "started_at": { - "type": "string", - "format": "date-time" - }, - "status": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "config", - "running_for", - "started_at", - "status" - ] - }, - { - "description": "The reconciler task is currently idle, but previously did complete a reconciliation attempt.\n\nThis variant does not include the `OmicronSledConfig` used in the last attempt, because that's always available via [`ConfigReconcilerInventory::last_reconciled_config`].", - "type": "object", - "properties": { - "completed_at": { - "type": "string", - "format": "date-time" - }, - "ran_for": { - "$ref": "#/components/schemas/Duration" - }, - "status": { - "type": "string", - "enum": [ - "idle" - ] - } - }, - "required": [ - "completed_at", - "ran_for", - "status" - ] - } - ] - }, - "Cpuid": { - "description": "A set of CPUID values to expose to a guest.", - "type": "object", - "properties": { - "entries": { - "description": "A list of CPUID leaves/subleaves and their associated values.\n\nPropolis servers require that each entry's `leaf` be unique and that it falls in either the \"standard\" (0 to 0xFFFF) or \"extended\" (0x8000_0000 to 0x8000_FFFF) function ranges, since these are the only valid input ranges currently defined by Intel and AMD. See the Intel 64 and IA-32 Architectures Software Developer's Manual (June 2024) Table 3-17 and the AMD64 Architecture Programmer's Manual (March 2024) Volume 3's documentation of the CPUID instruction.", - "type": "array", - "items": { - "$ref": "#/components/schemas/CpuidEntry" - } - }, - "vendor": { - "description": "The CPU vendor to emulate.\n\nCPUID leaves in the extended range (0x8000_0000 to 0x8000_FFFF) have vendor-defined semantics. Propolis uses this value to determine these semantics when deciding whether it needs to specialize the supplied template values for these leaves.", - "allOf": [ - { - "$ref": "#/components/schemas/CpuidVendor" - } - ] - } - }, - "required": [ - "entries", - "vendor" - ], - "additionalProperties": false - }, - "CpuidEntry": { - "description": "A full description of a CPUID leaf/subleaf and the values it produces.", - "type": "object", - "properties": { - "eax": { - "description": "The value to return in eax.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ebx": { - "description": "The value to return in ebx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ecx": { - "description": "The value to return in ecx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "edx": { - "description": "The value to return in edx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "leaf": { - "description": "The leaf (function) number for this entry.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "subleaf": { - "nullable": true, - "description": "The subleaf (index) number for this entry, if it uses subleaves.", - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "eax", - "ebx", - "ecx", - "edx", - "leaf" - ], - "additionalProperties": false - }, - "CpuidVendor": { - "description": "A CPU vendor to use when interpreting the meanings of CPUID leaves in the extended ID range (0x80000000 to 0x8000FFFF).", - "type": "string", - "enum": [ - "amd", - "intel" - ] - }, - "CrucibleStorageBackend": { - "description": "A Crucible storage backend.", - "type": "object", - "properties": { - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "request_json": { - "description": "A serialized `[crucible_client_types::VolumeConstructionRequest]`. This is stored in serialized form so that breaking changes to the definition of a `VolumeConstructionRequest` do not inadvertently break instance spec deserialization.\n\nWhen using a spec to initialize a new instance, the spec author must ensure this request is well-formed and can be deserialized by the version of `crucible_client_types` used by the target Propolis.", - "type": "string" - } - }, - "required": [ - "readonly", - "request_json" - ], - "additionalProperties": false - }, - "DatasetConfig": { - "description": "Configuration information necessary to request a single dataset.\n\nThese datasets are tracked directly by Nexus.", - "type": "object", - "properties": { - "compression": { - "description": "The compression mode to be used by the dataset", - "allOf": [ - { - "$ref": "#/components/schemas/CompressionAlgorithm" - } - ] - }, - "id": { - "description": "The UUID of the dataset being requested", - "allOf": [ - { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - ] - }, - "name": { - "description": "The dataset's name", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetName" - } - ] - }, - "quota": { - "nullable": true, - "description": "The upper bound on the amount of storage used by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "reservation": { - "nullable": true, - "description": "The lower bound on the amount of storage usable by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "compression", - "id", - "name" - ] - }, - "DatasetKind": { - "description": "The kind of dataset. See the `DatasetKind` enum in omicron-common for possible values.", - "type": "string" - }, - "DatasetName": { - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/DatasetKind" - }, - "pool_name": { - "$ref": "#/components/schemas/ZpoolName" - } - }, - "required": [ - "kind", - "pool_name" - ] - }, - "DhcpConfig": { - "description": "DHCP configuration for a port\n\nNot present here: Hostname (DHCPv4 option 12; used in DHCPv6 option 39); we use `InstanceRuntimeState::hostname` for this value.", - "type": "object", - "properties": { - "dns_servers": { - "description": "DNS servers to send to the instance\n\n(DHCPv4 option 6; DHCPv6 option 23)", - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - }, - "host_domain": { - "nullable": true, - "description": "DNS zone this instance's hostname belongs to (e.g. the `project.example` part of `instance1.project.example`)\n\n(DHCPv4 option 15; used in DHCPv6 option 39)", - "type": "string" - }, - "search_domains": { - "description": "DNS search domains\n\n(DHCPv4 option 119; DHCPv6 option 24)", - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "dns_servers", - "search_domains" - ] - }, - "DiskEnsureBody": { - "description": "Sent from to a sled agent to establish the runtime state of a Disk", - "type": "object", - "properties": { - "initial_runtime": { - "description": "Last runtime state of the Disk known to Nexus (used if the agent has never seen this Disk before).", - "allOf": [ - { - "$ref": "#/components/schemas/DiskRuntimeState" - } - ] - }, - "target": { - "description": "requested runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskStateRequested" - } - ] - } - }, - "required": [ - "initial_runtime", - "target" - ] - }, - "DiskIdentity": { - "description": "Uniquely identifies a disk.", - "type": "object", - "properties": { - "model": { - "type": "string" - }, - "serial": { - "type": "string" - }, - "vendor": { - "type": "string" - } - }, - "required": [ - "model", - "serial", - "vendor" - ] - }, - "DiskRuntimeState": { - "description": "Runtime state of the Disk, which includes its attach state and some minimal metadata", - "type": "object", - "properties": { - "disk_state": { - "description": "runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskState" - } - ] - }, - "gen": { - "description": "generation number for this state", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "time_updated": { - "description": "timestamp for this information", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "disk_state", - "gen", - "time_updated" - ] - }, - "DiskState": { - "description": "State of a Disk", - "oneOf": [ - { - "description": "Disk is being initialized", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "creating" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready but detached from any Instance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready to receive blocks from an external source", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "import_ready" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from a URL", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_url" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from bulk writes", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_bulk_writes" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being finalized to state Detached", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "finalizing" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is undergoing maintenance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "maintenance" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is being detached from the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "detaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk has been destroyed", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is unavailable", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskStateRequested": { - "description": "Used to request a Disk state change", - "oneOf": [ - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskVariant": { - "type": "string", - "enum": [ - "U2", - "M2" - ] - }, - "DlpiNetworkBackend": { - "description": "A network backend associated with a DLPI VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "Duration": { - "type": "object", - "properties": { - "nanos": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "secs": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "nanos", - "secs" - ] - }, - "EarlyNetworkConfig": { - "description": "Network configuration required to bring up the control plane\n\nThe fields in this structure are those from [`crate::rack_init::RackInitializeRequest`] necessary for use beyond RSS. This is just for the initial rack configuration and cold boot purposes. Updates come from Nexus.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/EarlyNetworkConfigBody" - }, - "generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "EarlyNetworkConfigBody": { - "description": "This is the actual configuration of EarlyNetworking.\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "ntp_servers": { - "description": "The external NTP server addresses.", - "type": "array", - "items": { - "type": "string" - } - }, - "rack_network_config": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RackNetworkConfigV2" - } - ] - } - }, - "required": [ - "ntp_servers" - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "EstablishedConnection": { - "type": "object", - "properties": { - "addr": { - "type": "string" - }, - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - } - }, - "required": [ - "addr", - "baseboard" - ] - }, - "ExternalIpGatewayMap": { - "description": "Per-NIC mappings from external IP addresses to the Internet Gateways which can choose them as a source.", - "type": "object", - "properties": { - "mappings": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - } - } - } - }, - "required": [ - "mappings" - ] - }, - "FileStorageBackend": { - "description": "A storage backend backed by a file in the host system's file system.", - "type": "object", - "properties": { - "block_size": { - "description": "Block size of the backend", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "path": { - "description": "A path to a file that backs a disk.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "workers": { - "nullable": true, - "description": "Optional worker threads for the file backend, exposed for testing only.", - "type": "integer", - "format": "uint", - "minimum": 1 - } - }, - "required": [ - "block_size", - "path", - "readonly" - ], - "additionalProperties": false - }, - "Generation": { - "description": "Generation numbers stored in the database, used for optimistic concurrency control", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "GuestHypervisorInterface": { - "description": "A hypervisor interface to expose to the guest.", - "oneOf": [ - { - "description": "Expose a bhyve-like interface (\"bhyve bhyve \" as the hypervisor ID in leaf 0x4000_0000 and no additional leaves or features).", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bhyve" - ] - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "description": "Expose a Hyper-V-compatible hypervisor interface with the supplied features enabled.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "hyper_v" - ] - }, - "value": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HyperVFeatureFlag" - }, - "uniqueItems": true - } - }, - "required": [ - "features" - ], - "additionalProperties": false - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "GzipLevel": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "HostIdentifier": { - "description": "A `HostIdentifier` represents either an IP host or network (v4 or v6), or an entire VPC (identified by its VNI). It is used in firewall rule host filters.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "HostPhase2DesiredContents": { - "description": "Describes the desired contents of a host phase 2 slot (i.e., the boot partition on one of the internal M.2 drives).", - "oneOf": [ - { - "description": "Do not change the current contents.\n\nWe use this value when we've detected a sled has been mupdated (and we don't want to overwrite phase 2 images until we understand how to recover from that mupdate) and as the default value when reading an [`OmicronSledConfig`] that was ledgered before this concept existed.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "current_contents" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Set the phase 2 slot to the given artifact.\n\nThe artifact will come from an unpacked and distributed TUF repo.", - "type": "object", - "properties": { - "hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "type": { - "type": "string", - "enum": [ - "artifact" - ] - } - }, - "required": [ - "hash", - "type" - ] - } - ] - }, - "HostPhase2DesiredSlots": { - "description": "Describes the desired contents for both host phase 2 slots.", - "type": "object", - "properties": { - "slot_a": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - }, - "slot_b": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - } - }, - "required": [ - "slot_a", - "slot_b" - ] - }, - "HostPortConfig": { - "type": "object", - "properties": { - "addrs": { - "description": "IP Address and prefix (e.g., `192.168.0.1/16`) to apply to switchport (must be in infra_ip pool). May also include an optional VLAN ID.", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "lldp": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Switchport to use for external connectivity", - "type": "string" - }, - "tx_eq": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - } - }, - "required": [ - "addrs", - "port" - ] - }, - "Hostname": { - "title": "An RFC-1035-compliant hostname", - "description": "A hostname identifies a host on a network, and is usually a dot-delimited sequence of labels, where each label contains only letters, digits, or the hyphen. See RFCs 1035 and 952 for more details.", - "type": "string", - "pattern": "^([a-zA-Z0-9]+[a-zA-Z0-9\\-]*(?. They are either Internal or External, and should be unique", - "type": "string", - "pattern": "^ox[ip]_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" - }, - "TypedUuidForPropolisKind": { - "type": "string", - "format": "uuid" - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } -} diff --git a/openapi/sled-agent/sled-agent-2.0.0-a3e161.json.gitref b/openapi/sled-agent/sled-agent-2.0.0-a3e161.json.gitref new file mode 100644 index 00000000000..3dc532837b9 --- /dev/null +++ b/openapi/sled-agent/sled-agent-2.0.0-a3e161.json.gitref @@ -0,0 +1 @@ +33d4f825192acc9d0425b5eac6ea7624ecc0da84:openapi/sled-agent/sled-agent-2.0.0-a3e161.json \ No newline at end of file diff --git a/openapi/sled-agent/sled-agent-3.0.0-f44f77.json b/openapi/sled-agent/sled-agent-3.0.0-f44f77.json deleted file mode 100644 index 88213e38e1d..00000000000 --- a/openapi/sled-agent/sled-agent-3.0.0-f44f77.json +++ /dev/null @@ -1,8376 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Sled Agent API", - "description": "API for interacting with individual sleds", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "3.0.0" - }, - "paths": { - "/artifacts": { - "get": { - "operationId": "artifact_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactListResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}": { - "put": { - "operationId": "artifact_put", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactPutResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}/copy-from-depot": { - "post": { - "operationId": "artifact_copy_from_depot", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotBody" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts-config": { - "get": { - "operationId": "artifact_config_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "artifact_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/bootstore/status": { - "get": { - "summary": "Get the internal state of the local bootstore node", - "operationId": "bootstore_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BootstoreStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/debug/switch-zone-policy": { - "get": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.", - "operationId": "debug_operator_switch_zone_policy_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.\n\nSetting the switch zone policy is asynchronous and inherently racy with the standard process of starting the switch zone. If the switch zone is in the process of being started or stopped when this policy is changed, the new policy may not take effect until that transition completes.", - "operationId": "debug_operator_switch_zone_policy_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/disks/{disk_id}": { - "put": { - "operationId": "disk_put", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskRuntimeState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/eip-gateways": { - "put": { - "summary": "Update per-NIC IP address <-> internet gateway mappings.", - "operationId": "set_eip_gateways", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIpGatewayMap" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/inventory": { - "get": { - "summary": "Fetch basic information about this sled", - "operationId": "inventory", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Inventory" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/network-bootstore-config": { - "get": { - "summary": "This API endpoint is only reading the local sled agent's view of the", - "description": "bootstore. The boostore is a distributed data store that is eventually consistent. Reads from individual nodes may not represent the latest state.", - "operationId": "read_network_bootstore_config_cache", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "write_network_bootstore_config", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/omicron-config": { - "put": { - "operationId": "omicron_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OmicronSledConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-identifiers": { - "get": { - "summary": "Fetch sled identifiers", - "operationId": "sled_identifiers", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledIdentifiers" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-role": { - "get": { - "operationId": "sled_role_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledRole" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sleds": { - "put": { - "summary": "Add a sled to a rack that was already initialized via RSS", - "operationId": "sled_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddSledRequest" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/dladm-info": { - "get": { - "operationId": "support_dladm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/health-check": { - "get": { - "operationId": "support_health_check", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/ipadm-info": { - "get": { - "operationId": "support_ipadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/logs/download/{zone}": { - "get": { - "summary": "This endpoint returns a zip file of a zone's logs organized by service.", - "operationId": "support_logs_download", - "parameters": [ - { - "in": "path", - "name": "zone", - "description": "The zone for which one would like to collect logs for", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "max_rotated", - "description": "The max number of rotated logs to include in the final support bundle", - "required": true, - "schema": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support/logs/zones": { - "get": { - "summary": "This endpoint returns a list of known zones on a sled that have service", - "description": "logs that can be collected into a support bundle.", - "operationId": "support_logs", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/nvmeadm-info": { - "get": { - "operationId": "support_nvmeadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pargs-info": { - "get": { - "operationId": "support_pargs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pfiles-info": { - "get": { - "operationId": "support_pfiles_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pstack-info": { - "get": { - "operationId": "support_pstack_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zfs-info": { - "get": { - "operationId": "support_zfs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zoneadm-info": { - "get": { - "operationId": "support_zoneadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zpool-info": { - "get": { - "operationId": "support_zpool_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}": { - "get": { - "summary": "List all support bundles within a particular dataset", - "operationId": "support_bundle_list", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SupportBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}": { - "post": { - "summary": "Starts creation of a support bundle within a particular dataset", - "description": "Callers should transfer chunks of the bundle with \"support_bundle_transfer\", and then call \"support_bundle_finalize\" once the bundle has finished transferring.\n\nIf a support bundle was previously created without being finalized successfully, this endpoint will reset the state.\n\nIf a support bundle was previously created and finalized successfully, this endpoint will return metadata indicating that it already exists.", - "operationId": "support_bundle_start_creation", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a support bundle from a particular dataset", - "operationId": "support_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download": { - "get": { - "summary": "Fetch a support bundle from a particular dataset", - "operationId": "support_bundle_download", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a support bundle from a particular dataset", - "operationId": "support_bundle_head", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download/{file}": { - "get": { - "summary": "Fetch a file within a support bundle from a particular dataset", - "operationId": "support_bundle_download_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a file within a support bundle from a particular dataset", - "operationId": "support_bundle_head_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/finalize": { - "post": { - "summary": "Finalizes the creation of a support bundle", - "description": "If the requested hash matched the bundle, the bundle is created. Otherwise, an error is returned.", - "operationId": "support_bundle_finalize", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - }, - { - "in": "query", - "name": "hash", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/index": { - "get": { - "summary": "Fetch the index (list of files within a support bundle)", - "operationId": "support_bundle_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about the list of files within a support bundle", - "operationId": "support_bundle_head_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/transfer": { - "put": { - "summary": "Transfers a chunk of a support bundle within a particular dataset", - "operationId": "support_bundle_transfer", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - }, - { - "in": "query", - "name": "offset", - "required": true, - "schema": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/switch-ports": { - "post": { - "operationId": "uplink_ensure", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPorts" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v2p": { - "get": { - "summary": "List v2p mappings present on sled", - "operationId": "list_v2p", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_VirtualNetworkInterfaceHost", - "type": "array", - "items": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Create a mapping from a virtual NIC to a physical host", - "operationId": "set_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a mapping from a virtual NIC to a physical host", - "operationId": "del_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}": { - "put": { - "operationId": "vmm_register", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_unregister", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmUnregisterResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/disks/{disk_id}/snapshot": { - "post": { - "summary": "Take a snapshot of a disk that is attached to an instance", - "operationId": "vmm_issue_disk_snapshot_request", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/external-ip": { - "put": { - "operationId": "vmm_put_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_delete_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/state": { - "get": { - "operationId": "vmm_get_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "vmm_put_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc/{vpc_id}/firewall/rules": { - "put": { - "operationId": "vpc_firewall_rules_put", - "parameters": [ - { - "in": "path", - "name": "vpc_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRulesEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc-routes": { - "get": { - "summary": "Get the current versions of VPC routing rules.", - "operationId": "list_vpc_routes", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteState", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteState" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update VPC routing rules.", - "operationId": "set_vpc_routes", - "requestBody": { - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteSet", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteSet" - } - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones": { - "get": { - "summary": "List the zones that are currently managed by the sled agent.", - "operationId": "zones_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup": { - "post": { - "summary": "Trigger a zone bundle cleanup.", - "operationId": "zone_bundle_cleanup", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_CleanupCount", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/CleanupCount" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/context": { - "get": { - "summary": "Return context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContext" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContextUpdate" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/utilization": { - "get": { - "summary": "Return utilization information about all zone bundles.", - "operationId": "zone_bundle_utilization", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_BundleUtilization", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/BundleUtilization" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles": { - "get": { - "summary": "List all zone bundles that exist, even for now-deleted zones.", - "operationId": "zone_bundle_list_all", - "parameters": [ - { - "in": "query", - "name": "filter", - "description": "An optional substring used to filter zone bundles.", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}": { - "get": { - "summary": "List the zone bundles that are available for a running zone.", - "operationId": "zone_bundle_list", - "parameters": [ - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}/{bundle_id}": { - "get": { - "summary": "Fetch the binary content of a single zone bundle.", - "operationId": "zone_bundle_get", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a zone bundle.", - "operationId": "zone_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "AddSledRequest": { - "description": "A request to Add a given sled after rack initialization has occurred", - "type": "object", - "properties": { - "sled_id": { - "$ref": "#/components/schemas/BaseboardId" - }, - "start_request": { - "$ref": "#/components/schemas/StartSledAgentRequest" - } - }, - "required": [ - "sled_id", - "start_request" - ] - }, - "ArtifactConfig": { - "type": "object", - "properties": { - "artifacts": { - "type": "array", - "items": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "uniqueItems": true - }, - "generation": { - "$ref": "#/components/schemas/Generation" - } - }, - "required": [ - "artifacts", - "generation" - ] - }, - "ArtifactCopyFromDepotBody": { - "type": "object", - "properties": { - "depot_base_url": { - "type": "string" - } - }, - "required": [ - "depot_base_url" - ] - }, - "ArtifactCopyFromDepotResponse": { - "type": "object" - }, - "ArtifactListResponse": { - "type": "object", - "properties": { - "generation": { - "$ref": "#/components/schemas/Generation" - }, - "list": { - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - }, - "required": [ - "generation", - "list" - ] - }, - "ArtifactPutResponse": { - "type": "object", - "properties": { - "datasets": { - "description": "The number of valid M.2 artifact datasets we found on the sled. There is typically one of these datasets for each functional M.2.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "successful_writes": { - "description": "The number of valid writes to the M.2 artifact datasets. This should be less than or equal to the number of artifact datasets.", - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "required": [ - "datasets", - "successful_writes" - ] - }, - "Baseboard": { - "description": "Describes properties that should uniquely identify a Gimlet.", - "oneOf": [ - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "gimlet" - ] - } - }, - "required": [ - "identifier", - "model", - "revision", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "pc" - ] - } - }, - "required": [ - "identifier", - "model", - "type" - ] - } - ] - }, - "BaseboardId": { - "description": "A representation of a Baseboard ID as used in the inventory subsystem This type is essentially the same as a `Baseboard` except it doesn't have a revision or HW type (Gimlet, PC, Unknown).", - "type": "object", - "properties": { - "part_number": { - "description": "Oxide Part Number", - "type": "string" - }, - "serial_number": { - "description": "Serial number (unique for a given part number)", - "type": "string" - } - }, - "required": [ - "part_number", - "serial_number" - ] - }, - "BfdMode": { - "description": "BFD connection mode.", - "type": "string", - "enum": [ - "single_hop", - "multi_hop" - ] - }, - "BfdPeerConfig": { - "type": "object", - "properties": { - "detection_threshold": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "type": "string", - "format": "ip" - }, - "mode": { - "$ref": "#/components/schemas/BfdMode" - }, - "remote": { - "type": "string", - "format": "ip" - }, - "required_rx": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "$ref": "#/components/schemas/SwitchLocation" - } - }, - "required": [ - "detection_threshold", - "mode", - "remote", - "required_rx", - "switch" - ] - }, - "BgpConfig": { - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number for the BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "checker": { - "nullable": true, - "description": "Checker to apply to incoming messages.", - "default": null, - "type": "string" - }, - "originate": { - "description": "The set of prefixes for the BGP router to originate.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - }, - "shaper": { - "nullable": true, - "description": "Shaper to apply to outgoing messages.", - "default": null, - "type": "string" - } - }, - "required": [ - "asn", - "originate" - ] - }, - "BgpPeerConfig": { - "type": "object", - "properties": { - "addr": { - "description": "Address of the peer.", - "type": "string", - "format": "ipv4" - }, - "allowed_export": { - "description": "Define export policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "allowed_import": { - "description": "Define import policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "asn": { - "description": "The autonomous system number of the router the peer belongs to.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "communities": { - "description": "Include the provided communities in updates sent to the peer.", - "default": [], - "type": "array", - "items": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "connect_retry": { - "nullable": true, - "description": "The interval in seconds between peer connection retry attempts.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "delay_open": { - "nullable": true, - "description": "How long to delay sending open messages to a peer. In seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "enforce_first_as": { - "description": "Enforce that the first AS in paths received from this peer is the peer's AS.", - "default": false, - "type": "boolean" - }, - "hold_time": { - "nullable": true, - "description": "How long to keep a session alive without a keepalive in seconds. Defaults to 6.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "idle_hold_time": { - "nullable": true, - "description": "How long to keep a peer in idle after a state machine reset in seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "keepalive": { - "nullable": true, - "description": "The interval to send keepalive messages at.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "local_pref": { - "nullable": true, - "description": "Apply a local preference to routes received from this peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "md5_auth_key": { - "nullable": true, - "description": "Use the given key for TCP-MD5 authentication with the peer.", - "default": null, - "type": "string" - }, - "min_ttl": { - "nullable": true, - "description": "Require messages from a peer have a minimum IP time to live field.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "multi_exit_discriminator": { - "nullable": true, - "description": "Apply the provided multi-exit discriminator (MED) updates sent to the peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "port": { - "description": "Switch port the peer is reachable on.", - "type": "string" - }, - "remote_asn": { - "nullable": true, - "description": "Require that a peer has a specified ASN.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "Associate a VLAN ID with a BGP peer session.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "addr", - "asn", - "port" - ] - }, - "BlobStorageBackend": { - "description": "A storage backend for a disk whose initial contents are given explicitly by the specification.", - "type": "object", - "properties": { - "base64": { - "description": "The disk's initial contents, encoded as a base64 string.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - } - }, - "required": [ - "base64", - "readonly" - ], - "additionalProperties": false - }, - "Board": { - "description": "A VM's mainboard.", - "type": "object", - "properties": { - "chipset": { - "description": "The chipset to expose to guest software.", - "allOf": [ - { - "$ref": "#/components/schemas/Chipset" - } - ] - }, - "cpuid": { - "nullable": true, - "description": "The CPUID values to expose to the guest. If `None`, bhyve will derive default values from the host's CPUID values.", - "allOf": [ - { - "$ref": "#/components/schemas/Cpuid" - } - ] - }, - "cpus": { - "description": "The number of virtual logical processors attached to this VM.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "guest_hv_interface": { - "description": "The hypervisor platform to expose to the guest. The default is a bhyve-compatible interface with no additional features.\n\nFor compatibility with older versions of Propolis, this field is only serialized if it specifies a non-default interface.", - "allOf": [ - { - "$ref": "#/components/schemas/GuestHypervisorInterface" - } - ] - }, - "memory_mb": { - "description": "The amount of guest RAM attached to this VM.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "chipset", - "cpus", - "memory_mb" - ], - "additionalProperties": false - }, - "BootImageHeader": { - "type": "object", - "properties": { - "data_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "flags": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "image_name": { - "type": "string" - }, - "image_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "sha256": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 32, - "maxItems": 32 - }, - "target_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "data_size", - "flags", - "image_name", - "image_size", - "sha256", - "target_size" - ] - }, - "BootOrderEntry": { - "description": "An entry in the boot order stored in a [`BootSettings`] component.", - "type": "object", - "properties": { - "id": { - "description": "The ID of another component in the spec that Propolis should try to boot from.\n\nCurrently, only disk device components are supported.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - } - }, - "required": [ - "id" - ] - }, - "BootPartitionContents": { - "type": "object", - "properties": { - "boot_disk": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/M2Slot" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/M2Slot" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_a": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_b": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "boot_disk", - "slot_a", - "slot_b" - ] - }, - "BootPartitionDetails": { - "type": "object", - "properties": { - "artifact_hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "artifact_size": { - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "header": { - "$ref": "#/components/schemas/BootImageHeader" - } - }, - "required": [ - "artifact_hash", - "artifact_size", - "header" - ] - }, - "BootSettings": { - "description": "Settings supplied to the guest's firmware image that specify the order in which it should consider its options when selecting a device to try to boot from.", - "type": "object", - "properties": { - "order": { - "description": "An ordered list of components to attempt to boot from.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BootOrderEntry" - } - } - }, - "required": [ - "order" - ], - "additionalProperties": false - }, - "BootstoreStatus": { - "type": "object", - "properties": { - "accepted_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "established_connections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EstablishedConnection" - } - }, - "fsm_ledger_generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "fsm_state": { - "type": "string" - }, - "negotiating_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "network_config_ledger_generation": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "peers": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - } - }, - "required": [ - "accepted_connections", - "established_connections", - "fsm_ledger_generation", - "fsm_state", - "negotiating_connections", - "peers" - ] - }, - "BundleUtilization": { - "description": "The portion of a debug dataset used for zone bundles.", - "type": "object", - "properties": { - "bytes_available": { - "description": "The total number of bytes available for zone bundles.\n\nThis is `dataset_quota` multiplied by the context's storage limit.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes_used": { - "description": "Total bundle usage, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "dataset_quota": { - "description": "The total dataset quota, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bytes_available", - "bytes_used", - "dataset_quota" - ] - }, - "ByteCount": { - "description": "Byte count to express memory or storage capacity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "Chipset": { - "description": "A kind of virtual chipset.", - "oneOf": [ - { - "description": "An Intel 440FX-compatible chipset.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i440_fx" - ] - }, - "value": { - "$ref": "#/components/schemas/I440Fx" - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "CleanupContext": { - "description": "Context provided for the zone bundle cleanup task.", - "type": "object", - "properties": { - "period": { - "description": "The period on which automatic checks and cleanup is performed.", - "allOf": [ - { - "$ref": "#/components/schemas/CleanupPeriod" - } - ] - }, - "priority": { - "description": "The priority ordering for keeping old bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "description": "The limit on the dataset quota available for zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/StorageLimit" - } - ] - } - }, - "required": [ - "period", - "priority", - "storage_limit" - ] - }, - "CleanupContextUpdate": { - "description": "Parameters used to update the zone bundle cleanup context.", - "type": "object", - "properties": { - "period": { - "nullable": true, - "description": "The new period on which automatic cleanups are run.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "priority": { - "nullable": true, - "description": "The priority ordering for preserving old zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "nullable": true, - "description": "The new limit on the underlying dataset quota allowed for bundles.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "CleanupCount": { - "description": "The count of bundles / bytes removed during a cleanup operation.", - "type": "object", - "properties": { - "bundles": { - "description": "The number of bundles removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes": { - "description": "The number of bytes removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bundles", - "bytes" - ] - }, - "CleanupPeriod": { - "description": "A period on which bundles are automatically cleaned up.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "ComponentV0": { - "oneOf": [ - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioDisk" - }, - "type": { - "type": "string", - "enum": [ - "virtio_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/NvmeDisk" - }, - "type": { - "type": "string", - "enum": [ - "nvme_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNic" - }, - "type": { - "type": "string", - "enum": [ - "virtio_nic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SerialPort" - }, - "type": { - "type": "string", - "enum": [ - "serial_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/PciPciBridge" - }, - "type": { - "type": "string", - "enum": [ - "pci_pci_bridge" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/QemuPvpanic" - }, - "type": { - "type": "string", - "enum": [ - "qemu_pvpanic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BootSettings" - }, - "type": { - "type": "string", - "enum": [ - "boot_settings" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPciPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_pci_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuP9" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_p9" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/P9fs" - }, - "type": { - "type": "string", - "enum": [ - "p9fs" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/MigrationFailureInjector" - }, - "type": { - "type": "string", - "enum": [ - "migration_failure_injector" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/CrucibleStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "crucible_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/FileStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "file_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BlobStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "blob_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "virtio_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/DlpiNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "dlpi_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - } - ] - }, - "CompressionAlgorithm": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "on" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "off" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "gzip" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "level": { - "$ref": "#/components/schemas/GzipLevel" - }, - "type": { - "type": "string", - "enum": [ - "gzip_n" - ] - } - }, - "required": [ - "level", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lz4" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lzjb" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "zle" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "ConfigReconcilerInventory": { - "description": "Describes the last attempt made by the sled-agent-config-reconciler to reconcile the current sled config against the actual state of the sled.", - "type": "object", - "properties": { - "boot_partitions": { - "$ref": "#/components/schemas/BootPartitionContents" - }, - "datasets": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "external_disks": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "last_reconciled_config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "orphaned_datasets": { - "title": "IdOrdMap", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/OrphanedDataset" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/OrphanedDataset" - }, - "uniqueItems": true - }, - "remove_mupdate_override": { - "nullable": true, - "description": "The result of removing the mupdate override file on disk.\n\n`None` if `remove_mupdate_override` was not provided in the sled config.", - "allOf": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideInventory" - } - ] - }, - "zones": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - } - }, - "required": [ - "boot_partitions", - "datasets", - "external_disks", - "last_reconciled_config", - "orphaned_datasets", - "zones" - ] - }, - "ConfigReconcilerInventoryResult": { - "oneOf": [ - { - "type": "object", - "properties": { - "result": { - "type": "string", - "enum": [ - "ok" - ] - } - }, - "required": [ - "result" - ] - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "result": { - "type": "string", - "enum": [ - "err" - ] - } - }, - "required": [ - "message", - "result" - ] - } - ] - }, - "ConfigReconcilerInventoryStatus": { - "description": "Status of the sled-agent-config-reconciler task.", - "oneOf": [ - { - "description": "The reconciler task has not yet run for the first time since sled-agent started.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "not_yet_run" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The reconciler task is actively running.", - "type": "object", - "properties": { - "config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "running_for": { - "$ref": "#/components/schemas/Duration" - }, - "started_at": { - "type": "string", - "format": "date-time" - }, - "status": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "config", - "running_for", - "started_at", - "status" - ] - }, - { - "description": "The reconciler task is currently idle, but previously did complete a reconciliation attempt.\n\nThis variant does not include the `OmicronSledConfig` used in the last attempt, because that's always available via [`ConfigReconcilerInventory::last_reconciled_config`].", - "type": "object", - "properties": { - "completed_at": { - "type": "string", - "format": "date-time" - }, - "ran_for": { - "$ref": "#/components/schemas/Duration" - }, - "status": { - "type": "string", - "enum": [ - "idle" - ] - } - }, - "required": [ - "completed_at", - "ran_for", - "status" - ] - } - ] - }, - "Cpuid": { - "description": "A set of CPUID values to expose to a guest.", - "type": "object", - "properties": { - "entries": { - "description": "A list of CPUID leaves/subleaves and their associated values.\n\nPropolis servers require that each entry's `leaf` be unique and that it falls in either the \"standard\" (0 to 0xFFFF) or \"extended\" (0x8000_0000 to 0x8000_FFFF) function ranges, since these are the only valid input ranges currently defined by Intel and AMD. See the Intel 64 and IA-32 Architectures Software Developer's Manual (June 2024) Table 3-17 and the AMD64 Architecture Programmer's Manual (March 2024) Volume 3's documentation of the CPUID instruction.", - "type": "array", - "items": { - "$ref": "#/components/schemas/CpuidEntry" - } - }, - "vendor": { - "description": "The CPU vendor to emulate.\n\nCPUID leaves in the extended range (0x8000_0000 to 0x8000_FFFF) have vendor-defined semantics. Propolis uses this value to determine these semantics when deciding whether it needs to specialize the supplied template values for these leaves.", - "allOf": [ - { - "$ref": "#/components/schemas/CpuidVendor" - } - ] - } - }, - "required": [ - "entries", - "vendor" - ], - "additionalProperties": false - }, - "CpuidEntry": { - "description": "A full description of a CPUID leaf/subleaf and the values it produces.", - "type": "object", - "properties": { - "eax": { - "description": "The value to return in eax.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ebx": { - "description": "The value to return in ebx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ecx": { - "description": "The value to return in ecx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "edx": { - "description": "The value to return in edx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "leaf": { - "description": "The leaf (function) number for this entry.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "subleaf": { - "nullable": true, - "description": "The subleaf (index) number for this entry, if it uses subleaves.", - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "eax", - "ebx", - "ecx", - "edx", - "leaf" - ], - "additionalProperties": false - }, - "CpuidVendor": { - "description": "A CPU vendor to use when interpreting the meanings of CPUID leaves in the extended ID range (0x80000000 to 0x8000FFFF).", - "type": "string", - "enum": [ - "amd", - "intel" - ] - }, - "CrucibleStorageBackend": { - "description": "A Crucible storage backend.", - "type": "object", - "properties": { - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "request_json": { - "description": "A serialized `[crucible_client_types::VolumeConstructionRequest]`. This is stored in serialized form so that breaking changes to the definition of a `VolumeConstructionRequest` do not inadvertently break instance spec deserialization.\n\nWhen using a spec to initialize a new instance, the spec author must ensure this request is well-formed and can be deserialized by the version of `crucible_client_types` used by the target Propolis.", - "type": "string" - } - }, - "required": [ - "readonly", - "request_json" - ], - "additionalProperties": false - }, - "DatasetConfig": { - "description": "Configuration information necessary to request a single dataset.\n\nThese datasets are tracked directly by Nexus.", - "type": "object", - "properties": { - "compression": { - "description": "The compression mode to be used by the dataset", - "allOf": [ - { - "$ref": "#/components/schemas/CompressionAlgorithm" - } - ] - }, - "id": { - "description": "The UUID of the dataset being requested", - "allOf": [ - { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - ] - }, - "name": { - "description": "The dataset's name", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetName" - } - ] - }, - "quota": { - "nullable": true, - "description": "The upper bound on the amount of storage used by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "reservation": { - "nullable": true, - "description": "The lower bound on the amount of storage usable by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "compression", - "id", - "name" - ] - }, - "DatasetKind": { - "description": "The kind of dataset. See the `DatasetKind` enum in omicron-common for possible values.", - "type": "string" - }, - "DatasetName": { - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/DatasetKind" - }, - "pool_name": { - "$ref": "#/components/schemas/ZpoolName" - } - }, - "required": [ - "kind", - "pool_name" - ] - }, - "DhcpConfig": { - "description": "DHCP configuration for a port\n\nNot present here: Hostname (DHCPv4 option 12; used in DHCPv6 option 39); we use `InstanceRuntimeState::hostname` for this value.", - "type": "object", - "properties": { - "dns_servers": { - "description": "DNS servers to send to the instance\n\n(DHCPv4 option 6; DHCPv6 option 23)", - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - }, - "host_domain": { - "nullable": true, - "description": "DNS zone this instance's hostname belongs to (e.g. the `project.example` part of `instance1.project.example`)\n\n(DHCPv4 option 15; used in DHCPv6 option 39)", - "type": "string" - }, - "search_domains": { - "description": "DNS search domains\n\n(DHCPv4 option 119; DHCPv6 option 24)", - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "dns_servers", - "search_domains" - ] - }, - "DiskEnsureBody": { - "description": "Sent from to a sled agent to establish the runtime state of a Disk", - "type": "object", - "properties": { - "initial_runtime": { - "description": "Last runtime state of the Disk known to Nexus (used if the agent has never seen this Disk before).", - "allOf": [ - { - "$ref": "#/components/schemas/DiskRuntimeState" - } - ] - }, - "target": { - "description": "requested runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskStateRequested" - } - ] - } - }, - "required": [ - "initial_runtime", - "target" - ] - }, - "DiskIdentity": { - "description": "Uniquely identifies a disk.", - "type": "object", - "properties": { - "model": { - "type": "string" - }, - "serial": { - "type": "string" - }, - "vendor": { - "type": "string" - } - }, - "required": [ - "model", - "serial", - "vendor" - ] - }, - "DiskRuntimeState": { - "description": "Runtime state of the Disk, which includes its attach state and some minimal metadata", - "type": "object", - "properties": { - "disk_state": { - "description": "runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskState" - } - ] - }, - "gen": { - "description": "generation number for this state", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "time_updated": { - "description": "timestamp for this information", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "disk_state", - "gen", - "time_updated" - ] - }, - "DiskState": { - "description": "State of a Disk", - "oneOf": [ - { - "description": "Disk is being initialized", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "creating" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready but detached from any Instance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready to receive blocks from an external source", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "import_ready" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from a URL", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_url" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from bulk writes", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_bulk_writes" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being finalized to state Detached", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "finalizing" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is undergoing maintenance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "maintenance" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is being detached from the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "detaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk has been destroyed", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is unavailable", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskStateRequested": { - "description": "Used to request a Disk state change", - "oneOf": [ - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskVariant": { - "type": "string", - "enum": [ - "U2", - "M2" - ] - }, - "DlpiNetworkBackend": { - "description": "A network backend associated with a DLPI VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "Duration": { - "type": "object", - "properties": { - "nanos": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "secs": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "nanos", - "secs" - ] - }, - "EarlyNetworkConfig": { - "description": "Network configuration required to bring up the control plane\n\nThe fields in this structure are those from [`crate::rack_init::RackInitializeRequest`] necessary for use beyond RSS. This is just for the initial rack configuration and cold boot purposes. Updates come from Nexus.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/EarlyNetworkConfigBody" - }, - "generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "EarlyNetworkConfigBody": { - "description": "This is the actual configuration of EarlyNetworking.\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "ntp_servers": { - "description": "The external NTP server addresses.", - "type": "array", - "items": { - "type": "string" - } - }, - "rack_network_config": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RackNetworkConfigV2" - } - ] - } - }, - "required": [ - "ntp_servers" - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "EstablishedConnection": { - "type": "object", - "properties": { - "addr": { - "type": "string" - }, - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - } - }, - "required": [ - "addr", - "baseboard" - ] - }, - "ExternalIpGatewayMap": { - "description": "Per-NIC mappings from external IP addresses to the Internet Gateways which can choose them as a source.", - "type": "object", - "properties": { - "mappings": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - } - } - } - }, - "required": [ - "mappings" - ] - }, - "FileStorageBackend": { - "description": "A storage backend backed by a file in the host system's file system.", - "type": "object", - "properties": { - "block_size": { - "description": "Block size of the backend", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "path": { - "description": "A path to a file that backs a disk.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "workers": { - "nullable": true, - "description": "Optional worker threads for the file backend, exposed for testing only.", - "type": "integer", - "format": "uint", - "minimum": 1 - } - }, - "required": [ - "block_size", - "path", - "readonly" - ], - "additionalProperties": false - }, - "Generation": { - "description": "Generation numbers stored in the database, used for optimistic concurrency control", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "GuestHypervisorInterface": { - "description": "A hypervisor interface to expose to the guest.", - "oneOf": [ - { - "description": "Expose a bhyve-like interface (\"bhyve bhyve \" as the hypervisor ID in leaf 0x4000_0000 and no additional leaves or features).", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bhyve" - ] - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "description": "Expose a Hyper-V-compatible hypervisor interface with the supplied features enabled.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "hyper_v" - ] - }, - "value": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HyperVFeatureFlag" - }, - "uniqueItems": true - } - }, - "required": [ - "features" - ], - "additionalProperties": false - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "GzipLevel": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "HostIdentifier": { - "description": "A `HostIdentifier` represents either an IP host or network (v4 or v6), or an entire VPC (identified by its VNI). It is used in firewall rule host filters.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "HostPhase2DesiredContents": { - "description": "Describes the desired contents of a host phase 2 slot (i.e., the boot partition on one of the internal M.2 drives).", - "oneOf": [ - { - "description": "Do not change the current contents.\n\nWe use this value when we've detected a sled has been mupdated (and we don't want to overwrite phase 2 images until we understand how to recover from that mupdate) and as the default value when reading an [`OmicronSledConfig`] that was ledgered before this concept existed.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "current_contents" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Set the phase 2 slot to the given artifact.\n\nThe artifact will come from an unpacked and distributed TUF repo.", - "type": "object", - "properties": { - "hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "type": { - "type": "string", - "enum": [ - "artifact" - ] - } - }, - "required": [ - "hash", - "type" - ] - } - ] - }, - "HostPhase2DesiredSlots": { - "description": "Describes the desired contents for both host phase 2 slots.", - "type": "object", - "properties": { - "slot_a": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - }, - "slot_b": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - } - }, - "required": [ - "slot_a", - "slot_b" - ] - }, - "HostPortConfig": { - "type": "object", - "properties": { - "addrs": { - "description": "IP Address and prefix (e.g., `192.168.0.1/16`) to apply to switchport (must be in infra_ip pool). May also include an optional VLAN ID.", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "lldp": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Switchport to use for external connectivity", - "type": "string" - }, - "tx_eq": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - } - }, - "required": [ - "addrs", - "port" - ] - }, - "Hostname": { - "title": "An RFC-1035-compliant hostname", - "description": "A hostname identifies a host on a network, and is usually a dot-delimited sequence of labels, where each label contains only letters, digits, or the hyphen. See RFCs 1035 and 952 for more details.", - "type": "string", - "pattern": "^([a-zA-Z0-9]+[a-zA-Z0-9\\-]*(? for background.", - "oneOf": [ - { - "description": "Start the switch zone if a switch is present.\n\nThis is the default policy.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "start_if_switch_present" - ] - } - }, - "required": [ - "policy" - ] - }, - { - "description": "Even if a switch zone is present, stop the switch zone.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "stop_despite_switch_presence" - ] - } - }, - "required": [ - "policy" - ] - } - ] - }, - "OrphanedDataset": { - "type": "object", - "properties": { - "available": { - "$ref": "#/components/schemas/ByteCount" - }, - "id": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - ] - }, - "mounted": { - "type": "boolean" - }, - "name": { - "$ref": "#/components/schemas/DatasetName" - }, - "reason": { - "type": "string" - }, - "used": { - "$ref": "#/components/schemas/ByteCount" - } - }, - "required": [ - "available", - "mounted", - "name", - "reason", - "used" - ] - }, - "P9fs": { - "description": "Describes a filesystem to expose through a P9 device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "chunk_size": { - "description": "The chunk size to use in the 9P protocol. Vanilla Helios images should use 8192. Falcon Helios base images and Linux can use up to 65536.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach the guest to this P9 filesystem.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - }, - "source": { - "description": "The host source path to mount into the guest.", - "type": "string" - }, - "target": { - "description": "The 9P target filesystem tag.", - "type": "string" - } - }, - "required": [ - "chunk_size", - "pci_path", - "source", - "target" - ], - "additionalProperties": false - }, - "PciPath": { - "description": "A PCI bus/device/function tuple.", - "type": "object", - "properties": { - "bus": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "device": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "function": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "bus", - "device", - "function" - ] - }, - "PciPciBridge": { - "description": "A PCI-PCI bridge.", - "type": "object", - "properties": { - "downstream_bus": { - "description": "The logical bus number of this bridge's downstream bus. Other devices may use this bus number in their PCI paths to indicate they should be attached to this bridge's bus.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach this bridge.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "downstream_bus", - "pci_path" - ], - "additionalProperties": false - }, - "PortConfigV2": { - "type": "object", - "properties": { - "addresses": { - "description": "This port's addresses and optional vlan IDs", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "autoneg": { - "description": "Whether or not to set autonegotiation", - "default": false, - "type": "boolean" - }, - "bgp_peers": { - "description": "BGP peers on this port", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeerConfig" - } - }, - "lldp": { - "nullable": true, - "description": "LLDP configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Nmae of the port this config applies to.", - "type": "string" - }, - "routes": { - "description": "The set of routes associated with this port.", - "type": "array", - "items": { - "$ref": "#/components/schemas/RouteConfig" - } - }, - "switch": { - "description": "Switch the port belongs to.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - }, - "tx_eq": { - "nullable": true, - "description": "TX-EQ configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - }, - "uplink_port_fec": { - "nullable": true, - "description": "Port forward error correction type.", - "allOf": [ - { - "$ref": "#/components/schemas/PortFec" - } - ] - }, - "uplink_port_speed": { - "description": "Port speed.", - "allOf": [ - { - "$ref": "#/components/schemas/PortSpeed" - } - ] - } - }, - "required": [ - "addresses", - "bgp_peers", - "port", - "routes", - "switch", - "uplink_port_speed" - ] - }, - "PortFec": { - "description": "Switchport FEC options", - "type": "string", - "enum": [ - "firecode", - "none", - "rs" - ] - }, - "PortSpeed": { - "description": "Switchport Speed options", - "type": "string", - "enum": [ - "speed0_g", - "speed1_g", - "speed10_g", - "speed25_g", - "speed40_g", - "speed50_g", - "speed100_g", - "speed200_g", - "speed400_g" - ] - }, - "PriorityDimension": { - "description": "A dimension along with bundles can be sorted, to determine priority.", - "oneOf": [ - { - "description": "Sorting by time, with older bundles with lower priority.", - "type": "string", - "enum": [ - "time" - ] - }, - { - "description": "Sorting by the cause for creating the bundle.", - "type": "string", - "enum": [ - "cause" - ] - } - ] - }, - "PriorityOrder": { - "description": "The priority order for bundles during cleanup.\n\nBundles are sorted along the dimensions in [`PriorityDimension`], with each dimension appearing exactly once. During cleanup, lesser-priority bundles are pruned first, to maintain the dataset quota. Note that bundles are sorted by each dimension in the order in which they appear, with each dimension having higher priority than the next.", - "type": "array", - "items": { - "$ref": "#/components/schemas/PriorityDimension" - }, - "minItems": 2, - "maxItems": 2 - }, - "QemuPvpanic": { - "type": "object", - "properties": { - "enable_isa": { - "description": "Enable the QEMU PVPANIC ISA bus device (I/O port 0x505).", - "type": "boolean" - } - }, - "required": [ - "enable_isa" - ], - "additionalProperties": false - }, - "RackNetworkConfigV2": { - "description": "Initial network configuration", - "type": "object", - "properties": { - "bfd": { - "description": "BFD configuration for connecting the rack to external networks", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/BfdPeerConfig" - } - }, - "bgp": { - "description": "BGP configurations for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpConfig" - } - }, - "infra_ip_first": { - "description": "First ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "infra_ip_last": { - "description": "Last ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "ports": { - "description": "Uplinks for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/PortConfigV2" - } - }, - "rack_subnet": { - "$ref": "#/components/schemas/Ipv6Net" - } - }, - "required": [ - "bgp", - "infra_ip_first", - "infra_ip_last", - "ports", - "rack_subnet" - ] - }, - "RemoveMupdateOverrideBootSuccessInventory": { - "description": "Status of removing the mupdate override on the boot disk.", - "oneOf": [ - { - "description": "The mupdate override was successfully removed.", - "type": "string", - "enum": [ - "removed" - ] - }, - { - "description": "No mupdate override was found.\n\nThis is considered a success for idempotency reasons.", - "type": "string", - "enum": [ - "no_override" - ] - } - ] - }, - "RemoveMupdateOverrideInventory": { - "description": "Status of removing the mupdate override in the inventory.", - "type": "object", - "properties": { - "boot_disk_result": { - "description": "The result of removing the mupdate override on the boot disk.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_message": { - "description": "What happened on non-boot disks.\n\nWe aren't modeling this out in more detail, because we plan to not try and keep ledgered data in sync across both disks in the future.", - "type": "string" - } - }, - "required": [ - "boot_disk_result", - "non_boot_message" - ] - }, - "ResolvedVpcFirewallRule": { - "description": "VPC firewall rule after object name resolution has been performed by Nexus", - "type": "object", - "properties": { - "action": { - "$ref": "#/components/schemas/VpcFirewallRuleAction" - }, - "direction": { - "$ref": "#/components/schemas/VpcFirewallRuleDirection" - }, - "filter_hosts": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/HostIdentifier" - }, - "uniqueItems": true - }, - "filter_ports": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/L4PortRange" - } - }, - "filter_protocols": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleProtocol" - } - }, - "priority": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "status": { - "$ref": "#/components/schemas/VpcFirewallRuleStatus" - }, - "targets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NetworkInterface" - } - } - }, - "required": [ - "action", - "direction", - "priority", - "status", - "targets" - ] - }, - "ResolvedVpcRoute": { - "description": "A VPC route resolved into a concrete target.", - "type": "object", - "properties": { - "dest": { - "$ref": "#/components/schemas/IpNet" - }, - "target": { - "$ref": "#/components/schemas/RouterTarget" - } - }, - "required": [ - "dest", - "target" - ] - }, - "ResolvedVpcRouteSet": { - "description": "An updated set of routes for a given VPC and/or subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "routes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRoute" - }, - "uniqueItems": true - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id", - "routes" - ] - }, - "ResolvedVpcRouteState": { - "description": "Version information for routes on a given VPC subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id" - ] - }, - "RouteConfig": { - "type": "object", - "properties": { - "destination": { - "description": "The destination of the route.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "nexthop": { - "description": "The nexthop/gateway address.", - "type": "string", - "format": "ip" - }, - "rib_priority": { - "nullable": true, - "description": "The RIB priority (i.e. Admin Distance) associated with this route.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id associated with this route.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "destination", - "nexthop" - ] - }, - "RouterId": { - "description": "Identifier for a VPC and/or subnet.", - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/RouterKind" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "kind", - "vni" - ] - }, - "RouterKind": { - "description": "The scope of a set of VPC router rules.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "system" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "subnet": { - "$ref": "#/components/schemas/IpNet" - }, - "type": { - "type": "string", - "enum": [ - "custom" - ] - } - }, - "required": [ - "subnet", - "type" - ] - } - ] - }, - "RouterTarget": { - "description": "The target for a given router entry.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "drop" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "internet_gateway" - ] - }, - "value": { - "$ref": "#/components/schemas/InternetGatewayRouterTarget" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc_subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "RouterVersion": { - "description": "Information on the current parent router (and version) of a route set according to the control plane.", - "type": "object", - "properties": { - "router_id": { - "type": "string", - "format": "uuid" - }, - "version": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "router_id", - "version" - ] - }, - "SerialPort": { - "description": "A serial port device.", - "type": "object", - "properties": { - "num": { - "description": "The serial port number for this port.", - "allOf": [ - { - "$ref": "#/components/schemas/SerialPortNumber" - } - ] - } - }, - "required": [ - "num" - ], - "additionalProperties": false - }, - "SerialPortNumber": { - "description": "A serial port identifier, which determines what I/O ports a guest can use to access a port.", - "type": "string", - "enum": [ - "com1", - "com2", - "com3", - "com4" - ] - }, - "SledCpuFamily": { - "description": "Identifies the kind of CPU present on a sled, determined by reading CPUID.\n\nThis is intended to broadly support the control plane answering the question \"can I run this instance on that sled?\" given an instance with either no or some CPU platform requirement. It is not enough information for more precise placement questions - for example, is a CPU a high-frequency part or many-core part? We don't include Genoa here, but in that CPU family there are high frequency parts, many-core parts, and large-cache parts. To support those questions (or satisfactorily answer #8730) we would need to collect additional information and send it along.", - "oneOf": [ - { - "description": "The CPU vendor or its family number don't correspond to any of the known family variants.", - "type": "string", - "enum": [ - "unknown" - ] - }, - { - "description": "AMD Milan processors (or very close). Could be an actual Milan in a Gimlet, a close-to-Milan client Zen 3 part, or Zen 4 (for which Milan is the greatest common denominator).", - "type": "string", - "enum": [ - "amd_milan" - ] - }, - { - "description": "AMD Turin processors (or very close). Could be an actual Turin in a Cosmo, or a close-to-Turin client Zen 5 part.", - "type": "string", - "enum": [ - "amd_turin" - ] - }, - { - "description": "AMD Turin Dense processors. There are no \"Turin Dense-like\" CPUs unlike other cases, so this means a bona fide Zen 5c Turin Dense part.", - "type": "string", - "enum": [ - "amd_turin_dense" - ] - } - ] - }, - "SledDiagnosticsQueryOutput": { - "oneOf": [ - { - "type": "object", - "properties": { - "success": { - "type": "object", - "properties": { - "command": { - "description": "The command and its arguments.", - "type": "string" - }, - "exit_code": { - "nullable": true, - "description": "The exit code if one was present when the command exited.", - "type": "integer", - "format": "int32" - }, - "exit_status": { - "description": "The exit status of the command. This will be the exit code (if any) and exit reason such as from a signal.", - "type": "string" - }, - "stdio": { - "description": "Any stdout/stderr produced by the command.", - "type": "string" - } - }, - "required": [ - "command", - "exit_status", - "stdio" - ] - } - }, - "required": [ - "success" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "failure": { - "type": "object", - "properties": { - "error": { - "description": "The reason the command failed to execute.", - "type": "string" - } - }, - "required": [ - "error" - ] - } - }, - "required": [ - "failure" - ], - "additionalProperties": false - } - ] - }, - "SledIdentifiers": { - "description": "Identifiers for a single sled.\n\nThis is intended primarily to be used in timeseries, to identify sled from which metric data originates.", - "type": "object", - "properties": { - "model": { - "description": "Model name of the sled", - "type": "string" - }, - "rack_id": { - "description": "Control plane ID of the rack this sled is a member of", - "type": "string", - "format": "uuid" - }, - "revision": { - "description": "Revision number of the sled", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "serial": { - "description": "Serial number of the sled", - "type": "string" - }, - "sled_id": { - "description": "Control plane ID for the sled itself", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "model", - "rack_id", - "revision", - "serial", - "sled_id" - ] - }, - "SledRole": { - "description": "Describes the role of the sled within the rack.\n\nNote that this may change if the sled is physically moved within the rack.", - "oneOf": [ - { - "description": "The sled is a general compute sled.", - "type": "string", - "enum": [ - "gimlet" - ] - }, - { - "description": "The sled is attached to the network switch, and has additional responsibilities.", - "type": "string", - "enum": [ - "scrimlet" - ] - } - ] - }, - "SledVmmState": { - "description": "A wrapper type containing a sled's total knowledge of the state of a VMM.", - "type": "object", - "properties": { - "migration_in": { - "nullable": true, - "description": "The current state of any inbound migration to this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "migration_out": { - "nullable": true, - "description": "The state of any outbound migration from this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "vmm_state": { - "description": "The most recent state of the sled's VMM process.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmRuntimeState" - } - ] - } - }, - "required": [ - "vmm_state" - ] - }, - "SoftNpuP9": { - "description": "Describes a PCI device that shares host files with the guest using the P9 protocol.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPciPort": { - "description": "Describes a SoftNPU PCI device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPort": { - "description": "Describes a port in a SoftNPU emulated ASIC.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the port's associated DLPI backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "link_name": { - "description": "The data link name for this port.", - "type": "string" - } - }, - "required": [ - "backend_id", - "link_name" - ], - "additionalProperties": false - }, - "SourceNatConfig": { - "description": "An IP address and port range used for source NAT, i.e., making outbound network connections from guests or services.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used for source NAT, inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external address provided to the instance or service.", - "type": "string", - "format": "ip" - }, - "last_port": { - "description": "The last port used for source NAT, also inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "last_port" - ] - }, - "SpecKey": { - "description": "A key identifying a component in an instance spec.", - "oneOf": [ - { - "title": "uuid", - "allOf": [ - { - "type": "string", - "format": "uuid" - } - ] - }, - { - "title": "name", - "allOf": [ - { - "type": "string" - } - ] - } - ] - }, - "StartSledAgentRequest": { - "description": "Configuration information for launching a Sled Agent.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/StartSledAgentRequestBody" - }, - "generation": { - "description": "The current generation number of data as stored in CRDB.\n\nThe initial generation is set during RSS time and then only mutated by Nexus. For now, we don't actually anticipate mutating this data, but we leave open the possiblity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "StartSledAgentRequestBody": { - "description": "This is the actual app level data of `StartSledAgentRequest`\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "id": { - "description": "Uuid of the Sled Agent to be created.", - "allOf": [ - { - "$ref": "#/components/schemas/TypedUuidForSledKind" - } - ] - }, - "is_lrtq_learner": { - "description": "Is this node an LRTQ learner node?\n\nWe only put the node into learner mode if `use_trust_quorum` is also true.", - "type": "boolean" - }, - "rack_id": { - "description": "Uuid of the rack to which this sled agent belongs.", - "type": "string", - "format": "uuid" - }, - "subnet": { - "description": "Portion of the IP space to be managed by the Sled Agent.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Subnet" - } - ] - }, - "use_trust_quorum": { - "description": "Use trust quorum for key generation", - "type": "boolean" - } - }, - "required": [ - "id", - "is_lrtq_learner", - "rack_id", - "subnet", - "use_trust_quorum" - ] - }, - "StorageLimit": { - "description": "The limit on space allowed for zone bundles, as a percentage of the overall dataset's quota.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "SupportBundleMetadata": { - "description": "Metadata about a support bundle", - "type": "object", - "properties": { - "state": { - "$ref": "#/components/schemas/SupportBundleState" - }, - "support_bundle_id": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - "required": [ - "state", - "support_bundle_id" - ] - }, - "SupportBundleState": { - "type": "string", - "enum": [ - "complete", - "incomplete" - ] - }, - "SwitchLocation": { - "description": "Identifies switch physical location", - "oneOf": [ - { - "description": "Switch in upper slot", - "type": "string", - "enum": [ - "switch0" - ] - }, - { - "description": "Switch in lower slot", - "type": "string", - "enum": [ - "switch1" - ] - } - ] - }, - "SwitchPorts": { - "description": "A set of switch uplinks.", - "type": "object", - "properties": { - "uplinks": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HostPortConfig" - } - } - }, - "required": [ - "uplinks" - ] - }, - "TxEqConfig": { - "description": "Per-port tx-eq overrides. This can be used to fine-tune the transceiver equalization settings to improve signal integrity.", - "type": "object", - "properties": { - "main": { - "nullable": true, - "description": "Main tap", - "type": "integer", - "format": "int32" - }, - "post1": { - "nullable": true, - "description": "Post-cursor tap1", - "type": "integer", - "format": "int32" - }, - "post2": { - "nullable": true, - "description": "Post-cursor tap2", - "type": "integer", - "format": "int32" - }, - "pre1": { - "nullable": true, - "description": "Pre-cursor tap1", - "type": "integer", - "format": "int32" - }, - "pre2": { - "nullable": true, - "description": "Pre-cursor tap2", - "type": "integer", - "format": "int32" - } - } - }, - "TypedUuidForDatasetKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForInstanceKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForInternalZpoolKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForMupdateKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForMupdateOverrideKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForOmicronZoneKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForPhysicalDiskKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForSledKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForSupportBundleKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForZpoolKind": { - "type": "string", - "format": "uuid" - }, - "UplinkAddressConfig": { - "type": "object", - "properties": { - "address": { - "$ref": "#/components/schemas/IpNet" - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id (if any) associated with this address.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "address" - ] - }, - "VirtioDisk": { - "description": "A disk that presents a virtio-block interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the disk's backend component.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "pci_path": { - "description": "The PCI bus/device/function at which this disk should be attached.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtioNetworkBackend": { - "description": "A network backend associated with a virtio-net (viona) VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the viona VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "VirtioNic": { - "description": "A network card that presents a virtio-net interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the device's backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "interface_id": { - "description": "A caller-defined correlation identifier for this interface. If Propolis is configured to collect network interface kstats in its Oximeter metrics, the metric series for this interface will be associated with this identifier.", - "type": "string", - "format": "uuid" - }, - "pci_path": { - "description": "The PCI path at which to attach this device.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "interface_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtualNetworkInterfaceHost": { - "description": "A mapping from a virtual NIC to a physical host", - "type": "object", - "properties": { - "physical_host_ip": { - "type": "string", - "format": "ipv6" - }, - "virtual_ip": { - "type": "string", - "format": "ip" - }, - "virtual_mac": { - "$ref": "#/components/schemas/MacAddr" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "physical_host_ip", - "virtual_ip", - "virtual_mac", - "vni" - ] - }, - "VmmIssueDiskSnapshotRequestBody": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmIssueDiskSnapshotRequestResponse": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmPutStateBody": { - "description": "The body of a request to move a previously-ensured instance into a specific runtime state.", - "type": "object", - "properties": { - "state": { - "description": "The state into which the instance should be driven.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmStateRequested" - } - ] - } - }, - "required": [ - "state" - ] - }, - "VmmPutStateResponse": { - "description": "The response sent from a request to move an instance into a specific runtime state.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current runtime state of the instance after handling the request to change its state. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "VmmRuntimeState": { - "description": "The dynamic runtime properties of an individual VMM process.", - "type": "object", - "properties": { - "gen": { - "description": "The generation number for this VMM's state.", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "state": { - "description": "The last state reported by this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmState" - } - ] - }, - "time_updated": { - "description": "Timestamp for the VMM's state.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "gen", - "state", - "time_updated" - ] - }, - "VmmSpec": { - "description": "Specifies the virtual hardware configuration of a new Propolis VMM in the form of a Propolis instance specification.\n\nSled-agent expects that when an instance spec is provided alongside an `InstanceSledLocalConfig` to initialize a new instance, the NIC IDs in that config's network interface list will match the IDs of the virtio network backends in the instance spec.", - "allOf": [ - { - "$ref": "#/components/schemas/InstanceSpecV0" - } - ] - }, - "VmmState": { - "description": "One of the states that a VMM can be in.", - "oneOf": [ - { - "description": "The VMM is initializing and has not started running guest CPUs yet.", - "type": "string", - "enum": [ - "starting" - ] - }, - { - "description": "The VMM has finished initializing and may be running guest CPUs.", - "type": "string", - "enum": [ - "running" - ] - }, - { - "description": "The VMM is shutting down.", - "type": "string", - "enum": [ - "stopping" - ] - }, - { - "description": "The VMM's guest has stopped, and the guest will not run again, but the VMM process may not have released all of its resources yet.", - "type": "string", - "enum": [ - "stopped" - ] - }, - { - "description": "The VMM is being restarted or its guest OS is rebooting.", - "type": "string", - "enum": [ - "rebooting" - ] - }, - { - "description": "The VMM is part of a live migration.", - "type": "string", - "enum": [ - "migrating" - ] - }, - { - "description": "The VMM process reported an internal failure.", - "type": "string", - "enum": [ - "failed" - ] - }, - { - "description": "The VMM process has been destroyed and its resources have been released.", - "type": "string", - "enum": [ - "destroyed" - ] - } - ] - }, - "VmmStateRequested": { - "description": "Requestable running state of an Instance.\n\nA subset of [`omicron_common::api::external::InstanceState`].", - "oneOf": [ - { - "description": "Run this instance by migrating in from a previous running incarnation of the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "migration_target" - ] - }, - "value": { - "$ref": "#/components/schemas/InstanceMigrationTargetParams" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Start the instance if it is not already running.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Stop the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "stopped" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Immediately reset the instance, as though it had stopped and immediately began to run again.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "reboot" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "VmmUnregisterResponse": { - "description": "The response sent from a request to unregister an instance.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current state of the instance after handling the request to unregister it. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "Vni": { - "description": "A Geneve Virtual Network Identifier", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "VpcFirewallIcmpFilter": { - "type": "object", - "properties": { - "code": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/IcmpParamRange" - } - ] - }, - "icmp_type": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "icmp_type" - ] - }, - "VpcFirewallRuleAction": { - "type": "string", - "enum": [ - "allow", - "deny" - ] - }, - "VpcFirewallRuleDirection": { - "type": "string", - "enum": [ - "inbound", - "outbound" - ] - }, - "VpcFirewallRuleProtocol": { - "description": "The protocols that may be specified in a firewall rule's filter", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "tcp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "udp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "icmp" - ] - }, - "value": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallIcmpFilter" - } - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleStatus": { - "type": "string", - "enum": [ - "disabled", - "enabled" - ] - }, - "VpcFirewallRulesEnsureBody": { - "description": "Update firewall rules for a VPC", - "type": "object", - "properties": { - "rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcFirewallRule" - } - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "rules", - "vni" - ] - }, - "ZoneArtifactInventory": { - "description": "Inventory representation of a single zone artifact on a boot disk.\n\nPart of [`ZoneManifestBootInventory`].", - "type": "object", - "properties": { - "expected_hash": { - "description": "The expected digest of the file's contents.", - "type": "string", - "format": "hex string (32 bytes)" - }, - "expected_size": { - "description": "The expected size of the file, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "file_name": { - "description": "The name of the zone file on disk, for example `nexus.tar.gz`. Zone files are always \".tar.gz\".", - "type": "string" - }, - "path": { - "description": "The full path to the zone file.", - "type": "string", - "format": "Utf8PathBuf" - }, - "status": { - "description": "The status of the artifact.\n\nThis is `Ok(())` if the artifact is present and matches the expected size and digest, or an error message if it is missing or does not match.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "type": "null" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "type": "string", - "enum": [ - null - ] - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "expected_hash", - "expected_size", - "file_name", - "path", - "status" - ] - }, - "ZoneBundleCause": { - "description": "The reason or cause for a zone bundle, i.e., why it was created.", - "oneOf": [ - { - "description": "Some other, unspecified reason.", - "type": "string", - "enum": [ - "other" - ] - }, - { - "description": "A zone bundle taken when a sled agent finds a zone that it does not expect to be running.", - "type": "string", - "enum": [ - "unexpected_zone" - ] - }, - { - "description": "An instance zone was terminated.", - "type": "string", - "enum": [ - "terminated_instance" - ] - } - ] - }, - "ZoneBundleId": { - "description": "An identifier for a zone bundle.", - "type": "object", - "properties": { - "bundle_id": { - "description": "The ID for this bundle itself.", - "type": "string", - "format": "uuid" - }, - "zone_name": { - "description": "The name of the zone this bundle is derived from.", - "type": "string" - } - }, - "required": [ - "bundle_id", - "zone_name" - ] - }, - "ZoneBundleMetadata": { - "description": "Metadata about a zone bundle.", - "type": "object", - "properties": { - "cause": { - "description": "The reason or cause a bundle was created.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleCause" - } - ] - }, - "id": { - "description": "Identifier for this zone bundle", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleId" - } - ] - }, - "time_created": { - "description": "The time at which this zone bundle was created.", - "type": "string", - "format": "date-time" - }, - "version": { - "description": "A version number for this zone bundle.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "cause", - "id", - "time_created", - "version" - ] - }, - "ZoneImageResolverInventory": { - "description": "Inventory representation of zone image resolver status and health.", - "type": "object", - "properties": { - "mupdate_override": { - "description": "The mupdate override status.", - "allOf": [ - { - "$ref": "#/components/schemas/MupdateOverrideInventory" - } - ] - }, - "zone_manifest": { - "description": "The zone manifest status.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneManifestInventory" - } - ] - } - }, - "required": [ - "mupdate_override", - "zone_manifest" - ] - }, - "ZoneManifestBootInventory": { - "description": "Inventory representation of zone artifacts on the boot disk.\n\nPart of [`ZoneManifestInventory`].", - "type": "object", - "properties": { - "artifacts": { - "title": "IdOrdMap", - "description": "The artifacts on disk.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneArtifactInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneArtifactInventory" - }, - "uniqueItems": true - }, - "source": { - "description": "The manifest source.\n\nIn production this is [`OmicronZoneManifestSource::Installinator`], but in some development and testing flows Sled Agent synthesizes zone manifests. In those cases, the source is [`OmicronZoneManifestSource::SledAgent`].", - "allOf": [ - { - "$ref": "#/components/schemas/OmicronZoneManifestSource" - } - ] - } - }, - "required": [ - "artifacts", - "source" - ] - }, - "ZoneManifestInventory": { - "description": "Inventory representation of a zone manifest.\n\nPart of [`ZoneImageResolverInventory`].\n\nA zone manifest is a listing of all the zones present in a system's install dataset. This struct contains information about the install dataset gathered from a system.", - "type": "object", - "properties": { - "boot_disk_path": { - "description": "The full path to the zone manifest file on the boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "boot_inventory": { - "description": "The manifest read from the boot disk, and whether the manifest is valid.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_status": { - "title": "IdOrdMap", - "description": "Information about the install dataset on non-boot disks.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - }, - "uniqueItems": true - } - }, - "required": [ - "boot_disk_path", - "boot_inventory", - "non_boot_status" - ] - }, - "ZoneManifestNonBootInventory": { - "description": "Inventory representation of a zone manifest on a non-boot disk.\n\nUnlike [`ZoneManifestBootInventory`] which is structured since Reconfigurator makes decisions based on it, information about non-boot disks is purely advisory. For simplicity, we store information in an unstructured format.", - "type": "object", - "properties": { - "is_valid": { - "description": "Whether the status is valid.", - "type": "boolean" - }, - "message": { - "description": "A message describing the status.\n\nIf `is_valid` is true, then the message describes the list of artifacts found and their hashes.\n\nIf `is_valid` is false, then this message describes the reason for the invalid status. This could include errors reading the zone manifest, or zone file mismatches.", - "type": "string" - }, - "path": { - "description": "The full path to the zone manifest JSON on the non-boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "zpool_id": { - "description": "The ID of the non-boot zpool.", - "allOf": [ - { - "$ref": "#/components/schemas/TypedUuidForInternalZpoolKind" - } - ] - } - }, - "required": [ - "is_valid", - "message", - "path", - "zpool_id" - ] - }, - "ZpoolName": { - "title": "The name of a Zpool", - "description": "Zpool names are of the format ox{i,p}_. They are either Internal or External, and should be unique", - "type": "string", - "pattern": "^ox[ip]_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" - }, - "TypedUuidForPropolisKind": { - "type": "string", - "format": "uuid" - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } -} diff --git a/openapi/sled-agent/sled-agent-3.0.0-f44f77.json.gitref b/openapi/sled-agent/sled-agent-3.0.0-f44f77.json.gitref new file mode 100644 index 00000000000..64117cac4df --- /dev/null +++ b/openapi/sled-agent/sled-agent-3.0.0-f44f77.json.gitref @@ -0,0 +1 @@ +4f5153721993b7f2a96e48f49ef0b42144deff32:openapi/sled-agent/sled-agent-3.0.0-f44f77.json \ No newline at end of file diff --git a/openapi/sled-agent/sled-agent-4.0.0-fd6727.json b/openapi/sled-agent/sled-agent-4.0.0-fd6727.json deleted file mode 100644 index c0dfc31d59e..00000000000 --- a/openapi/sled-agent/sled-agent-4.0.0-fd6727.json +++ /dev/null @@ -1,8383 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Sled Agent API", - "description": "API for interacting with individual sleds", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "4.0.0" - }, - "paths": { - "/artifacts": { - "get": { - "operationId": "artifact_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactListResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}": { - "put": { - "operationId": "artifact_put", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactPutResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}/copy-from-depot": { - "post": { - "operationId": "artifact_copy_from_depot", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotBody" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts-config": { - "get": { - "operationId": "artifact_config_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "artifact_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/bootstore/status": { - "get": { - "summary": "Get the internal state of the local bootstore node", - "operationId": "bootstore_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BootstoreStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/debug/switch-zone-policy": { - "get": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.", - "operationId": "debug_operator_switch_zone_policy_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.\n\nSetting the switch zone policy is asynchronous and inherently racy with the standard process of starting the switch zone. If the switch zone is in the process of being started or stopped when this policy is changed, the new policy may not take effect until that transition completes.", - "operationId": "debug_operator_switch_zone_policy_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/disks/{disk_id}": { - "put": { - "operationId": "disk_put", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskRuntimeState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/eip-gateways": { - "put": { - "summary": "Update per-NIC IP address <-> internet gateway mappings.", - "operationId": "set_eip_gateways", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIpGatewayMap" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/inventory": { - "get": { - "summary": "Fetch basic information about this sled", - "operationId": "inventory", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Inventory" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/network-bootstore-config": { - "get": { - "summary": "This API endpoint is only reading the local sled agent's view of the", - "description": "bootstore. The boostore is a distributed data store that is eventually consistent. Reads from individual nodes may not represent the latest state.", - "operationId": "read_network_bootstore_config_cache", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "write_network_bootstore_config", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/omicron-config": { - "put": { - "operationId": "omicron_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OmicronSledConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-identifiers": { - "get": { - "summary": "Fetch sled identifiers", - "operationId": "sled_identifiers", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledIdentifiers" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-role": { - "get": { - "operationId": "sled_role_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledRole" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sleds": { - "put": { - "summary": "Add a sled to a rack that was already initialized via RSS", - "operationId": "sled_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddSledRequest" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/dladm-info": { - "get": { - "operationId": "support_dladm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/health-check": { - "get": { - "operationId": "support_health_check", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/ipadm-info": { - "get": { - "operationId": "support_ipadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/logs/download/{zone}": { - "get": { - "summary": "This endpoint returns a zip file of a zone's logs organized by service.", - "operationId": "support_logs_download", - "parameters": [ - { - "in": "path", - "name": "zone", - "description": "The zone for which one would like to collect logs for", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "max_rotated", - "description": "The max number of rotated logs to include in the final support bundle", - "required": true, - "schema": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support/logs/zones": { - "get": { - "summary": "This endpoint returns a list of known zones on a sled that have service", - "description": "logs that can be collected into a support bundle.", - "operationId": "support_logs", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/nvmeadm-info": { - "get": { - "operationId": "support_nvmeadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pargs-info": { - "get": { - "operationId": "support_pargs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pfiles-info": { - "get": { - "operationId": "support_pfiles_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pstack-info": { - "get": { - "operationId": "support_pstack_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zfs-info": { - "get": { - "operationId": "support_zfs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zoneadm-info": { - "get": { - "operationId": "support_zoneadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zpool-info": { - "get": { - "operationId": "support_zpool_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}": { - "get": { - "summary": "List all support bundles within a particular dataset", - "operationId": "support_bundle_list", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SupportBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}": { - "post": { - "summary": "Starts creation of a support bundle within a particular dataset", - "description": "Callers should transfer chunks of the bundle with \"support_bundle_transfer\", and then call \"support_bundle_finalize\" once the bundle has finished transferring.\n\nIf a support bundle was previously created without being finalized successfully, this endpoint will reset the state.\n\nIf a support bundle was previously created and finalized successfully, this endpoint will return metadata indicating that it already exists.", - "operationId": "support_bundle_start_creation", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a support bundle from a particular dataset", - "operationId": "support_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download": { - "get": { - "summary": "Fetch a support bundle from a particular dataset", - "operationId": "support_bundle_download", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a support bundle from a particular dataset", - "operationId": "support_bundle_head", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download/{file}": { - "get": { - "summary": "Fetch a file within a support bundle from a particular dataset", - "operationId": "support_bundle_download_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a file within a support bundle from a particular dataset", - "operationId": "support_bundle_head_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/finalize": { - "post": { - "summary": "Finalizes the creation of a support bundle", - "description": "If the requested hash matched the bundle, the bundle is created. Otherwise, an error is returned.", - "operationId": "support_bundle_finalize", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - }, - { - "in": "query", - "name": "hash", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/index": { - "get": { - "summary": "Fetch the index (list of files within a support bundle)", - "operationId": "support_bundle_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about the list of files within a support bundle", - "operationId": "support_bundle_head_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/transfer": { - "put": { - "summary": "Transfers a chunk of a support bundle within a particular dataset", - "operationId": "support_bundle_transfer", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForZpoolKind" - } - }, - { - "in": "query", - "name": "offset", - "required": true, - "schema": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/switch-ports": { - "post": { - "operationId": "uplink_ensure", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPorts" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v2p": { - "get": { - "summary": "List v2p mappings present on sled", - "operationId": "list_v2p", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_VirtualNetworkInterfaceHost", - "type": "array", - "items": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Create a mapping from a virtual NIC to a physical host", - "operationId": "set_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a mapping from a virtual NIC to a physical host", - "operationId": "del_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}": { - "put": { - "operationId": "vmm_register", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_unregister", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmUnregisterResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/disks/{disk_id}/snapshot": { - "post": { - "summary": "Take a snapshot of a disk that is attached to an instance", - "operationId": "vmm_issue_disk_snapshot_request", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/external-ip": { - "put": { - "operationId": "vmm_put_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_delete_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/state": { - "get": { - "operationId": "vmm_get_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "vmm_put_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/TypedUuidForPropolisKind" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc/{vpc_id}/firewall/rules": { - "put": { - "operationId": "vpc_firewall_rules_put", - "parameters": [ - { - "in": "path", - "name": "vpc_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRulesEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc-routes": { - "get": { - "summary": "Get the current versions of VPC routing rules.", - "operationId": "list_vpc_routes", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteState", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteState" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update VPC routing rules.", - "operationId": "set_vpc_routes", - "requestBody": { - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteSet", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteSet" - } - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones": { - "get": { - "summary": "List the zones that are currently managed by the sled agent.", - "operationId": "zones_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup": { - "post": { - "summary": "Trigger a zone bundle cleanup.", - "operationId": "zone_bundle_cleanup", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_CleanupCount", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/CleanupCount" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/context": { - "get": { - "summary": "Return context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContext" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContextUpdate" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/utilization": { - "get": { - "summary": "Return utilization information about all zone bundles.", - "operationId": "zone_bundle_utilization", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_BundleUtilization", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/BundleUtilization" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles": { - "get": { - "summary": "List all zone bundles that exist, even for now-deleted zones.", - "operationId": "zone_bundle_list_all", - "parameters": [ - { - "in": "query", - "name": "filter", - "description": "An optional substring used to filter zone bundles.", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}": { - "get": { - "summary": "List the zone bundles that are available for a running zone.", - "operationId": "zone_bundle_list", - "parameters": [ - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}/{bundle_id}": { - "get": { - "summary": "Fetch the binary content of a single zone bundle.", - "operationId": "zone_bundle_get", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a zone bundle.", - "operationId": "zone_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "AddSledRequest": { - "description": "A request to Add a given sled after rack initialization has occurred", - "type": "object", - "properties": { - "sled_id": { - "$ref": "#/components/schemas/BaseboardId" - }, - "start_request": { - "$ref": "#/components/schemas/StartSledAgentRequest" - } - }, - "required": [ - "sled_id", - "start_request" - ] - }, - "ArtifactConfig": { - "type": "object", - "properties": { - "artifacts": { - "type": "array", - "items": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "uniqueItems": true - }, - "generation": { - "$ref": "#/components/schemas/Generation" - } - }, - "required": [ - "artifacts", - "generation" - ] - }, - "ArtifactCopyFromDepotBody": { - "type": "object", - "properties": { - "depot_base_url": { - "type": "string" - } - }, - "required": [ - "depot_base_url" - ] - }, - "ArtifactCopyFromDepotResponse": { - "type": "object" - }, - "ArtifactListResponse": { - "type": "object", - "properties": { - "generation": { - "$ref": "#/components/schemas/Generation" - }, - "list": { - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - }, - "required": [ - "generation", - "list" - ] - }, - "ArtifactPutResponse": { - "type": "object", - "properties": { - "datasets": { - "description": "The number of valid M.2 artifact datasets we found on the sled. There is typically one of these datasets for each functional M.2.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "successful_writes": { - "description": "The number of valid writes to the M.2 artifact datasets. This should be less than or equal to the number of artifact datasets.", - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "required": [ - "datasets", - "successful_writes" - ] - }, - "Baseboard": { - "description": "Describes properties that should uniquely identify a Gimlet.", - "oneOf": [ - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "gimlet" - ] - } - }, - "required": [ - "identifier", - "model", - "revision", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "pc" - ] - } - }, - "required": [ - "identifier", - "model", - "type" - ] - } - ] - }, - "BaseboardId": { - "description": "A representation of a Baseboard ID as used in the inventory subsystem This type is essentially the same as a `Baseboard` except it doesn't have a revision or HW type (Gimlet, PC, Unknown).", - "type": "object", - "properties": { - "part_number": { - "description": "Oxide Part Number", - "type": "string" - }, - "serial_number": { - "description": "Serial number (unique for a given part number)", - "type": "string" - } - }, - "required": [ - "part_number", - "serial_number" - ] - }, - "BfdMode": { - "description": "BFD connection mode.", - "type": "string", - "enum": [ - "single_hop", - "multi_hop" - ] - }, - "BfdPeerConfig": { - "type": "object", - "properties": { - "detection_threshold": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "type": "string", - "format": "ip" - }, - "mode": { - "$ref": "#/components/schemas/BfdMode" - }, - "remote": { - "type": "string", - "format": "ip" - }, - "required_rx": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "$ref": "#/components/schemas/SwitchLocation" - } - }, - "required": [ - "detection_threshold", - "mode", - "remote", - "required_rx", - "switch" - ] - }, - "BgpConfig": { - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number for the BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "checker": { - "nullable": true, - "description": "Checker to apply to incoming messages.", - "default": null, - "type": "string" - }, - "originate": { - "description": "The set of prefixes for the BGP router to originate.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - }, - "shaper": { - "nullable": true, - "description": "Shaper to apply to outgoing messages.", - "default": null, - "type": "string" - } - }, - "required": [ - "asn", - "originate" - ] - }, - "BgpPeerConfig": { - "type": "object", - "properties": { - "addr": { - "description": "Address of the peer.", - "type": "string", - "format": "ipv4" - }, - "allowed_export": { - "description": "Define export policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "allowed_import": { - "description": "Define import policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "asn": { - "description": "The autonomous system number of the router the peer belongs to.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "communities": { - "description": "Include the provided communities in updates sent to the peer.", - "default": [], - "type": "array", - "items": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "connect_retry": { - "nullable": true, - "description": "The interval in seconds between peer connection retry attempts.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "delay_open": { - "nullable": true, - "description": "How long to delay sending open messages to a peer. In seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "enforce_first_as": { - "description": "Enforce that the first AS in paths received from this peer is the peer's AS.", - "default": false, - "type": "boolean" - }, - "hold_time": { - "nullable": true, - "description": "How long to keep a session alive without a keepalive in seconds. Defaults to 6.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "idle_hold_time": { - "nullable": true, - "description": "How long to keep a peer in idle after a state machine reset in seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "keepalive": { - "nullable": true, - "description": "The interval to send keepalive messages at.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "local_pref": { - "nullable": true, - "description": "Apply a local preference to routes received from this peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "md5_auth_key": { - "nullable": true, - "description": "Use the given key for TCP-MD5 authentication with the peer.", - "default": null, - "type": "string" - }, - "min_ttl": { - "nullable": true, - "description": "Require messages from a peer have a minimum IP time to live field.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "multi_exit_discriminator": { - "nullable": true, - "description": "Apply the provided multi-exit discriminator (MED) updates sent to the peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "port": { - "description": "Switch port the peer is reachable on.", - "type": "string" - }, - "remote_asn": { - "nullable": true, - "description": "Require that a peer has a specified ASN.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "Associate a VLAN ID with a BGP peer session.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "addr", - "asn", - "port" - ] - }, - "BlobStorageBackend": { - "description": "A storage backend for a disk whose initial contents are given explicitly by the specification.", - "type": "object", - "properties": { - "base64": { - "description": "The disk's initial contents, encoded as a base64 string.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - } - }, - "required": [ - "base64", - "readonly" - ], - "additionalProperties": false - }, - "Board": { - "description": "A VM's mainboard.", - "type": "object", - "properties": { - "chipset": { - "description": "The chipset to expose to guest software.", - "allOf": [ - { - "$ref": "#/components/schemas/Chipset" - } - ] - }, - "cpuid": { - "nullable": true, - "description": "The CPUID values to expose to the guest. If `None`, bhyve will derive default values from the host's CPUID values.", - "allOf": [ - { - "$ref": "#/components/schemas/Cpuid" - } - ] - }, - "cpus": { - "description": "The number of virtual logical processors attached to this VM.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "guest_hv_interface": { - "description": "The hypervisor platform to expose to the guest. The default is a bhyve-compatible interface with no additional features.\n\nFor compatibility with older versions of Propolis, this field is only serialized if it specifies a non-default interface.", - "allOf": [ - { - "$ref": "#/components/schemas/GuestHypervisorInterface" - } - ] - }, - "memory_mb": { - "description": "The amount of guest RAM attached to this VM.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "chipset", - "cpus", - "memory_mb" - ], - "additionalProperties": false - }, - "BootImageHeader": { - "type": "object", - "properties": { - "data_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "flags": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "image_name": { - "type": "string" - }, - "image_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "sha256": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 32, - "maxItems": 32 - }, - "target_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "data_size", - "flags", - "image_name", - "image_size", - "sha256", - "target_size" - ] - }, - "BootOrderEntry": { - "description": "An entry in the boot order stored in a [`BootSettings`] component.", - "type": "object", - "properties": { - "id": { - "description": "The ID of another component in the spec that Propolis should try to boot from.\n\nCurrently, only disk device components are supported.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - } - }, - "required": [ - "id" - ] - }, - "BootPartitionContents": { - "type": "object", - "properties": { - "boot_disk": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/M2Slot" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/M2Slot" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_a": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_b": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "boot_disk", - "slot_a", - "slot_b" - ] - }, - "BootPartitionDetails": { - "type": "object", - "properties": { - "artifact_hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "artifact_size": { - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "header": { - "$ref": "#/components/schemas/BootImageHeader" - } - }, - "required": [ - "artifact_hash", - "artifact_size", - "header" - ] - }, - "BootSettings": { - "description": "Settings supplied to the guest's firmware image that specify the order in which it should consider its options when selecting a device to try to boot from.", - "type": "object", - "properties": { - "order": { - "description": "An ordered list of components to attempt to boot from.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BootOrderEntry" - } - } - }, - "required": [ - "order" - ], - "additionalProperties": false - }, - "BootstoreStatus": { - "type": "object", - "properties": { - "accepted_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "established_connections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EstablishedConnection" - } - }, - "fsm_ledger_generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "fsm_state": { - "type": "string" - }, - "negotiating_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "network_config_ledger_generation": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "peers": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - } - }, - "required": [ - "accepted_connections", - "established_connections", - "fsm_ledger_generation", - "fsm_state", - "negotiating_connections", - "peers" - ] - }, - "BundleUtilization": { - "description": "The portion of a debug dataset used for zone bundles.", - "type": "object", - "properties": { - "bytes_available": { - "description": "The total number of bytes available for zone bundles.\n\nThis is `dataset_quota` multiplied by the context's storage limit.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes_used": { - "description": "Total bundle usage, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "dataset_quota": { - "description": "The total dataset quota, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bytes_available", - "bytes_used", - "dataset_quota" - ] - }, - "ByteCount": { - "description": "Byte count to express memory or storage capacity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "Chipset": { - "description": "A kind of virtual chipset.", - "oneOf": [ - { - "description": "An Intel 440FX-compatible chipset.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i440_fx" - ] - }, - "value": { - "$ref": "#/components/schemas/I440Fx" - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "CleanupContext": { - "description": "Context provided for the zone bundle cleanup task.", - "type": "object", - "properties": { - "period": { - "description": "The period on which automatic checks and cleanup is performed.", - "allOf": [ - { - "$ref": "#/components/schemas/CleanupPeriod" - } - ] - }, - "priority": { - "description": "The priority ordering for keeping old bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "description": "The limit on the dataset quota available for zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/StorageLimit" - } - ] - } - }, - "required": [ - "period", - "priority", - "storage_limit" - ] - }, - "CleanupContextUpdate": { - "description": "Parameters used to update the zone bundle cleanup context.", - "type": "object", - "properties": { - "period": { - "nullable": true, - "description": "The new period on which automatic cleanups are run.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "priority": { - "nullable": true, - "description": "The priority ordering for preserving old zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "nullable": true, - "description": "The new limit on the underlying dataset quota allowed for bundles.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "CleanupCount": { - "description": "The count of bundles / bytes removed during a cleanup operation.", - "type": "object", - "properties": { - "bundles": { - "description": "The number of bundles removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes": { - "description": "The number of bytes removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bundles", - "bytes" - ] - }, - "CleanupPeriod": { - "description": "A period on which bundles are automatically cleaned up.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "ComponentV0": { - "oneOf": [ - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioDisk" - }, - "type": { - "type": "string", - "enum": [ - "virtio_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/NvmeDisk" - }, - "type": { - "type": "string", - "enum": [ - "nvme_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNic" - }, - "type": { - "type": "string", - "enum": [ - "virtio_nic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SerialPort" - }, - "type": { - "type": "string", - "enum": [ - "serial_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/PciPciBridge" - }, - "type": { - "type": "string", - "enum": [ - "pci_pci_bridge" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/QemuPvpanic" - }, - "type": { - "type": "string", - "enum": [ - "qemu_pvpanic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BootSettings" - }, - "type": { - "type": "string", - "enum": [ - "boot_settings" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPciPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_pci_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuP9" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_p9" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/P9fs" - }, - "type": { - "type": "string", - "enum": [ - "p9fs" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/MigrationFailureInjector" - }, - "type": { - "type": "string", - "enum": [ - "migration_failure_injector" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/CrucibleStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "crucible_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/FileStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "file_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BlobStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "blob_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "virtio_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/DlpiNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "dlpi_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - } - ] - }, - "CompressionAlgorithm": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "on" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "off" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "gzip" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "level": { - "$ref": "#/components/schemas/GzipLevel" - }, - "type": { - "type": "string", - "enum": [ - "gzip_n" - ] - } - }, - "required": [ - "level", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lz4" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lzjb" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "zle" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "ConfigReconcilerInventory": { - "description": "Describes the last attempt made by the sled-agent-config-reconciler to reconcile the current sled config against the actual state of the sled.", - "type": "object", - "properties": { - "boot_partitions": { - "$ref": "#/components/schemas/BootPartitionContents" - }, - "datasets": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "external_disks": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "last_reconciled_config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "orphaned_datasets": { - "title": "IdOrdMap", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/OrphanedDataset" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/OrphanedDataset" - }, - "uniqueItems": true - }, - "remove_mupdate_override": { - "nullable": true, - "description": "The result of removing the mupdate override file on disk.\n\n`None` if `remove_mupdate_override` was not provided in the sled config.", - "allOf": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideInventory" - } - ] - }, - "zones": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - } - }, - "required": [ - "boot_partitions", - "datasets", - "external_disks", - "last_reconciled_config", - "orphaned_datasets", - "zones" - ] - }, - "ConfigReconcilerInventoryResult": { - "oneOf": [ - { - "type": "object", - "properties": { - "result": { - "type": "string", - "enum": [ - "ok" - ] - } - }, - "required": [ - "result" - ] - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "result": { - "type": "string", - "enum": [ - "err" - ] - } - }, - "required": [ - "message", - "result" - ] - } - ] - }, - "ConfigReconcilerInventoryStatus": { - "description": "Status of the sled-agent-config-reconciler task.", - "oneOf": [ - { - "description": "The reconciler task has not yet run for the first time since sled-agent started.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "not_yet_run" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The reconciler task is actively running.", - "type": "object", - "properties": { - "config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "running_for": { - "$ref": "#/components/schemas/Duration" - }, - "started_at": { - "type": "string", - "format": "date-time" - }, - "status": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "config", - "running_for", - "started_at", - "status" - ] - }, - { - "description": "The reconciler task is currently idle, but previously did complete a reconciliation attempt.\n\nThis variant does not include the `OmicronSledConfig` used in the last attempt, because that's always available via [`ConfigReconcilerInventory::last_reconciled_config`].", - "type": "object", - "properties": { - "completed_at": { - "type": "string", - "format": "date-time" - }, - "ran_for": { - "$ref": "#/components/schemas/Duration" - }, - "status": { - "type": "string", - "enum": [ - "idle" - ] - } - }, - "required": [ - "completed_at", - "ran_for", - "status" - ] - } - ] - }, - "Cpuid": { - "description": "A set of CPUID values to expose to a guest.", - "type": "object", - "properties": { - "entries": { - "description": "A list of CPUID leaves/subleaves and their associated values.\n\nPropolis servers require that each entry's `leaf` be unique and that it falls in either the \"standard\" (0 to 0xFFFF) or \"extended\" (0x8000_0000 to 0x8000_FFFF) function ranges, since these are the only valid input ranges currently defined by Intel and AMD. See the Intel 64 and IA-32 Architectures Software Developer's Manual (June 2024) Table 3-17 and the AMD64 Architecture Programmer's Manual (March 2024) Volume 3's documentation of the CPUID instruction.", - "type": "array", - "items": { - "$ref": "#/components/schemas/CpuidEntry" - } - }, - "vendor": { - "description": "The CPU vendor to emulate.\n\nCPUID leaves in the extended range (0x8000_0000 to 0x8000_FFFF) have vendor-defined semantics. Propolis uses this value to determine these semantics when deciding whether it needs to specialize the supplied template values for these leaves.", - "allOf": [ - { - "$ref": "#/components/schemas/CpuidVendor" - } - ] - } - }, - "required": [ - "entries", - "vendor" - ], - "additionalProperties": false - }, - "CpuidEntry": { - "description": "A full description of a CPUID leaf/subleaf and the values it produces.", - "type": "object", - "properties": { - "eax": { - "description": "The value to return in eax.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ebx": { - "description": "The value to return in ebx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ecx": { - "description": "The value to return in ecx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "edx": { - "description": "The value to return in edx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "leaf": { - "description": "The leaf (function) number for this entry.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "subleaf": { - "nullable": true, - "description": "The subleaf (index) number for this entry, if it uses subleaves.", - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "eax", - "ebx", - "ecx", - "edx", - "leaf" - ], - "additionalProperties": false - }, - "CpuidVendor": { - "description": "A CPU vendor to use when interpreting the meanings of CPUID leaves in the extended ID range (0x80000000 to 0x8000FFFF).", - "type": "string", - "enum": [ - "amd", - "intel" - ] - }, - "CrucibleStorageBackend": { - "description": "A Crucible storage backend.", - "type": "object", - "properties": { - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "request_json": { - "description": "A serialized `[crucible_client_types::VolumeConstructionRequest]`. This is stored in serialized form so that breaking changes to the definition of a `VolumeConstructionRequest` do not inadvertently break instance spec deserialization.\n\nWhen using a spec to initialize a new instance, the spec author must ensure this request is well-formed and can be deserialized by the version of `crucible_client_types` used by the target Propolis.", - "type": "string" - } - }, - "required": [ - "readonly", - "request_json" - ], - "additionalProperties": false - }, - "DatasetConfig": { - "description": "Configuration information necessary to request a single dataset.\n\nThese datasets are tracked directly by Nexus.", - "type": "object", - "properties": { - "compression": { - "description": "The compression mode to be used by the dataset", - "allOf": [ - { - "$ref": "#/components/schemas/CompressionAlgorithm" - } - ] - }, - "id": { - "description": "The UUID of the dataset being requested", - "allOf": [ - { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - ] - }, - "name": { - "description": "The dataset's name", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetName" - } - ] - }, - "quota": { - "nullable": true, - "description": "The upper bound on the amount of storage used by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "reservation": { - "nullable": true, - "description": "The lower bound on the amount of storage usable by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "compression", - "id", - "name" - ] - }, - "DatasetKind": { - "description": "The kind of dataset. See the `DatasetKind` enum in omicron-common for possible values.", - "type": "string" - }, - "DatasetName": { - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/DatasetKind" - }, - "pool_name": { - "$ref": "#/components/schemas/ZpoolName" - } - }, - "required": [ - "kind", - "pool_name" - ] - }, - "DhcpConfig": { - "description": "DHCP configuration for a port\n\nNot present here: Hostname (DHCPv4 option 12; used in DHCPv6 option 39); we use `InstanceRuntimeState::hostname` for this value.", - "type": "object", - "properties": { - "dns_servers": { - "description": "DNS servers to send to the instance\n\n(DHCPv4 option 6; DHCPv6 option 23)", - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - }, - "host_domain": { - "nullable": true, - "description": "DNS zone this instance's hostname belongs to (e.g. the `project.example` part of `instance1.project.example`)\n\n(DHCPv4 option 15; used in DHCPv6 option 39)", - "type": "string" - }, - "search_domains": { - "description": "DNS search domains\n\n(DHCPv4 option 119; DHCPv6 option 24)", - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "dns_servers", - "search_domains" - ] - }, - "DiskEnsureBody": { - "description": "Sent from to a sled agent to establish the runtime state of a Disk", - "type": "object", - "properties": { - "initial_runtime": { - "description": "Last runtime state of the Disk known to Nexus (used if the agent has never seen this Disk before).", - "allOf": [ - { - "$ref": "#/components/schemas/DiskRuntimeState" - } - ] - }, - "target": { - "description": "requested runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskStateRequested" - } - ] - } - }, - "required": [ - "initial_runtime", - "target" - ] - }, - "DiskIdentity": { - "description": "Uniquely identifies a disk.", - "type": "object", - "properties": { - "model": { - "type": "string" - }, - "serial": { - "type": "string" - }, - "vendor": { - "type": "string" - } - }, - "required": [ - "model", - "serial", - "vendor" - ] - }, - "DiskRuntimeState": { - "description": "Runtime state of the Disk, which includes its attach state and some minimal metadata", - "type": "object", - "properties": { - "disk_state": { - "description": "runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskState" - } - ] - }, - "gen": { - "description": "generation number for this state", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "time_updated": { - "description": "timestamp for this information", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "disk_state", - "gen", - "time_updated" - ] - }, - "DiskState": { - "description": "State of a Disk", - "oneOf": [ - { - "description": "Disk is being initialized", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "creating" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready but detached from any Instance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready to receive blocks from an external source", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "import_ready" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from a URL", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_url" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from bulk writes", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_bulk_writes" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being finalized to state Detached", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "finalizing" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is undergoing maintenance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "maintenance" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is being detached from the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "detaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk has been destroyed", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is unavailable", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskStateRequested": { - "description": "Used to request a Disk state change", - "oneOf": [ - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskVariant": { - "type": "string", - "enum": [ - "U2", - "M2" - ] - }, - "DlpiNetworkBackend": { - "description": "A network backend associated with a DLPI VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "Duration": { - "type": "object", - "properties": { - "nanos": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "secs": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "nanos", - "secs" - ] - }, - "EarlyNetworkConfig": { - "description": "Network configuration required to bring up the control plane\n\nThe fields in this structure are those from [`crate::rack_init::RackInitializeRequest`] necessary for use beyond RSS. This is just for the initial rack configuration and cold boot purposes. Updates come from Nexus.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/EarlyNetworkConfigBody" - }, - "generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "EarlyNetworkConfigBody": { - "description": "This is the actual configuration of EarlyNetworking.\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "ntp_servers": { - "description": "The external NTP server addresses.", - "type": "array", - "items": { - "type": "string" - } - }, - "rack_network_config": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RackNetworkConfigV2" - } - ] - } - }, - "required": [ - "ntp_servers" - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "EstablishedConnection": { - "type": "object", - "properties": { - "addr": { - "type": "string" - }, - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - } - }, - "required": [ - "addr", - "baseboard" - ] - }, - "ExternalIpGatewayMap": { - "description": "Per-NIC mappings from external IP addresses to the Internet Gateways which can choose them as a source.", - "type": "object", - "properties": { - "mappings": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - } - } - } - }, - "required": [ - "mappings" - ] - }, - "FileStorageBackend": { - "description": "A storage backend backed by a file in the host system's file system.", - "type": "object", - "properties": { - "block_size": { - "description": "Block size of the backend", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "path": { - "description": "A path to a file that backs a disk.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "workers": { - "nullable": true, - "description": "Optional worker threads for the file backend, exposed for testing only.", - "type": "integer", - "format": "uint", - "minimum": 1 - } - }, - "required": [ - "block_size", - "path", - "readonly" - ], - "additionalProperties": false - }, - "Generation": { - "description": "Generation numbers stored in the database, used for optimistic concurrency control", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "GuestHypervisorInterface": { - "description": "A hypervisor interface to expose to the guest.", - "oneOf": [ - { - "description": "Expose a bhyve-like interface (\"bhyve bhyve \" as the hypervisor ID in leaf 0x4000_0000 and no additional leaves or features).", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bhyve" - ] - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "description": "Expose a Hyper-V-compatible hypervisor interface with the supplied features enabled.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "hyper_v" - ] - }, - "value": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HyperVFeatureFlag" - }, - "uniqueItems": true - } - }, - "required": [ - "features" - ], - "additionalProperties": false - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "GzipLevel": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "HostIdentifier": { - "description": "A `HostIdentifier` represents either an IP host or network (v4 or v6), or an entire VPC (identified by its VNI). It is used in firewall rule host filters.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "HostPhase2DesiredContents": { - "description": "Describes the desired contents of a host phase 2 slot (i.e., the boot partition on one of the internal M.2 drives).", - "oneOf": [ - { - "description": "Do not change the current contents.\n\nWe use this value when we've detected a sled has been mupdated (and we don't want to overwrite phase 2 images until we understand how to recover from that mupdate) and as the default value when reading an [`OmicronSledConfig`] that was ledgered before this concept existed.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "current_contents" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Set the phase 2 slot to the given artifact.\n\nThe artifact will come from an unpacked and distributed TUF repo.", - "type": "object", - "properties": { - "hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "type": { - "type": "string", - "enum": [ - "artifact" - ] - } - }, - "required": [ - "hash", - "type" - ] - } - ] - }, - "HostPhase2DesiredSlots": { - "description": "Describes the desired contents for both host phase 2 slots.", - "type": "object", - "properties": { - "slot_a": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - }, - "slot_b": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - } - }, - "required": [ - "slot_a", - "slot_b" - ] - }, - "HostPortConfig": { - "type": "object", - "properties": { - "addrs": { - "description": "IP Address and prefix (e.g., `192.168.0.1/16`) to apply to switchport (must be in infra_ip pool). May also include an optional VLAN ID.", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "lldp": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Switchport to use for external connectivity", - "type": "string" - }, - "tx_eq": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - } - }, - "required": [ - "addrs", - "port" - ] - }, - "Hostname": { - "title": "An RFC-1035-compliant hostname", - "description": "A hostname identifies a host on a network, and is usually a dot-delimited sequence of labels, where each label contains only letters, digits, or the hyphen. See RFCs 1035 and 952 for more details.", - "type": "string", - "pattern": "^([a-zA-Z0-9]+[a-zA-Z0-9\\-]*(? for background.", - "oneOf": [ - { - "description": "Start the switch zone if a switch is present.\n\nThis is the default policy.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "start_if_switch_present" - ] - } - }, - "required": [ - "policy" - ] - }, - { - "description": "Even if a switch zone is present, stop the switch zone.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "stop_despite_switch_presence" - ] - } - }, - "required": [ - "policy" - ] - } - ] - }, - "OrphanedDataset": { - "type": "object", - "properties": { - "available": { - "$ref": "#/components/schemas/ByteCount" - }, - "id": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/TypedUuidForDatasetKind" - } - ] - }, - "mounted": { - "type": "boolean" - }, - "name": { - "$ref": "#/components/schemas/DatasetName" - }, - "reason": { - "type": "string" - }, - "used": { - "$ref": "#/components/schemas/ByteCount" - } - }, - "required": [ - "available", - "mounted", - "name", - "reason", - "used" - ] - }, - "P9fs": { - "description": "Describes a filesystem to expose through a P9 device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "chunk_size": { - "description": "The chunk size to use in the 9P protocol. Vanilla Helios images should use 8192. Falcon Helios base images and Linux can use up to 65536.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach the guest to this P9 filesystem.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - }, - "source": { - "description": "The host source path to mount into the guest.", - "type": "string" - }, - "target": { - "description": "The 9P target filesystem tag.", - "type": "string" - } - }, - "required": [ - "chunk_size", - "pci_path", - "source", - "target" - ], - "additionalProperties": false - }, - "PciPath": { - "description": "A PCI bus/device/function tuple.", - "type": "object", - "properties": { - "bus": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "device": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "function": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "bus", - "device", - "function" - ] - }, - "PciPciBridge": { - "description": "A PCI-PCI bridge.", - "type": "object", - "properties": { - "downstream_bus": { - "description": "The logical bus number of this bridge's downstream bus. Other devices may use this bus number in their PCI paths to indicate they should be attached to this bridge's bus.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach this bridge.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "downstream_bus", - "pci_path" - ], - "additionalProperties": false - }, - "PortConfigV2": { - "type": "object", - "properties": { - "addresses": { - "description": "This port's addresses and optional vlan IDs", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "autoneg": { - "description": "Whether or not to set autonegotiation", - "default": false, - "type": "boolean" - }, - "bgp_peers": { - "description": "BGP peers on this port", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeerConfig" - } - }, - "lldp": { - "nullable": true, - "description": "LLDP configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Nmae of the port this config applies to.", - "type": "string" - }, - "routes": { - "description": "The set of routes associated with this port.", - "type": "array", - "items": { - "$ref": "#/components/schemas/RouteConfig" - } - }, - "switch": { - "description": "Switch the port belongs to.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - }, - "tx_eq": { - "nullable": true, - "description": "TX-EQ configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - }, - "uplink_port_fec": { - "nullable": true, - "description": "Port forward error correction type.", - "allOf": [ - { - "$ref": "#/components/schemas/PortFec" - } - ] - }, - "uplink_port_speed": { - "description": "Port speed.", - "allOf": [ - { - "$ref": "#/components/schemas/PortSpeed" - } - ] - } - }, - "required": [ - "addresses", - "bgp_peers", - "port", - "routes", - "switch", - "uplink_port_speed" - ] - }, - "PortFec": { - "description": "Switchport FEC options", - "type": "string", - "enum": [ - "firecode", - "none", - "rs" - ] - }, - "PortSpeed": { - "description": "Switchport Speed options", - "type": "string", - "enum": [ - "speed0_g", - "speed1_g", - "speed10_g", - "speed25_g", - "speed40_g", - "speed50_g", - "speed100_g", - "speed200_g", - "speed400_g" - ] - }, - "PriorityDimension": { - "description": "A dimension along with bundles can be sorted, to determine priority.", - "oneOf": [ - { - "description": "Sorting by time, with older bundles with lower priority.", - "type": "string", - "enum": [ - "time" - ] - }, - { - "description": "Sorting by the cause for creating the bundle.", - "type": "string", - "enum": [ - "cause" - ] - } - ] - }, - "PriorityOrder": { - "description": "The priority order for bundles during cleanup.\n\nBundles are sorted along the dimensions in [`PriorityDimension`], with each dimension appearing exactly once. During cleanup, lesser-priority bundles are pruned first, to maintain the dataset quota. Note that bundles are sorted by each dimension in the order in which they appear, with each dimension having higher priority than the next.", - "type": "array", - "items": { - "$ref": "#/components/schemas/PriorityDimension" - }, - "minItems": 2, - "maxItems": 2 - }, - "QemuPvpanic": { - "type": "object", - "properties": { - "enable_isa": { - "description": "Enable the QEMU PVPANIC ISA bus device (I/O port 0x505).", - "type": "boolean" - } - }, - "required": [ - "enable_isa" - ], - "additionalProperties": false - }, - "RackNetworkConfigV2": { - "description": "Initial network configuration", - "type": "object", - "properties": { - "bfd": { - "description": "BFD configuration for connecting the rack to external networks", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/BfdPeerConfig" - } - }, - "bgp": { - "description": "BGP configurations for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpConfig" - } - }, - "infra_ip_first": { - "description": "First ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "infra_ip_last": { - "description": "Last ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "ports": { - "description": "Uplinks for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/PortConfigV2" - } - }, - "rack_subnet": { - "$ref": "#/components/schemas/Ipv6Net" - } - }, - "required": [ - "bgp", - "infra_ip_first", - "infra_ip_last", - "ports", - "rack_subnet" - ] - }, - "RemoveMupdateOverrideBootSuccessInventory": { - "description": "Status of removing the mupdate override on the boot disk.", - "oneOf": [ - { - "description": "The mupdate override was successfully removed.", - "type": "string", - "enum": [ - "removed" - ] - }, - { - "description": "No mupdate override was found.\n\nThis is considered a success for idempotency reasons.", - "type": "string", - "enum": [ - "no_override" - ] - } - ] - }, - "RemoveMupdateOverrideInventory": { - "description": "Status of removing the mupdate override in the inventory.", - "type": "object", - "properties": { - "boot_disk_result": { - "description": "The result of removing the mupdate override on the boot disk.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_message": { - "description": "What happened on non-boot disks.\n\nWe aren't modeling this out in more detail, because we plan to not try and keep ledgered data in sync across both disks in the future.", - "type": "string" - } - }, - "required": [ - "boot_disk_result", - "non_boot_message" - ] - }, - "ResolvedVpcFirewallRule": { - "description": "VPC firewall rule after object name resolution has been performed by Nexus", - "type": "object", - "properties": { - "action": { - "$ref": "#/components/schemas/VpcFirewallRuleAction" - }, - "direction": { - "$ref": "#/components/schemas/VpcFirewallRuleDirection" - }, - "filter_hosts": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/HostIdentifier" - }, - "uniqueItems": true - }, - "filter_ports": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/L4PortRange" - } - }, - "filter_protocols": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleProtocol" - } - }, - "priority": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "status": { - "$ref": "#/components/schemas/VpcFirewallRuleStatus" - }, - "targets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NetworkInterface" - } - } - }, - "required": [ - "action", - "direction", - "priority", - "status", - "targets" - ] - }, - "ResolvedVpcRoute": { - "description": "A VPC route resolved into a concrete target.", - "type": "object", - "properties": { - "dest": { - "$ref": "#/components/schemas/IpNet" - }, - "target": { - "$ref": "#/components/schemas/RouterTarget" - } - }, - "required": [ - "dest", - "target" - ] - }, - "ResolvedVpcRouteSet": { - "description": "An updated set of routes for a given VPC and/or subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "routes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRoute" - }, - "uniqueItems": true - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id", - "routes" - ] - }, - "ResolvedVpcRouteState": { - "description": "Version information for routes on a given VPC subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id" - ] - }, - "RouteConfig": { - "type": "object", - "properties": { - "destination": { - "description": "The destination of the route.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "nexthop": { - "description": "The nexthop/gateway address.", - "type": "string", - "format": "ip" - }, - "rib_priority": { - "nullable": true, - "description": "The RIB priority (i.e. Admin Distance) associated with this route.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id associated with this route.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "destination", - "nexthop" - ] - }, - "RouterId": { - "description": "Identifier for a VPC and/or subnet.", - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/RouterKind" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "kind", - "vni" - ] - }, - "RouterKind": { - "description": "The scope of a set of VPC router rules.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "system" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "subnet": { - "$ref": "#/components/schemas/IpNet" - }, - "type": { - "type": "string", - "enum": [ - "custom" - ] - } - }, - "required": [ - "subnet", - "type" - ] - } - ] - }, - "RouterTarget": { - "description": "The target for a given router entry.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "drop" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "internet_gateway" - ] - }, - "value": { - "$ref": "#/components/schemas/InternetGatewayRouterTarget" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc_subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "RouterVersion": { - "description": "Information on the current parent router (and version) of a route set according to the control plane.", - "type": "object", - "properties": { - "router_id": { - "type": "string", - "format": "uuid" - }, - "version": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "router_id", - "version" - ] - }, - "SerialPort": { - "description": "A serial port device.", - "type": "object", - "properties": { - "num": { - "description": "The serial port number for this port.", - "allOf": [ - { - "$ref": "#/components/schemas/SerialPortNumber" - } - ] - } - }, - "required": [ - "num" - ], - "additionalProperties": false - }, - "SerialPortNumber": { - "description": "A serial port identifier, which determines what I/O ports a guest can use to access a port.", - "type": "string", - "enum": [ - "com1", - "com2", - "com3", - "com4" - ] - }, - "SledCpuFamily": { - "description": "Identifies the kind of CPU present on a sled, determined by reading CPUID.\n\nThis is intended to broadly support the control plane answering the question \"can I run this instance on that sled?\" given an instance with either no or some CPU platform requirement. It is not enough information for more precise placement questions - for example, is a CPU a high-frequency part or many-core part? We don't include Genoa here, but in that CPU family there are high frequency parts, many-core parts, and large-cache parts. To support those questions (or satisfactorily answer #8730) we would need to collect additional information and send it along.", - "oneOf": [ - { - "description": "The CPU vendor or its family number don't correspond to any of the known family variants.", - "type": "string", - "enum": [ - "unknown" - ] - }, - { - "description": "AMD Milan processors (or very close). Could be an actual Milan in a Gimlet, a close-to-Milan client Zen 3 part, or Zen 4 (for which Milan is the greatest common denominator).", - "type": "string", - "enum": [ - "amd_milan" - ] - }, - { - "description": "AMD Turin processors (or very close). Could be an actual Turin in a Cosmo, or a close-to-Turin client Zen 5 part.", - "type": "string", - "enum": [ - "amd_turin" - ] - }, - { - "description": "AMD Turin Dense processors. There are no \"Turin Dense-like\" CPUs unlike other cases, so this means a bona fide Zen 5c Turin Dense part.", - "type": "string", - "enum": [ - "amd_turin_dense" - ] - } - ] - }, - "SledDiagnosticsQueryOutput": { - "oneOf": [ - { - "type": "object", - "properties": { - "success": { - "type": "object", - "properties": { - "command": { - "description": "The command and its arguments.", - "type": "string" - }, - "exit_code": { - "nullable": true, - "description": "The exit code if one was present when the command exited.", - "type": "integer", - "format": "int32" - }, - "exit_status": { - "description": "The exit status of the command. This will be the exit code (if any) and exit reason such as from a signal.", - "type": "string" - }, - "stdio": { - "description": "Any stdout/stderr produced by the command.", - "type": "string" - } - }, - "required": [ - "command", - "exit_status", - "stdio" - ] - } - }, - "required": [ - "success" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "failure": { - "type": "object", - "properties": { - "error": { - "description": "The reason the command failed to execute.", - "type": "string" - } - }, - "required": [ - "error" - ] - } - }, - "required": [ - "failure" - ], - "additionalProperties": false - } - ] - }, - "SledIdentifiers": { - "description": "Identifiers for a single sled.\n\nThis is intended primarily to be used in timeseries, to identify sled from which metric data originates.", - "type": "object", - "properties": { - "model": { - "description": "Model name of the sled", - "type": "string" - }, - "rack_id": { - "description": "Control plane ID of the rack this sled is a member of", - "type": "string", - "format": "uuid" - }, - "revision": { - "description": "Revision number of the sled", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "serial": { - "description": "Serial number of the sled", - "type": "string" - }, - "sled_id": { - "description": "Control plane ID for the sled itself", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "model", - "rack_id", - "revision", - "serial", - "sled_id" - ] - }, - "SledRole": { - "description": "Describes the role of the sled within the rack.\n\nNote that this may change if the sled is physically moved within the rack.", - "oneOf": [ - { - "description": "The sled is a general compute sled.", - "type": "string", - "enum": [ - "gimlet" - ] - }, - { - "description": "The sled is attached to the network switch, and has additional responsibilities.", - "type": "string", - "enum": [ - "scrimlet" - ] - } - ] - }, - "SledVmmState": { - "description": "A wrapper type containing a sled's total knowledge of the state of a VMM.", - "type": "object", - "properties": { - "migration_in": { - "nullable": true, - "description": "The current state of any inbound migration to this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "migration_out": { - "nullable": true, - "description": "The state of any outbound migration from this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "vmm_state": { - "description": "The most recent state of the sled's VMM process.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmRuntimeState" - } - ] - } - }, - "required": [ - "vmm_state" - ] - }, - "SoftNpuP9": { - "description": "Describes a PCI device that shares host files with the guest using the P9 protocol.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPciPort": { - "description": "Describes a SoftNPU PCI device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPort": { - "description": "Describes a port in a SoftNPU emulated ASIC.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the port's associated DLPI backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "link_name": { - "description": "The data link name for this port.", - "type": "string" - } - }, - "required": [ - "backend_id", - "link_name" - ], - "additionalProperties": false - }, - "SourceNatConfig": { - "description": "An IP address and port range used for source NAT, i.e., making outbound network connections from guests or services.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used for source NAT, inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external address provided to the instance or service.", - "type": "string", - "format": "ip" - }, - "last_port": { - "description": "The last port used for source NAT, also inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "last_port" - ] - }, - "SpecKey": { - "description": "A key identifying a component in an instance spec.", - "oneOf": [ - { - "title": "uuid", - "allOf": [ - { - "type": "string", - "format": "uuid" - } - ] - }, - { - "title": "name", - "allOf": [ - { - "type": "string" - } - ] - } - ] - }, - "StartSledAgentRequest": { - "description": "Configuration information for launching a Sled Agent.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/StartSledAgentRequestBody" - }, - "generation": { - "description": "The current generation number of data as stored in CRDB.\n\nThe initial generation is set during RSS time and then only mutated by Nexus. For now, we don't actually anticipate mutating this data, but we leave open the possiblity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "StartSledAgentRequestBody": { - "description": "This is the actual app level data of `StartSledAgentRequest`\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "id": { - "description": "Uuid of the Sled Agent to be created.", - "allOf": [ - { - "$ref": "#/components/schemas/TypedUuidForSledKind" - } - ] - }, - "is_lrtq_learner": { - "description": "Is this node an LRTQ learner node?\n\nWe only put the node into learner mode if `use_trust_quorum` is also true.", - "type": "boolean" - }, - "rack_id": { - "description": "Uuid of the rack to which this sled agent belongs.", - "type": "string", - "format": "uuid" - }, - "subnet": { - "description": "Portion of the IP space to be managed by the Sled Agent.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Subnet" - } - ] - }, - "use_trust_quorum": { - "description": "Use trust quorum for key generation", - "type": "boolean" - } - }, - "required": [ - "id", - "is_lrtq_learner", - "rack_id", - "subnet", - "use_trust_quorum" - ] - }, - "StorageLimit": { - "description": "The limit on space allowed for zone bundles, as a percentage of the overall dataset's quota.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "SupportBundleMetadata": { - "description": "Metadata about a support bundle", - "type": "object", - "properties": { - "state": { - "$ref": "#/components/schemas/SupportBundleState" - }, - "support_bundle_id": { - "$ref": "#/components/schemas/TypedUuidForSupportBundleKind" - } - }, - "required": [ - "state", - "support_bundle_id" - ] - }, - "SupportBundleState": { - "type": "string", - "enum": [ - "complete", - "incomplete" - ] - }, - "SwitchLocation": { - "description": "Identifies switch physical location", - "oneOf": [ - { - "description": "Switch in upper slot", - "type": "string", - "enum": [ - "switch0" - ] - }, - { - "description": "Switch in lower slot", - "type": "string", - "enum": [ - "switch1" - ] - } - ] - }, - "SwitchPorts": { - "description": "A set of switch uplinks.", - "type": "object", - "properties": { - "uplinks": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HostPortConfig" - } - } - }, - "required": [ - "uplinks" - ] - }, - "TxEqConfig": { - "description": "Per-port tx-eq overrides. This can be used to fine-tune the transceiver equalization settings to improve signal integrity.", - "type": "object", - "properties": { - "main": { - "nullable": true, - "description": "Main tap", - "type": "integer", - "format": "int32" - }, - "post1": { - "nullable": true, - "description": "Post-cursor tap1", - "type": "integer", - "format": "int32" - }, - "post2": { - "nullable": true, - "description": "Post-cursor tap2", - "type": "integer", - "format": "int32" - }, - "pre1": { - "nullable": true, - "description": "Pre-cursor tap1", - "type": "integer", - "format": "int32" - }, - "pre2": { - "nullable": true, - "description": "Pre-cursor tap2", - "type": "integer", - "format": "int32" - } - } - }, - "TypedUuidForDatasetKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForInstanceKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForInternalZpoolKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForMupdateKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForMupdateOverrideKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForOmicronZoneKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForPhysicalDiskKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForSledKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForSupportBundleKind": { - "type": "string", - "format": "uuid" - }, - "TypedUuidForZpoolKind": { - "type": "string", - "format": "uuid" - }, - "UplinkAddressConfig": { - "type": "object", - "properties": { - "address": { - "$ref": "#/components/schemas/IpNet" - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id (if any) associated with this address.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "address" - ] - }, - "VirtioDisk": { - "description": "A disk that presents a virtio-block interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the disk's backend component.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "pci_path": { - "description": "The PCI bus/device/function at which this disk should be attached.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtioNetworkBackend": { - "description": "A network backend associated with a virtio-net (viona) VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the viona VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "VirtioNic": { - "description": "A network card that presents a virtio-net interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the device's backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "interface_id": { - "description": "A caller-defined correlation identifier for this interface. If Propolis is configured to collect network interface kstats in its Oximeter metrics, the metric series for this interface will be associated with this identifier.", - "type": "string", - "format": "uuid" - }, - "pci_path": { - "description": "The PCI path at which to attach this device.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "interface_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtualNetworkInterfaceHost": { - "description": "A mapping from a virtual NIC to a physical host", - "type": "object", - "properties": { - "physical_host_ip": { - "type": "string", - "format": "ipv6" - }, - "virtual_ip": { - "type": "string", - "format": "ip" - }, - "virtual_mac": { - "$ref": "#/components/schemas/MacAddr" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "physical_host_ip", - "virtual_ip", - "virtual_mac", - "vni" - ] - }, - "VmmIssueDiskSnapshotRequestBody": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmIssueDiskSnapshotRequestResponse": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmPutStateBody": { - "description": "The body of a request to move a previously-ensured instance into a specific runtime state.", - "type": "object", - "properties": { - "state": { - "description": "The state into which the instance should be driven.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmStateRequested" - } - ] - } - }, - "required": [ - "state" - ] - }, - "VmmPutStateResponse": { - "description": "The response sent from a request to move an instance into a specific runtime state.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current runtime state of the instance after handling the request to change its state. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "VmmRuntimeState": { - "description": "The dynamic runtime properties of an individual VMM process.", - "type": "object", - "properties": { - "gen": { - "description": "The generation number for this VMM's state.", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "state": { - "description": "The last state reported by this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmState" - } - ] - }, - "time_updated": { - "description": "Timestamp for the VMM's state.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "gen", - "state", - "time_updated" - ] - }, - "VmmSpec": { - "description": "Specifies the virtual hardware configuration of a new Propolis VMM in the form of a Propolis instance specification.\n\nSled-agent expects that when an instance spec is provided alongside an `InstanceSledLocalConfig` to initialize a new instance, the NIC IDs in that config's network interface list will match the IDs of the virtio network backends in the instance spec.", - "allOf": [ - { - "$ref": "#/components/schemas/InstanceSpecV0" - } - ] - }, - "VmmState": { - "description": "One of the states that a VMM can be in.", - "oneOf": [ - { - "description": "The VMM is initializing and has not started running guest CPUs yet.", - "type": "string", - "enum": [ - "starting" - ] - }, - { - "description": "The VMM has finished initializing and may be running guest CPUs.", - "type": "string", - "enum": [ - "running" - ] - }, - { - "description": "The VMM is shutting down.", - "type": "string", - "enum": [ - "stopping" - ] - }, - { - "description": "The VMM's guest has stopped, and the guest will not run again, but the VMM process may not have released all of its resources yet.", - "type": "string", - "enum": [ - "stopped" - ] - }, - { - "description": "The VMM is being restarted or its guest OS is rebooting.", - "type": "string", - "enum": [ - "rebooting" - ] - }, - { - "description": "The VMM is part of a live migration.", - "type": "string", - "enum": [ - "migrating" - ] - }, - { - "description": "The VMM process reported an internal failure.", - "type": "string", - "enum": [ - "failed" - ] - }, - { - "description": "The VMM process has been destroyed and its resources have been released.", - "type": "string", - "enum": [ - "destroyed" - ] - } - ] - }, - "VmmStateRequested": { - "description": "Requestable running state of an Instance.\n\nA subset of [`omicron_common::api::external::InstanceState`].", - "oneOf": [ - { - "description": "Run this instance by migrating in from a previous running incarnation of the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "migration_target" - ] - }, - "value": { - "$ref": "#/components/schemas/InstanceMigrationTargetParams" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Start the instance if it is not already running.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Stop the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "stopped" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Immediately reset the instance, as though it had stopped and immediately began to run again.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "reboot" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "VmmUnregisterResponse": { - "description": "The response sent from a request to unregister an instance.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current state of the instance after handling the request to unregister it. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "Vni": { - "description": "A Geneve Virtual Network Identifier", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "VpcFirewallIcmpFilter": { - "type": "object", - "properties": { - "code": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/IcmpParamRange" - } - ] - }, - "icmp_type": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "icmp_type" - ] - }, - "VpcFirewallRuleAction": { - "type": "string", - "enum": [ - "allow", - "deny" - ] - }, - "VpcFirewallRuleDirection": { - "type": "string", - "enum": [ - "inbound", - "outbound" - ] - }, - "VpcFirewallRuleProtocol": { - "description": "The protocols that may be specified in a firewall rule's filter", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "tcp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "udp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "icmp" - ] - }, - "value": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallIcmpFilter" - } - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleStatus": { - "type": "string", - "enum": [ - "disabled", - "enabled" - ] - }, - "VpcFirewallRulesEnsureBody": { - "description": "Update firewall rules for a VPC", - "type": "object", - "properties": { - "rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcFirewallRule" - } - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "rules", - "vni" - ] - }, - "ZoneArtifactInventory": { - "description": "Inventory representation of a single zone artifact on a boot disk.\n\nPart of [`ZoneManifestBootInventory`].", - "type": "object", - "properties": { - "expected_hash": { - "description": "The expected digest of the file's contents.", - "type": "string", - "format": "hex string (32 bytes)" - }, - "expected_size": { - "description": "The expected size of the file, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "file_name": { - "description": "The name of the zone file on disk, for example `nexus.tar.gz`. Zone files are always \".tar.gz\".", - "type": "string" - }, - "path": { - "description": "The full path to the zone file.", - "type": "string", - "format": "Utf8PathBuf" - }, - "status": { - "description": "The status of the artifact.\n\nThis is `Ok(())` if the artifact is present and matches the expected size and digest, or an error message if it is missing or does not match.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "type": "null" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "type": "string", - "enum": [ - null - ] - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "expected_hash", - "expected_size", - "file_name", - "path", - "status" - ] - }, - "ZoneBundleCause": { - "description": "The reason or cause for a zone bundle, i.e., why it was created.", - "oneOf": [ - { - "description": "Some other, unspecified reason.", - "type": "string", - "enum": [ - "other" - ] - }, - { - "description": "A zone bundle taken when a sled agent finds a zone that it does not expect to be running.", - "type": "string", - "enum": [ - "unexpected_zone" - ] - }, - { - "description": "An instance zone was terminated.", - "type": "string", - "enum": [ - "terminated_instance" - ] - } - ] - }, - "ZoneBundleId": { - "description": "An identifier for a zone bundle.", - "type": "object", - "properties": { - "bundle_id": { - "description": "The ID for this bundle itself.", - "type": "string", - "format": "uuid" - }, - "zone_name": { - "description": "The name of the zone this bundle is derived from.", - "type": "string" - } - }, - "required": [ - "bundle_id", - "zone_name" - ] - }, - "ZoneBundleMetadata": { - "description": "Metadata about a zone bundle.", - "type": "object", - "properties": { - "cause": { - "description": "The reason or cause a bundle was created.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleCause" - } - ] - }, - "id": { - "description": "Identifier for this zone bundle", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleId" - } - ] - }, - "time_created": { - "description": "The time at which this zone bundle was created.", - "type": "string", - "format": "date-time" - }, - "version": { - "description": "A version number for this zone bundle.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "cause", - "id", - "time_created", - "version" - ] - }, - "ZoneImageResolverInventory": { - "description": "Inventory representation of zone image resolver status and health.", - "type": "object", - "properties": { - "mupdate_override": { - "description": "The mupdate override status.", - "allOf": [ - { - "$ref": "#/components/schemas/MupdateOverrideInventory" - } - ] - }, - "zone_manifest": { - "description": "The zone manifest status.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneManifestInventory" - } - ] - } - }, - "required": [ - "mupdate_override", - "zone_manifest" - ] - }, - "ZoneManifestBootInventory": { - "description": "Inventory representation of zone artifacts on the boot disk.\n\nPart of [`ZoneManifestInventory`].", - "type": "object", - "properties": { - "artifacts": { - "title": "IdOrdMap", - "description": "The artifacts on disk.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneArtifactInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneArtifactInventory" - }, - "uniqueItems": true - }, - "source": { - "description": "The manifest source.\n\nIn production this is [`OmicronZoneManifestSource::Installinator`], but in some development and testing flows Sled Agent synthesizes zone manifests. In those cases, the source is [`OmicronZoneManifestSource::SledAgent`].", - "allOf": [ - { - "$ref": "#/components/schemas/OmicronZoneManifestSource" - } - ] - } - }, - "required": [ - "artifacts", - "source" - ] - }, - "ZoneManifestInventory": { - "description": "Inventory representation of a zone manifest.\n\nPart of [`ZoneImageResolverInventory`].\n\nA zone manifest is a listing of all the zones present in a system's install dataset. This struct contains information about the install dataset gathered from a system.", - "type": "object", - "properties": { - "boot_disk_path": { - "description": "The full path to the zone manifest file on the boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "boot_inventory": { - "description": "The manifest read from the boot disk, and whether the manifest is valid.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_status": { - "title": "IdOrdMap", - "description": "Information about the install dataset on non-boot disks.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - }, - "uniqueItems": true - } - }, - "required": [ - "boot_disk_path", - "boot_inventory", - "non_boot_status" - ] - }, - "ZoneManifestNonBootInventory": { - "description": "Inventory representation of a zone manifest on a non-boot disk.\n\nUnlike [`ZoneManifestBootInventory`] which is structured since Reconfigurator makes decisions based on it, information about non-boot disks is purely advisory. For simplicity, we store information in an unstructured format.", - "type": "object", - "properties": { - "is_valid": { - "description": "Whether the status is valid.", - "type": "boolean" - }, - "message": { - "description": "A message describing the status.\n\nIf `is_valid` is true, then the message describes the list of artifacts found and their hashes.\n\nIf `is_valid` is false, then this message describes the reason for the invalid status. This could include errors reading the zone manifest, or zone file mismatches.", - "type": "string" - }, - "path": { - "description": "The full path to the zone manifest JSON on the non-boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "zpool_id": { - "description": "The ID of the non-boot zpool.", - "allOf": [ - { - "$ref": "#/components/schemas/TypedUuidForInternalZpoolKind" - } - ] - } - }, - "required": [ - "is_valid", - "message", - "path", - "zpool_id" - ] - }, - "ZpoolName": { - "title": "The name of a Zpool", - "description": "Zpool names are of the format ox{i,p}_. They are either Internal or External, and should be unique", - "type": "string", - "pattern": "^ox[ip]_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" - }, - "TypedUuidForPropolisKind": { - "type": "string", - "format": "uuid" - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } -} diff --git a/openapi/sled-agent/sled-agent-4.0.0-fd6727.json.gitref b/openapi/sled-agent/sled-agent-4.0.0-fd6727.json.gitref new file mode 100644 index 00000000000..9e02bf9bbe9 --- /dev/null +++ b/openapi/sled-agent/sled-agent-4.0.0-fd6727.json.gitref @@ -0,0 +1 @@ +e76962a5f67b8c5bf813ee24a7600634de708b35:openapi/sled-agent/sled-agent-4.0.0-fd6727.json \ No newline at end of file diff --git a/openapi/sled-agent/sled-agent-5.0.0-253577.json b/openapi/sled-agent/sled-agent-5.0.0-253577.json deleted file mode 100644 index 2f35aeb083f..00000000000 --- a/openapi/sled-agent/sled-agent-5.0.0-253577.json +++ /dev/null @@ -1,8438 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Sled Agent API", - "description": "API for interacting with individual sleds", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "5.0.0" - }, - "paths": { - "/artifacts": { - "get": { - "operationId": "artifact_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactListResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}": { - "put": { - "operationId": "artifact_put", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactPutResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}/copy-from-depot": { - "post": { - "operationId": "artifact_copy_from_depot", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotBody" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts-config": { - "get": { - "operationId": "artifact_config_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "artifact_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/bootstore/status": { - "get": { - "summary": "Get the internal state of the local bootstore node", - "operationId": "bootstore_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BootstoreStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/debug/switch-zone-policy": { - "get": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.", - "operationId": "debug_operator_switch_zone_policy_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.\n\nSetting the switch zone policy is asynchronous and inherently racy with the standard process of starting the switch zone. If the switch zone is in the process of being started or stopped when this policy is changed, the new policy may not take effect until that transition completes.", - "operationId": "debug_operator_switch_zone_policy_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/disks/{disk_id}": { - "put": { - "operationId": "disk_put", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskRuntimeState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/eip-gateways": { - "put": { - "summary": "Update per-NIC IP address <-> internet gateway mappings.", - "operationId": "set_eip_gateways", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIpGatewayMap" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/inventory": { - "get": { - "summary": "Fetch basic information about this sled", - "operationId": "inventory", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Inventory" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/network-bootstore-config": { - "get": { - "summary": "This API endpoint is only reading the local sled agent's view of the", - "description": "bootstore. The boostore is a distributed data store that is eventually consistent. Reads from individual nodes may not represent the latest state.", - "operationId": "read_network_bootstore_config_cache", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "write_network_bootstore_config", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/omicron-config": { - "put": { - "operationId": "omicron_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OmicronSledConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-identifiers": { - "get": { - "summary": "Fetch sled identifiers", - "operationId": "sled_identifiers", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledIdentifiers" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-role": { - "get": { - "operationId": "sled_role_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledRole" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sleds": { - "put": { - "summary": "Add a sled to a rack that was already initialized via RSS", - "operationId": "sled_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddSledRequest" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/dladm-info": { - "get": { - "operationId": "support_dladm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/health-check": { - "get": { - "operationId": "support_health_check", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/ipadm-info": { - "get": { - "operationId": "support_ipadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/logs/download/{zone}": { - "get": { - "summary": "This endpoint returns a zip file of a zone's logs organized by service.", - "operationId": "support_logs_download", - "parameters": [ - { - "in": "path", - "name": "zone", - "description": "The zone for which one would like to collect logs for", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "max_rotated", - "description": "The max number of rotated logs to include in the final support bundle", - "required": true, - "schema": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support/logs/zones": { - "get": { - "summary": "This endpoint returns a list of known zones on a sled that have service", - "description": "logs that can be collected into a support bundle.", - "operationId": "support_logs", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/nvmeadm-info": { - "get": { - "operationId": "support_nvmeadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pargs-info": { - "get": { - "operationId": "support_pargs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pfiles-info": { - "get": { - "operationId": "support_pfiles_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pstack-info": { - "get": { - "operationId": "support_pstack_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zfs-info": { - "get": { - "operationId": "support_zfs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zoneadm-info": { - "get": { - "operationId": "support_zoneadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zpool-info": { - "get": { - "operationId": "support_zpool_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}": { - "get": { - "summary": "List all support bundles within a particular dataset", - "operationId": "support_bundle_list", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SupportBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}": { - "post": { - "summary": "Starts creation of a support bundle within a particular dataset", - "description": "Callers should transfer chunks of the bundle with \"support_bundle_transfer\", and then call \"support_bundle_finalize\" once the bundle has finished transferring.\n\nIf a support bundle was previously created without being finalized successfully, this endpoint will reset the state.\n\nIf a support bundle was previously created and finalized successfully, this endpoint will return metadata indicating that it already exists.", - "operationId": "support_bundle_start_creation", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a support bundle from a particular dataset", - "operationId": "support_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download": { - "get": { - "summary": "Fetch a support bundle from a particular dataset", - "operationId": "support_bundle_download", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a support bundle from a particular dataset", - "operationId": "support_bundle_head", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download/{file}": { - "get": { - "summary": "Fetch a file within a support bundle from a particular dataset", - "operationId": "support_bundle_download_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a file within a support bundle from a particular dataset", - "operationId": "support_bundle_head_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/finalize": { - "post": { - "summary": "Finalizes the creation of a support bundle", - "description": "If the requested hash matched the bundle, the bundle is created. Otherwise, an error is returned.", - "operationId": "support_bundle_finalize", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - }, - { - "in": "query", - "name": "hash", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/index": { - "get": { - "summary": "Fetch the index (list of files within a support bundle)", - "operationId": "support_bundle_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about the list of files within a support bundle", - "operationId": "support_bundle_head_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/transfer": { - "put": { - "summary": "Transfers a chunk of a support bundle within a particular dataset", - "operationId": "support_bundle_transfer", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - }, - { - "in": "query", - "name": "offset", - "required": true, - "schema": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/switch-ports": { - "post": { - "operationId": "uplink_ensure", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPorts" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v2p": { - "get": { - "summary": "List v2p mappings present on sled", - "operationId": "list_v2p", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_VirtualNetworkInterfaceHost", - "type": "array", - "items": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Create a mapping from a virtual NIC to a physical host", - "operationId": "set_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a mapping from a virtual NIC to a physical host", - "operationId": "del_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}": { - "put": { - "operationId": "vmm_register", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_unregister", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmUnregisterResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/disks/{disk_id}/snapshot": { - "post": { - "summary": "Take a snapshot of a disk that is attached to an instance", - "operationId": "vmm_issue_disk_snapshot_request", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/external-ip": { - "put": { - "operationId": "vmm_put_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_delete_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/state": { - "get": { - "operationId": "vmm_get_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "vmm_put_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc/{vpc_id}/firewall/rules": { - "put": { - "operationId": "vpc_firewall_rules_put", - "parameters": [ - { - "in": "path", - "name": "vpc_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRulesEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc-routes": { - "get": { - "summary": "Get the current versions of VPC routing rules.", - "operationId": "list_vpc_routes", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteState", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteState" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update VPC routing rules.", - "operationId": "set_vpc_routes", - "requestBody": { - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteSet", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteSet" - } - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones": { - "get": { - "summary": "List the zones that are currently managed by the sled agent.", - "operationId": "zones_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup": { - "post": { - "summary": "Trigger a zone bundle cleanup.", - "operationId": "zone_bundle_cleanup", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_CleanupCount", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/CleanupCount" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/context": { - "get": { - "summary": "Return context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContext" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContextUpdate" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/utilization": { - "get": { - "summary": "Return utilization information about all zone bundles.", - "operationId": "zone_bundle_utilization", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_BundleUtilization", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/BundleUtilization" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles": { - "get": { - "summary": "List all zone bundles that exist, even for now-deleted zones.", - "operationId": "zone_bundle_list_all", - "parameters": [ - { - "in": "query", - "name": "filter", - "description": "An optional substring used to filter zone bundles.", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}": { - "get": { - "summary": "List the zone bundles that are available for a running zone.", - "operationId": "zone_bundle_list", - "parameters": [ - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}/{bundle_id}": { - "get": { - "summary": "Fetch the binary content of a single zone bundle.", - "operationId": "zone_bundle_get", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a zone bundle.", - "operationId": "zone_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "AddSledRequest": { - "description": "A request to Add a given sled after rack initialization has occurred", - "type": "object", - "properties": { - "sled_id": { - "$ref": "#/components/schemas/BaseboardId" - }, - "start_request": { - "$ref": "#/components/schemas/StartSledAgentRequest" - } - }, - "required": [ - "sled_id", - "start_request" - ] - }, - "ArtifactConfig": { - "type": "object", - "properties": { - "artifacts": { - "type": "array", - "items": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "uniqueItems": true - }, - "generation": { - "$ref": "#/components/schemas/Generation" - } - }, - "required": [ - "artifacts", - "generation" - ] - }, - "ArtifactCopyFromDepotBody": { - "type": "object", - "properties": { - "depot_base_url": { - "type": "string" - } - }, - "required": [ - "depot_base_url" - ] - }, - "ArtifactCopyFromDepotResponse": { - "type": "object" - }, - "ArtifactListResponse": { - "type": "object", - "properties": { - "generation": { - "$ref": "#/components/schemas/Generation" - }, - "list": { - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - }, - "required": [ - "generation", - "list" - ] - }, - "ArtifactPutResponse": { - "type": "object", - "properties": { - "datasets": { - "description": "The number of valid M.2 artifact datasets we found on the sled. There is typically one of these datasets for each functional M.2.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "successful_writes": { - "description": "The number of valid writes to the M.2 artifact datasets. This should be less than or equal to the number of artifact datasets.", - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "required": [ - "datasets", - "successful_writes" - ] - }, - "Baseboard": { - "description": "Describes properties that should uniquely identify a Gimlet.", - "oneOf": [ - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "gimlet" - ] - } - }, - "required": [ - "identifier", - "model", - "revision", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "pc" - ] - } - }, - "required": [ - "identifier", - "model", - "type" - ] - } - ] - }, - "BaseboardId": { - "description": "A representation of a Baseboard ID as used in the inventory subsystem This type is essentially the same as a `Baseboard` except it doesn't have a revision or HW type (Gimlet, PC, Unknown).", - "type": "object", - "properties": { - "part_number": { - "description": "Oxide Part Number", - "type": "string" - }, - "serial_number": { - "description": "Serial number (unique for a given part number)", - "type": "string" - } - }, - "required": [ - "part_number", - "serial_number" - ] - }, - "BfdMode": { - "description": "BFD connection mode.", - "type": "string", - "enum": [ - "single_hop", - "multi_hop" - ] - }, - "BfdPeerConfig": { - "type": "object", - "properties": { - "detection_threshold": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "type": "string", - "format": "ip" - }, - "mode": { - "$ref": "#/components/schemas/BfdMode" - }, - "remote": { - "type": "string", - "format": "ip" - }, - "required_rx": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "$ref": "#/components/schemas/SwitchLocation" - } - }, - "required": [ - "detection_threshold", - "mode", - "remote", - "required_rx", - "switch" - ] - }, - "BgpConfig": { - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number for the BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "checker": { - "nullable": true, - "description": "Checker to apply to incoming messages.", - "default": null, - "type": "string" - }, - "originate": { - "description": "The set of prefixes for the BGP router to originate.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - }, - "shaper": { - "nullable": true, - "description": "Shaper to apply to outgoing messages.", - "default": null, - "type": "string" - } - }, - "required": [ - "asn", - "originate" - ] - }, - "BgpPeerConfig": { - "type": "object", - "properties": { - "addr": { - "description": "Address of the peer.", - "type": "string", - "format": "ipv4" - }, - "allowed_export": { - "description": "Define export policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "allowed_import": { - "description": "Define import policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "asn": { - "description": "The autonomous system number of the router the peer belongs to.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "communities": { - "description": "Include the provided communities in updates sent to the peer.", - "default": [], - "type": "array", - "items": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "connect_retry": { - "nullable": true, - "description": "The interval in seconds between peer connection retry attempts.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "delay_open": { - "nullable": true, - "description": "How long to delay sending open messages to a peer. In seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "enforce_first_as": { - "description": "Enforce that the first AS in paths received from this peer is the peer's AS.", - "default": false, - "type": "boolean" - }, - "hold_time": { - "nullable": true, - "description": "How long to keep a session alive without a keepalive in seconds. Defaults to 6.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "idle_hold_time": { - "nullable": true, - "description": "How long to keep a peer in idle after a state machine reset in seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "keepalive": { - "nullable": true, - "description": "The interval to send keepalive messages at.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "local_pref": { - "nullable": true, - "description": "Apply a local preference to routes received from this peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "md5_auth_key": { - "nullable": true, - "description": "Use the given key for TCP-MD5 authentication with the peer.", - "default": null, - "type": "string" - }, - "min_ttl": { - "nullable": true, - "description": "Require messages from a peer have a minimum IP time to live field.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "multi_exit_discriminator": { - "nullable": true, - "description": "Apply the provided multi-exit discriminator (MED) updates sent to the peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "port": { - "description": "Switch port the peer is reachable on.", - "type": "string" - }, - "remote_asn": { - "nullable": true, - "description": "Require that a peer has a specified ASN.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "Associate a VLAN ID with a BGP peer session.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "addr", - "asn", - "port" - ] - }, - "BlobStorageBackend": { - "description": "A storage backend for a disk whose initial contents are given explicitly by the specification.", - "type": "object", - "properties": { - "base64": { - "description": "The disk's initial contents, encoded as a base64 string.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - } - }, - "required": [ - "base64", - "readonly" - ], - "additionalProperties": false - }, - "Board": { - "description": "A VM's mainboard.", - "type": "object", - "properties": { - "chipset": { - "description": "The chipset to expose to guest software.", - "allOf": [ - { - "$ref": "#/components/schemas/Chipset" - } - ] - }, - "cpuid": { - "nullable": true, - "description": "The CPUID values to expose to the guest. If `None`, bhyve will derive default values from the host's CPUID values.", - "allOf": [ - { - "$ref": "#/components/schemas/Cpuid" - } - ] - }, - "cpus": { - "description": "The number of virtual logical processors attached to this VM.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "guest_hv_interface": { - "description": "The hypervisor platform to expose to the guest. The default is a bhyve-compatible interface with no additional features.\n\nFor compatibility with older versions of Propolis, this field is only serialized if it specifies a non-default interface.", - "allOf": [ - { - "$ref": "#/components/schemas/GuestHypervisorInterface" - } - ] - }, - "memory_mb": { - "description": "The amount of guest RAM attached to this VM.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "chipset", - "cpus", - "memory_mb" - ], - "additionalProperties": false - }, - "BootImageHeader": { - "type": "object", - "properties": { - "data_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "flags": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "image_name": { - "type": "string" - }, - "image_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "sha256": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 32, - "maxItems": 32 - }, - "target_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "data_size", - "flags", - "image_name", - "image_size", - "sha256", - "target_size" - ] - }, - "BootOrderEntry": { - "description": "An entry in the boot order stored in a [`BootSettings`] component.", - "type": "object", - "properties": { - "id": { - "description": "The ID of another component in the spec that Propolis should try to boot from.\n\nCurrently, only disk device components are supported.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - } - }, - "required": [ - "id" - ] - }, - "BootPartitionContents": { - "type": "object", - "properties": { - "boot_disk": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/M2Slot" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/M2Slot" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_a": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_b": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "boot_disk", - "slot_a", - "slot_b" - ] - }, - "BootPartitionDetails": { - "type": "object", - "properties": { - "artifact_hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "artifact_size": { - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "header": { - "$ref": "#/components/schemas/BootImageHeader" - } - }, - "required": [ - "artifact_hash", - "artifact_size", - "header" - ] - }, - "BootSettings": { - "description": "Settings supplied to the guest's firmware image that specify the order in which it should consider its options when selecting a device to try to boot from.", - "type": "object", - "properties": { - "order": { - "description": "An ordered list of components to attempt to boot from.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BootOrderEntry" - } - } - }, - "required": [ - "order" - ], - "additionalProperties": false - }, - "BootstoreStatus": { - "type": "object", - "properties": { - "accepted_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "established_connections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EstablishedConnection" - } - }, - "fsm_ledger_generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "fsm_state": { - "type": "string" - }, - "negotiating_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "network_config_ledger_generation": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "peers": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - } - }, - "required": [ - "accepted_connections", - "established_connections", - "fsm_ledger_generation", - "fsm_state", - "negotiating_connections", - "peers" - ] - }, - "BundleUtilization": { - "description": "The portion of a debug dataset used for zone bundles.", - "type": "object", - "properties": { - "bytes_available": { - "description": "The total number of bytes available for zone bundles.\n\nThis is `dataset_quota` multiplied by the context's storage limit.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes_used": { - "description": "Total bundle usage, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "dataset_quota": { - "description": "The total dataset quota, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bytes_available", - "bytes_used", - "dataset_quota" - ] - }, - "ByteCount": { - "description": "Byte count to express memory or storage capacity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "Chipset": { - "description": "A kind of virtual chipset.", - "oneOf": [ - { - "description": "An Intel 440FX-compatible chipset.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i440_fx" - ] - }, - "value": { - "$ref": "#/components/schemas/I440Fx" - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "CleanupContext": { - "description": "Context provided for the zone bundle cleanup task.", - "type": "object", - "properties": { - "period": { - "description": "The period on which automatic checks and cleanup is performed.", - "allOf": [ - { - "$ref": "#/components/schemas/CleanupPeriod" - } - ] - }, - "priority": { - "description": "The priority ordering for keeping old bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "description": "The limit on the dataset quota available for zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/StorageLimit" - } - ] - } - }, - "required": [ - "period", - "priority", - "storage_limit" - ] - }, - "CleanupContextUpdate": { - "description": "Parameters used to update the zone bundle cleanup context.", - "type": "object", - "properties": { - "period": { - "nullable": true, - "description": "The new period on which automatic cleanups are run.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "priority": { - "nullable": true, - "description": "The priority ordering for preserving old zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "nullable": true, - "description": "The new limit on the underlying dataset quota allowed for bundles.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "CleanupCount": { - "description": "The count of bundles / bytes removed during a cleanup operation.", - "type": "object", - "properties": { - "bundles": { - "description": "The number of bundles removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes": { - "description": "The number of bytes removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bundles", - "bytes" - ] - }, - "CleanupPeriod": { - "description": "A period on which bundles are automatically cleaned up.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "ComponentV0": { - "oneOf": [ - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioDisk" - }, - "type": { - "type": "string", - "enum": [ - "virtio_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/NvmeDisk" - }, - "type": { - "type": "string", - "enum": [ - "nvme_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNic" - }, - "type": { - "type": "string", - "enum": [ - "virtio_nic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SerialPort" - }, - "type": { - "type": "string", - "enum": [ - "serial_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/PciPciBridge" - }, - "type": { - "type": "string", - "enum": [ - "pci_pci_bridge" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/QemuPvpanic" - }, - "type": { - "type": "string", - "enum": [ - "qemu_pvpanic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BootSettings" - }, - "type": { - "type": "string", - "enum": [ - "boot_settings" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPciPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_pci_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuP9" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_p9" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/P9fs" - }, - "type": { - "type": "string", - "enum": [ - "p9fs" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/MigrationFailureInjector" - }, - "type": { - "type": "string", - "enum": [ - "migration_failure_injector" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/CrucibleStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "crucible_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/FileStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "file_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BlobStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "blob_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "virtio_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/DlpiNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "dlpi_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - } - ] - }, - "CompressionAlgorithm": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "on" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "off" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "gzip" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "level": { - "$ref": "#/components/schemas/GzipLevel" - }, - "type": { - "type": "string", - "enum": [ - "gzip_n" - ] - } - }, - "required": [ - "level", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lz4" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lzjb" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "zle" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "ConfigReconcilerInventory": { - "description": "Describes the last attempt made by the sled-agent-config-reconciler to reconcile the current sled config against the actual state of the sled.", - "type": "object", - "properties": { - "boot_partitions": { - "$ref": "#/components/schemas/BootPartitionContents" - }, - "datasets": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "external_disks": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "last_reconciled_config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "orphaned_datasets": { - "title": "IdOrdMap", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/OrphanedDataset" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/OrphanedDataset" - }, - "uniqueItems": true - }, - "remove_mupdate_override": { - "nullable": true, - "description": "The result of removing the mupdate override file on disk.\n\n`None` if `remove_mupdate_override` was not provided in the sled config.", - "allOf": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideInventory" - } - ] - }, - "zones": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - } - }, - "required": [ - "boot_partitions", - "datasets", - "external_disks", - "last_reconciled_config", - "orphaned_datasets", - "zones" - ] - }, - "ConfigReconcilerInventoryResult": { - "oneOf": [ - { - "type": "object", - "properties": { - "result": { - "type": "string", - "enum": [ - "ok" - ] - } - }, - "required": [ - "result" - ] - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "result": { - "type": "string", - "enum": [ - "err" - ] - } - }, - "required": [ - "message", - "result" - ] - } - ] - }, - "ConfigReconcilerInventoryStatus": { - "description": "Status of the sled-agent-config-reconciler task.", - "oneOf": [ - { - "description": "The reconciler task has not yet run for the first time since sled-agent started.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "not_yet_run" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The reconciler task is actively running.", - "type": "object", - "properties": { - "config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "running_for": { - "$ref": "#/components/schemas/Duration" - }, - "started_at": { - "type": "string", - "format": "date-time" - }, - "status": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "config", - "running_for", - "started_at", - "status" - ] - }, - { - "description": "The reconciler task is currently idle, but previously did complete a reconciliation attempt.\n\nThis variant does not include the `OmicronSledConfig` used in the last attempt, because that's always available via [`ConfigReconcilerInventory::last_reconciled_config`].", - "type": "object", - "properties": { - "completed_at": { - "type": "string", - "format": "date-time" - }, - "ran_for": { - "$ref": "#/components/schemas/Duration" - }, - "status": { - "type": "string", - "enum": [ - "idle" - ] - } - }, - "required": [ - "completed_at", - "ran_for", - "status" - ] - } - ] - }, - "Cpuid": { - "description": "A set of CPUID values to expose to a guest.", - "type": "object", - "properties": { - "entries": { - "description": "A list of CPUID leaves/subleaves and their associated values.\n\nPropolis servers require that each entry's `leaf` be unique and that it falls in either the \"standard\" (0 to 0xFFFF) or \"extended\" (0x8000_0000 to 0x8000_FFFF) function ranges, since these are the only valid input ranges currently defined by Intel and AMD. See the Intel 64 and IA-32 Architectures Software Developer's Manual (June 2024) Table 3-17 and the AMD64 Architecture Programmer's Manual (March 2024) Volume 3's documentation of the CPUID instruction.", - "type": "array", - "items": { - "$ref": "#/components/schemas/CpuidEntry" - } - }, - "vendor": { - "description": "The CPU vendor to emulate.\n\nCPUID leaves in the extended range (0x8000_0000 to 0x8000_FFFF) have vendor-defined semantics. Propolis uses this value to determine these semantics when deciding whether it needs to specialize the supplied template values for these leaves.", - "allOf": [ - { - "$ref": "#/components/schemas/CpuidVendor" - } - ] - } - }, - "required": [ - "entries", - "vendor" - ], - "additionalProperties": false - }, - "CpuidEntry": { - "description": "A full description of a CPUID leaf/subleaf and the values it produces.", - "type": "object", - "properties": { - "eax": { - "description": "The value to return in eax.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ebx": { - "description": "The value to return in ebx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ecx": { - "description": "The value to return in ecx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "edx": { - "description": "The value to return in edx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "leaf": { - "description": "The leaf (function) number for this entry.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "subleaf": { - "nullable": true, - "description": "The subleaf (index) number for this entry, if it uses subleaves.", - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "eax", - "ebx", - "ecx", - "edx", - "leaf" - ], - "additionalProperties": false - }, - "CpuidVendor": { - "description": "A CPU vendor to use when interpreting the meanings of CPUID leaves in the extended ID range (0x80000000 to 0x8000FFFF).", - "type": "string", - "enum": [ - "amd", - "intel" - ] - }, - "CrucibleStorageBackend": { - "description": "A Crucible storage backend.", - "type": "object", - "properties": { - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "request_json": { - "description": "A serialized `[crucible_client_types::VolumeConstructionRequest]`. This is stored in serialized form so that breaking changes to the definition of a `VolumeConstructionRequest` do not inadvertently break instance spec deserialization.\n\nWhen using a spec to initialize a new instance, the spec author must ensure this request is well-formed and can be deserialized by the version of `crucible_client_types` used by the target Propolis.", - "type": "string" - } - }, - "required": [ - "readonly", - "request_json" - ], - "additionalProperties": false - }, - "DatasetConfig": { - "description": "Configuration information necessary to request a single dataset.\n\nThese datasets are tracked directly by Nexus.", - "type": "object", - "properties": { - "compression": { - "description": "The compression mode to be used by the dataset", - "allOf": [ - { - "$ref": "#/components/schemas/CompressionAlgorithm" - } - ] - }, - "id": { - "description": "The UUID of the dataset being requested", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetUuid" - } - ] - }, - "name": { - "description": "The dataset's name", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetName" - } - ] - }, - "quota": { - "nullable": true, - "description": "The upper bound on the amount of storage used by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "reservation": { - "nullable": true, - "description": "The lower bound on the amount of storage usable by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "compression", - "id", - "name" - ] - }, - "DatasetKind": { - "description": "The kind of dataset. See the `DatasetKind` enum in omicron-common for possible values.", - "type": "string" - }, - "DatasetName": { - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/DatasetKind" - }, - "pool_name": { - "$ref": "#/components/schemas/ZpoolName" - } - }, - "required": [ - "kind", - "pool_name" - ] - }, - "DatasetUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::DatasetUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "DhcpConfig": { - "description": "DHCP configuration for a port\n\nNot present here: Hostname (DHCPv4 option 12; used in DHCPv6 option 39); we use `InstanceRuntimeState::hostname` for this value.", - "type": "object", - "properties": { - "dns_servers": { - "description": "DNS servers to send to the instance\n\n(DHCPv4 option 6; DHCPv6 option 23)", - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - }, - "host_domain": { - "nullable": true, - "description": "DNS zone this instance's hostname belongs to (e.g. the `project.example` part of `instance1.project.example`)\n\n(DHCPv4 option 15; used in DHCPv6 option 39)", - "type": "string" - }, - "search_domains": { - "description": "DNS search domains\n\n(DHCPv4 option 119; DHCPv6 option 24)", - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "dns_servers", - "search_domains" - ] - }, - "DiskEnsureBody": { - "description": "Sent from to a sled agent to establish the runtime state of a Disk", - "type": "object", - "properties": { - "initial_runtime": { - "description": "Last runtime state of the Disk known to Nexus (used if the agent has never seen this Disk before).", - "allOf": [ - { - "$ref": "#/components/schemas/DiskRuntimeState" - } - ] - }, - "target": { - "description": "requested runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskStateRequested" - } - ] - } - }, - "required": [ - "initial_runtime", - "target" - ] - }, - "DiskIdentity": { - "description": "Uniquely identifies a disk.", - "type": "object", - "properties": { - "model": { - "type": "string" - }, - "serial": { - "type": "string" - }, - "vendor": { - "type": "string" - } - }, - "required": [ - "model", - "serial", - "vendor" - ] - }, - "DiskRuntimeState": { - "description": "Runtime state of the Disk, which includes its attach state and some minimal metadata", - "type": "object", - "properties": { - "disk_state": { - "description": "runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskState" - } - ] - }, - "gen": { - "description": "generation number for this state", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "time_updated": { - "description": "timestamp for this information", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "disk_state", - "gen", - "time_updated" - ] - }, - "DiskState": { - "description": "State of a Disk", - "oneOf": [ - { - "description": "Disk is being initialized", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "creating" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready but detached from any Instance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready to receive blocks from an external source", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "import_ready" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from a URL", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_url" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from bulk writes", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_bulk_writes" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being finalized to state Detached", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "finalizing" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is undergoing maintenance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "maintenance" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is being detached from the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "detaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk has been destroyed", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is unavailable", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskStateRequested": { - "description": "Used to request a Disk state change", - "oneOf": [ - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskVariant": { - "type": "string", - "enum": [ - "U2", - "M2" - ] - }, - "DlpiNetworkBackend": { - "description": "A network backend associated with a DLPI VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "Duration": { - "type": "object", - "properties": { - "nanos": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "secs": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "nanos", - "secs" - ] - }, - "EarlyNetworkConfig": { - "description": "Network configuration required to bring up the control plane\n\nThe fields in this structure are those from [`crate::rack_init::RackInitializeRequest`] necessary for use beyond RSS. This is just for the initial rack configuration and cold boot purposes. Updates come from Nexus.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/EarlyNetworkConfigBody" - }, - "generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "EarlyNetworkConfigBody": { - "description": "This is the actual configuration of EarlyNetworking.\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "ntp_servers": { - "description": "The external NTP server addresses.", - "type": "array", - "items": { - "type": "string" - } - }, - "rack_network_config": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RackNetworkConfigV2" - } - ] - } - }, - "required": [ - "ntp_servers" - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "EstablishedConnection": { - "type": "object", - "properties": { - "addr": { - "type": "string" - }, - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - } - }, - "required": [ - "addr", - "baseboard" - ] - }, - "ExternalIpGatewayMap": { - "description": "Per-NIC mappings from external IP addresses to the Internet Gateways which can choose them as a source.", - "type": "object", - "properties": { - "mappings": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - } - } - } - }, - "required": [ - "mappings" - ] - }, - "FileStorageBackend": { - "description": "A storage backend backed by a file in the host system's file system.", - "type": "object", - "properties": { - "block_size": { - "description": "Block size of the backend", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "path": { - "description": "A path to a file that backs a disk.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "workers": { - "nullable": true, - "description": "Optional worker threads for the file backend, exposed for testing only.", - "type": "integer", - "format": "uint", - "minimum": 1 - } - }, - "required": [ - "block_size", - "path", - "readonly" - ], - "additionalProperties": false - }, - "Generation": { - "description": "Generation numbers stored in the database, used for optimistic concurrency control", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "GuestHypervisorInterface": { - "description": "A hypervisor interface to expose to the guest.", - "oneOf": [ - { - "description": "Expose a bhyve-like interface (\"bhyve bhyve \" as the hypervisor ID in leaf 0x4000_0000 and no additional leaves or features).", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bhyve" - ] - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "description": "Expose a Hyper-V-compatible hypervisor interface with the supplied features enabled.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "hyper_v" - ] - }, - "value": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HyperVFeatureFlag" - }, - "uniqueItems": true - } - }, - "required": [ - "features" - ], - "additionalProperties": false - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "GzipLevel": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "HostIdentifier": { - "description": "A `HostIdentifier` represents either an IP host or network (v4 or v6), or an entire VPC (identified by its VNI). It is used in firewall rule host filters.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "HostPhase2DesiredContents": { - "description": "Describes the desired contents of a host phase 2 slot (i.e., the boot partition on one of the internal M.2 drives).", - "oneOf": [ - { - "description": "Do not change the current contents.\n\nWe use this value when we've detected a sled has been mupdated (and we don't want to overwrite phase 2 images until we understand how to recover from that mupdate) and as the default value when reading an [`OmicronSledConfig`] that was ledgered before this concept existed.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "current_contents" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Set the phase 2 slot to the given artifact.\n\nThe artifact will come from an unpacked and distributed TUF repo.", - "type": "object", - "properties": { - "hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "type": { - "type": "string", - "enum": [ - "artifact" - ] - } - }, - "required": [ - "hash", - "type" - ] - } - ] - }, - "HostPhase2DesiredSlots": { - "description": "Describes the desired contents for both host phase 2 slots.", - "type": "object", - "properties": { - "slot_a": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - }, - "slot_b": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - } - }, - "required": [ - "slot_a", - "slot_b" - ] - }, - "HostPortConfig": { - "type": "object", - "properties": { - "addrs": { - "description": "IP Address and prefix (e.g., `192.168.0.1/16`) to apply to switchport (must be in infra_ip pool). May also include an optional VLAN ID.", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "lldp": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Switchport to use for external connectivity", - "type": "string" - }, - "tx_eq": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - } - }, - "required": [ - "addrs", - "port" - ] - }, - "Hostname": { - "title": "An RFC-1035-compliant hostname", - "description": "A hostname identifies a host on a network, and is usually a dot-delimited sequence of labels, where each label contains only letters, digits, or the hyphen. See RFCs 1035 and 952 for more details.", - "type": "string", - "pattern": "^([a-zA-Z0-9]+[a-zA-Z0-9\\-]*(? for background.", - "oneOf": [ - { - "description": "Start the switch zone if a switch is present.\n\nThis is the default policy.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "start_if_switch_present" - ] - } - }, - "required": [ - "policy" - ] - }, - { - "description": "Even if a switch zone is present, stop the switch zone.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "stop_despite_switch_presence" - ] - } - }, - "required": [ - "policy" - ] - } - ] - }, - "OrphanedDataset": { - "type": "object", - "properties": { - "available": { - "$ref": "#/components/schemas/ByteCount" - }, - "id": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/DatasetUuid" - } - ] - }, - "mounted": { - "type": "boolean" - }, - "name": { - "$ref": "#/components/schemas/DatasetName" - }, - "reason": { - "type": "string" - }, - "used": { - "$ref": "#/components/schemas/ByteCount" - } - }, - "required": [ - "available", - "mounted", - "name", - "reason", - "used" - ] - }, - "P9fs": { - "description": "Describes a filesystem to expose through a P9 device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "chunk_size": { - "description": "The chunk size to use in the 9P protocol. Vanilla Helios images should use 8192. Falcon Helios base images and Linux can use up to 65536.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach the guest to this P9 filesystem.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - }, - "source": { - "description": "The host source path to mount into the guest.", - "type": "string" - }, - "target": { - "description": "The 9P target filesystem tag.", - "type": "string" - } - }, - "required": [ - "chunk_size", - "pci_path", - "source", - "target" - ], - "additionalProperties": false - }, - "PciPath": { - "description": "A PCI bus/device/function tuple.", - "type": "object", - "properties": { - "bus": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "device": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "function": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "bus", - "device", - "function" - ] - }, - "PciPciBridge": { - "description": "A PCI-PCI bridge.", - "type": "object", - "properties": { - "downstream_bus": { - "description": "The logical bus number of this bridge's downstream bus. Other devices may use this bus number in their PCI paths to indicate they should be attached to this bridge's bus.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach this bridge.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "downstream_bus", - "pci_path" - ], - "additionalProperties": false - }, - "PhysicalDiskUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::PhysicalDiskUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "PortConfigV2": { - "type": "object", - "properties": { - "addresses": { - "description": "This port's addresses and optional vlan IDs", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "autoneg": { - "description": "Whether or not to set autonegotiation", - "default": false, - "type": "boolean" - }, - "bgp_peers": { - "description": "BGP peers on this port", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeerConfig" - } - }, - "lldp": { - "nullable": true, - "description": "LLDP configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Nmae of the port this config applies to.", - "type": "string" - }, - "routes": { - "description": "The set of routes associated with this port.", - "type": "array", - "items": { - "$ref": "#/components/schemas/RouteConfig" - } - }, - "switch": { - "description": "Switch the port belongs to.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - }, - "tx_eq": { - "nullable": true, - "description": "TX-EQ configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - }, - "uplink_port_fec": { - "nullable": true, - "description": "Port forward error correction type.", - "allOf": [ - { - "$ref": "#/components/schemas/PortFec" - } - ] - }, - "uplink_port_speed": { - "description": "Port speed.", - "allOf": [ - { - "$ref": "#/components/schemas/PortSpeed" - } - ] - } - }, - "required": [ - "addresses", - "bgp_peers", - "port", - "routes", - "switch", - "uplink_port_speed" - ] - }, - "PortFec": { - "description": "Switchport FEC options", - "type": "string", - "enum": [ - "firecode", - "none", - "rs" - ] - }, - "PortSpeed": { - "description": "Switchport Speed options", - "type": "string", - "enum": [ - "speed0_g", - "speed1_g", - "speed10_g", - "speed25_g", - "speed40_g", - "speed50_g", - "speed100_g", - "speed200_g", - "speed400_g" - ] - }, - "PriorityDimension": { - "description": "A dimension along with bundles can be sorted, to determine priority.", - "oneOf": [ - { - "description": "Sorting by time, with older bundles with lower priority.", - "type": "string", - "enum": [ - "time" - ] - }, - { - "description": "Sorting by the cause for creating the bundle.", - "type": "string", - "enum": [ - "cause" - ] - } - ] - }, - "PriorityOrder": { - "description": "The priority order for bundles during cleanup.\n\nBundles are sorted along the dimensions in [`PriorityDimension`], with each dimension appearing exactly once. During cleanup, lesser-priority bundles are pruned first, to maintain the dataset quota. Note that bundles are sorted by each dimension in the order in which they appear, with each dimension having higher priority than the next.", - "type": "array", - "items": { - "$ref": "#/components/schemas/PriorityDimension" - }, - "minItems": 2, - "maxItems": 2 - }, - "QemuPvpanic": { - "type": "object", - "properties": { - "enable_isa": { - "description": "Enable the QEMU PVPANIC ISA bus device (I/O port 0x505).", - "type": "boolean" - } - }, - "required": [ - "enable_isa" - ], - "additionalProperties": false - }, - "RackNetworkConfigV2": { - "description": "Initial network configuration", - "type": "object", - "properties": { - "bfd": { - "description": "BFD configuration for connecting the rack to external networks", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/BfdPeerConfig" - } - }, - "bgp": { - "description": "BGP configurations for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpConfig" - } - }, - "infra_ip_first": { - "description": "First ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "infra_ip_last": { - "description": "Last ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "ports": { - "description": "Uplinks for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/PortConfigV2" - } - }, - "rack_subnet": { - "$ref": "#/components/schemas/Ipv6Net" - } - }, - "required": [ - "bgp", - "infra_ip_first", - "infra_ip_last", - "ports", - "rack_subnet" - ] - }, - "RemoveMupdateOverrideBootSuccessInventory": { - "description": "Status of removing the mupdate override on the boot disk.", - "oneOf": [ - { - "description": "The mupdate override was successfully removed.", - "type": "string", - "enum": [ - "removed" - ] - }, - { - "description": "No mupdate override was found.\n\nThis is considered a success for idempotency reasons.", - "type": "string", - "enum": [ - "no_override" - ] - } - ] - }, - "RemoveMupdateOverrideInventory": { - "description": "Status of removing the mupdate override in the inventory.", - "type": "object", - "properties": { - "boot_disk_result": { - "description": "The result of removing the mupdate override on the boot disk.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_message": { - "description": "What happened on non-boot disks.\n\nWe aren't modeling this out in more detail, because we plan to not try and keep ledgered data in sync across both disks in the future.", - "type": "string" - } - }, - "required": [ - "boot_disk_result", - "non_boot_message" - ] - }, - "ResolvedVpcFirewallRule": { - "description": "VPC firewall rule after object name resolution has been performed by Nexus", - "type": "object", - "properties": { - "action": { - "$ref": "#/components/schemas/VpcFirewallRuleAction" - }, - "direction": { - "$ref": "#/components/schemas/VpcFirewallRuleDirection" - }, - "filter_hosts": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/HostIdentifier" - }, - "uniqueItems": true - }, - "filter_ports": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/L4PortRange" - } - }, - "filter_protocols": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleProtocol" - } - }, - "priority": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "status": { - "$ref": "#/components/schemas/VpcFirewallRuleStatus" - }, - "targets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NetworkInterface" - } - } - }, - "required": [ - "action", - "direction", - "priority", - "status", - "targets" - ] - }, - "ResolvedVpcRoute": { - "description": "A VPC route resolved into a concrete target.", - "type": "object", - "properties": { - "dest": { - "$ref": "#/components/schemas/IpNet" - }, - "target": { - "$ref": "#/components/schemas/RouterTarget" - } - }, - "required": [ - "dest", - "target" - ] - }, - "ResolvedVpcRouteSet": { - "description": "An updated set of routes for a given VPC and/or subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "routes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRoute" - }, - "uniqueItems": true - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id", - "routes" - ] - }, - "ResolvedVpcRouteState": { - "description": "Version information for routes on a given VPC subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id" - ] - }, - "RouteConfig": { - "type": "object", - "properties": { - "destination": { - "description": "The destination of the route.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "nexthop": { - "description": "The nexthop/gateway address.", - "type": "string", - "format": "ip" - }, - "rib_priority": { - "nullable": true, - "description": "The RIB priority (i.e. Admin Distance) associated with this route.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id associated with this route.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "destination", - "nexthop" - ] - }, - "RouterId": { - "description": "Identifier for a VPC and/or subnet.", - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/RouterKind" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "kind", - "vni" - ] - }, - "RouterKind": { - "description": "The scope of a set of VPC router rules.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "system" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "subnet": { - "$ref": "#/components/schemas/IpNet" - }, - "type": { - "type": "string", - "enum": [ - "custom" - ] - } - }, - "required": [ - "subnet", - "type" - ] - } - ] - }, - "RouterTarget": { - "description": "The target for a given router entry.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "drop" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "internet_gateway" - ] - }, - "value": { - "$ref": "#/components/schemas/InternetGatewayRouterTarget" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc_subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "RouterVersion": { - "description": "Information on the current parent router (and version) of a route set according to the control plane.", - "type": "object", - "properties": { - "router_id": { - "type": "string", - "format": "uuid" - }, - "version": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "router_id", - "version" - ] - }, - "SerialPort": { - "description": "A serial port device.", - "type": "object", - "properties": { - "num": { - "description": "The serial port number for this port.", - "allOf": [ - { - "$ref": "#/components/schemas/SerialPortNumber" - } - ] - } - }, - "required": [ - "num" - ], - "additionalProperties": false - }, - "SerialPortNumber": { - "description": "A serial port identifier, which determines what I/O ports a guest can use to access a port.", - "type": "string", - "enum": [ - "com1", - "com2", - "com3", - "com4" - ] - }, - "SledCpuFamily": { - "description": "Identifies the kind of CPU present on a sled, determined by reading CPUID.\n\nThis is intended to broadly support the control plane answering the question \"can I run this instance on that sled?\" given an instance with either no or some CPU platform requirement. It is not enough information for more precise placement questions - for example, is a CPU a high-frequency part or many-core part? We don't include Genoa here, but in that CPU family there are high frequency parts, many-core parts, and large-cache parts. To support those questions (or satisfactorily answer #8730) we would need to collect additional information and send it along.", - "oneOf": [ - { - "description": "The CPU vendor or its family number don't correspond to any of the known family variants.", - "type": "string", - "enum": [ - "unknown" - ] - }, - { - "description": "AMD Milan processors (or very close). Could be an actual Milan in a Gimlet, a close-to-Milan client Zen 3 part, or Zen 4 (for which Milan is the greatest common denominator).", - "type": "string", - "enum": [ - "amd_milan" - ] - }, - { - "description": "AMD Turin processors (or very close). Could be an actual Turin in a Cosmo, or a close-to-Turin client Zen 5 part.", - "type": "string", - "enum": [ - "amd_turin" - ] - }, - { - "description": "AMD Turin Dense processors. There are no \"Turin Dense-like\" CPUs unlike other cases, so this means a bona fide Zen 5c Turin Dense part.", - "type": "string", - "enum": [ - "amd_turin_dense" - ] - } - ] - }, - "SledDiagnosticsQueryOutput": { - "oneOf": [ - { - "type": "object", - "properties": { - "success": { - "type": "object", - "properties": { - "command": { - "description": "The command and its arguments.", - "type": "string" - }, - "exit_code": { - "nullable": true, - "description": "The exit code if one was present when the command exited.", - "type": "integer", - "format": "int32" - }, - "exit_status": { - "description": "The exit status of the command. This will be the exit code (if any) and exit reason such as from a signal.", - "type": "string" - }, - "stdio": { - "description": "Any stdout/stderr produced by the command.", - "type": "string" - } - }, - "required": [ - "command", - "exit_status", - "stdio" - ] - } - }, - "required": [ - "success" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "failure": { - "type": "object", - "properties": { - "error": { - "description": "The reason the command failed to execute.", - "type": "string" - } - }, - "required": [ - "error" - ] - } - }, - "required": [ - "failure" - ], - "additionalProperties": false - } - ] - }, - "SledIdentifiers": { - "description": "Identifiers for a single sled.\n\nThis is intended primarily to be used in timeseries, to identify sled from which metric data originates.", - "type": "object", - "properties": { - "model": { - "description": "Model name of the sled", - "type": "string" - }, - "rack_id": { - "description": "Control plane ID of the rack this sled is a member of", - "type": "string", - "format": "uuid" - }, - "revision": { - "description": "Revision number of the sled", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "serial": { - "description": "Serial number of the sled", - "type": "string" - }, - "sled_id": { - "description": "Control plane ID for the sled itself", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "model", - "rack_id", - "revision", - "serial", - "sled_id" - ] - }, - "SledRole": { - "description": "Describes the role of the sled within the rack.\n\nNote that this may change if the sled is physically moved within the rack.", - "oneOf": [ - { - "description": "The sled is a general compute sled.", - "type": "string", - "enum": [ - "gimlet" - ] - }, - { - "description": "The sled is attached to the network switch, and has additional responsibilities.", - "type": "string", - "enum": [ - "scrimlet" - ] - } - ] - }, - "SledUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::SledUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "SledVmmState": { - "description": "A wrapper type containing a sled's total knowledge of the state of a VMM.", - "type": "object", - "properties": { - "migration_in": { - "nullable": true, - "description": "The current state of any inbound migration to this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "migration_out": { - "nullable": true, - "description": "The state of any outbound migration from this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "vmm_state": { - "description": "The most recent state of the sled's VMM process.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmRuntimeState" - } - ] - } - }, - "required": [ - "vmm_state" - ] - }, - "SoftNpuP9": { - "description": "Describes a PCI device that shares host files with the guest using the P9 protocol.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPciPort": { - "description": "Describes a SoftNPU PCI device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPort": { - "description": "Describes a port in a SoftNPU emulated ASIC.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the port's associated DLPI backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "link_name": { - "description": "The data link name for this port.", - "type": "string" - } - }, - "required": [ - "backend_id", - "link_name" - ], - "additionalProperties": false - }, - "SourceNatConfig": { - "description": "An IP address and port range used for source NAT, i.e., making outbound network connections from guests or services.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used for source NAT, inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external address provided to the instance or service.", - "type": "string", - "format": "ip" - }, - "last_port": { - "description": "The last port used for source NAT, also inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "last_port" - ] - }, - "SpecKey": { - "description": "A key identifying a component in an instance spec.", - "oneOf": [ - { - "title": "uuid", - "allOf": [ - { - "type": "string", - "format": "uuid" - } - ] - }, - { - "title": "name", - "allOf": [ - { - "type": "string" - } - ] - } - ] - }, - "StartSledAgentRequest": { - "description": "Configuration information for launching a Sled Agent.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/StartSledAgentRequestBody" - }, - "generation": { - "description": "The current generation number of data as stored in CRDB.\n\nThe initial generation is set during RSS time and then only mutated by Nexus. For now, we don't actually anticipate mutating this data, but we leave open the possiblity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "StartSledAgentRequestBody": { - "description": "This is the actual app level data of `StartSledAgentRequest`\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "id": { - "description": "Uuid of the Sled Agent to be created.", - "allOf": [ - { - "$ref": "#/components/schemas/SledUuid" - } - ] - }, - "is_lrtq_learner": { - "description": "Is this node an LRTQ learner node?\n\nWe only put the node into learner mode if `use_trust_quorum` is also true.", - "type": "boolean" - }, - "rack_id": { - "description": "Uuid of the rack to which this sled agent belongs.", - "type": "string", - "format": "uuid" - }, - "subnet": { - "description": "Portion of the IP space to be managed by the Sled Agent.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Subnet" - } - ] - }, - "use_trust_quorum": { - "description": "Use trust quorum for key generation", - "type": "boolean" - } - }, - "required": [ - "id", - "is_lrtq_learner", - "rack_id", - "subnet", - "use_trust_quorum" - ] - }, - "StorageLimit": { - "description": "The limit on space allowed for zone bundles, as a percentage of the overall dataset's quota.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "SupportBundleMetadata": { - "description": "Metadata about a support bundle", - "type": "object", - "properties": { - "state": { - "$ref": "#/components/schemas/SupportBundleState" - }, - "support_bundle_id": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - "required": [ - "state", - "support_bundle_id" - ] - }, - "SupportBundleState": { - "type": "string", - "enum": [ - "complete", - "incomplete" - ] - }, - "SupportBundleUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::SupportBundleUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "SwitchLocation": { - "description": "Identifies switch physical location", - "oneOf": [ - { - "description": "Switch in upper slot", - "type": "string", - "enum": [ - "switch0" - ] - }, - { - "description": "Switch in lower slot", - "type": "string", - "enum": [ - "switch1" - ] - } - ] - }, - "SwitchPorts": { - "description": "A set of switch uplinks.", - "type": "object", - "properties": { - "uplinks": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HostPortConfig" - } - } - }, - "required": [ - "uplinks" - ] - }, - "TxEqConfig": { - "description": "Per-port tx-eq overrides. This can be used to fine-tune the transceiver equalization settings to improve signal integrity.", - "type": "object", - "properties": { - "main": { - "nullable": true, - "description": "Main tap", - "type": "integer", - "format": "int32" - }, - "post1": { - "nullable": true, - "description": "Post-cursor tap1", - "type": "integer", - "format": "int32" - }, - "post2": { - "nullable": true, - "description": "Post-cursor tap2", - "type": "integer", - "format": "int32" - }, - "pre1": { - "nullable": true, - "description": "Pre-cursor tap1", - "type": "integer", - "format": "int32" - }, - "pre2": { - "nullable": true, - "description": "Pre-cursor tap2", - "type": "integer", - "format": "int32" - } - } - }, - "UplinkAddressConfig": { - "type": "object", - "properties": { - "address": { - "$ref": "#/components/schemas/IpNet" - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id (if any) associated with this address.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "address" - ] - }, - "VirtioDisk": { - "description": "A disk that presents a virtio-block interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the disk's backend component.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "pci_path": { - "description": "The PCI bus/device/function at which this disk should be attached.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtioNetworkBackend": { - "description": "A network backend associated with a virtio-net (viona) VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the viona VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "VirtioNic": { - "description": "A network card that presents a virtio-net interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the device's backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "interface_id": { - "description": "A caller-defined correlation identifier for this interface. If Propolis is configured to collect network interface kstats in its Oximeter metrics, the metric series for this interface will be associated with this identifier.", - "type": "string", - "format": "uuid" - }, - "pci_path": { - "description": "The PCI path at which to attach this device.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "interface_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtualNetworkInterfaceHost": { - "description": "A mapping from a virtual NIC to a physical host", - "type": "object", - "properties": { - "physical_host_ip": { - "type": "string", - "format": "ipv6" - }, - "virtual_ip": { - "type": "string", - "format": "ip" - }, - "virtual_mac": { - "$ref": "#/components/schemas/MacAddr" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "physical_host_ip", - "virtual_ip", - "virtual_mac", - "vni" - ] - }, - "VmmIssueDiskSnapshotRequestBody": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmIssueDiskSnapshotRequestResponse": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmPutStateBody": { - "description": "The body of a request to move a previously-ensured instance into a specific runtime state.", - "type": "object", - "properties": { - "state": { - "description": "The state into which the instance should be driven.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmStateRequested" - } - ] - } - }, - "required": [ - "state" - ] - }, - "VmmPutStateResponse": { - "description": "The response sent from a request to move an instance into a specific runtime state.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current runtime state of the instance after handling the request to change its state. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "VmmRuntimeState": { - "description": "The dynamic runtime properties of an individual VMM process.", - "type": "object", - "properties": { - "gen": { - "description": "The generation number for this VMM's state.", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "state": { - "description": "The last state reported by this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmState" - } - ] - }, - "time_updated": { - "description": "Timestamp for the VMM's state.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "gen", - "state", - "time_updated" - ] - }, - "VmmSpec": { - "description": "Specifies the virtual hardware configuration of a new Propolis VMM in the form of a Propolis instance specification.\n\nSled-agent expects that when an instance spec is provided alongside an `InstanceSledLocalConfig` to initialize a new instance, the NIC IDs in that config's network interface list will match the IDs of the virtio network backends in the instance spec.", - "allOf": [ - { - "$ref": "#/components/schemas/InstanceSpecV0" - } - ] - }, - "VmmState": { - "description": "One of the states that a VMM can be in.", - "oneOf": [ - { - "description": "The VMM is initializing and has not started running guest CPUs yet.", - "type": "string", - "enum": [ - "starting" - ] - }, - { - "description": "The VMM has finished initializing and may be running guest CPUs.", - "type": "string", - "enum": [ - "running" - ] - }, - { - "description": "The VMM is shutting down.", - "type": "string", - "enum": [ - "stopping" - ] - }, - { - "description": "The VMM's guest has stopped, and the guest will not run again, but the VMM process may not have released all of its resources yet.", - "type": "string", - "enum": [ - "stopped" - ] - }, - { - "description": "The VMM is being restarted or its guest OS is rebooting.", - "type": "string", - "enum": [ - "rebooting" - ] - }, - { - "description": "The VMM is part of a live migration.", - "type": "string", - "enum": [ - "migrating" - ] - }, - { - "description": "The VMM process reported an internal failure.", - "type": "string", - "enum": [ - "failed" - ] - }, - { - "description": "The VMM process has been destroyed and its resources have been released.", - "type": "string", - "enum": [ - "destroyed" - ] - } - ] - }, - "VmmStateRequested": { - "description": "Requestable running state of an Instance.\n\nA subset of [`omicron_common::api::external::InstanceState`].", - "oneOf": [ - { - "description": "Run this instance by migrating in from a previous running incarnation of the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "migration_target" - ] - }, - "value": { - "$ref": "#/components/schemas/InstanceMigrationTargetParams" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Start the instance if it is not already running.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Stop the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "stopped" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Immediately reset the instance, as though it had stopped and immediately began to run again.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "reboot" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "VmmUnregisterResponse": { - "description": "The response sent from a request to unregister an instance.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current state of the instance after handling the request to unregister it. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "Vni": { - "description": "A Geneve Virtual Network Identifier", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "VpcFirewallIcmpFilter": { - "type": "object", - "properties": { - "code": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/IcmpParamRange" - } - ] - }, - "icmp_type": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "icmp_type" - ] - }, - "VpcFirewallRuleAction": { - "type": "string", - "enum": [ - "allow", - "deny" - ] - }, - "VpcFirewallRuleDirection": { - "type": "string", - "enum": [ - "inbound", - "outbound" - ] - }, - "VpcFirewallRuleProtocol": { - "description": "The protocols that may be specified in a firewall rule's filter", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "tcp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "udp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "icmp" - ] - }, - "value": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallIcmpFilter" - } - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleStatus": { - "type": "string", - "enum": [ - "disabled", - "enabled" - ] - }, - "VpcFirewallRulesEnsureBody": { - "description": "Update firewall rules for a VPC", - "type": "object", - "properties": { - "rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcFirewallRule" - } - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "rules", - "vni" - ] - }, - "ZoneArtifactInventory": { - "description": "Inventory representation of a single zone artifact on a boot disk.\n\nPart of [`ZoneManifestBootInventory`].", - "type": "object", - "properties": { - "expected_hash": { - "description": "The expected digest of the file's contents.", - "type": "string", - "format": "hex string (32 bytes)" - }, - "expected_size": { - "description": "The expected size of the file, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "file_name": { - "description": "The name of the zone file on disk, for example `nexus.tar.gz`. Zone files are always \".tar.gz\".", - "type": "string" - }, - "path": { - "description": "The full path to the zone file.", - "type": "string", - "format": "Utf8PathBuf" - }, - "status": { - "description": "The status of the artifact.\n\nThis is `Ok(())` if the artifact is present and matches the expected size and digest, or an error message if it is missing or does not match.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "type": "null" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "type": "string", - "enum": [ - null - ] - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "expected_hash", - "expected_size", - "file_name", - "path", - "status" - ] - }, - "ZoneBundleCause": { - "description": "The reason or cause for a zone bundle, i.e., why it was created.", - "oneOf": [ - { - "description": "Some other, unspecified reason.", - "type": "string", - "enum": [ - "other" - ] - }, - { - "description": "A zone bundle taken when a sled agent finds a zone that it does not expect to be running.", - "type": "string", - "enum": [ - "unexpected_zone" - ] - }, - { - "description": "An instance zone was terminated.", - "type": "string", - "enum": [ - "terminated_instance" - ] - } - ] - }, - "ZoneBundleId": { - "description": "An identifier for a zone bundle.", - "type": "object", - "properties": { - "bundle_id": { - "description": "The ID for this bundle itself.", - "type": "string", - "format": "uuid" - }, - "zone_name": { - "description": "The name of the zone this bundle is derived from.", - "type": "string" - } - }, - "required": [ - "bundle_id", - "zone_name" - ] - }, - "ZoneBundleMetadata": { - "description": "Metadata about a zone bundle.", - "type": "object", - "properties": { - "cause": { - "description": "The reason or cause a bundle was created.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleCause" - } - ] - }, - "id": { - "description": "Identifier for this zone bundle", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleId" - } - ] - }, - "time_created": { - "description": "The time at which this zone bundle was created.", - "type": "string", - "format": "date-time" - }, - "version": { - "description": "A version number for this zone bundle.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "cause", - "id", - "time_created", - "version" - ] - }, - "ZoneImageResolverInventory": { - "description": "Inventory representation of zone image resolver status and health.", - "type": "object", - "properties": { - "mupdate_override": { - "description": "The mupdate override status.", - "allOf": [ - { - "$ref": "#/components/schemas/MupdateOverrideInventory" - } - ] - }, - "zone_manifest": { - "description": "The zone manifest status.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneManifestInventory" - } - ] - } - }, - "required": [ - "mupdate_override", - "zone_manifest" - ] - }, - "ZoneManifestBootInventory": { - "description": "Inventory representation of zone artifacts on the boot disk.\n\nPart of [`ZoneManifestInventory`].", - "type": "object", - "properties": { - "artifacts": { - "title": "IdOrdMap", - "description": "The artifacts on disk.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneArtifactInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneArtifactInventory" - }, - "uniqueItems": true - }, - "source": { - "description": "The manifest source.\n\nIn production this is [`OmicronZoneManifestSource::Installinator`], but in some development and testing flows Sled Agent synthesizes zone manifests. In those cases, the source is [`OmicronZoneManifestSource::SledAgent`].", - "allOf": [ - { - "$ref": "#/components/schemas/OmicronZoneManifestSource" - } - ] - } - }, - "required": [ - "artifacts", - "source" - ] - }, - "ZoneManifestInventory": { - "description": "Inventory representation of a zone manifest.\n\nPart of [`ZoneImageResolverInventory`].\n\nA zone manifest is a listing of all the zones present in a system's install dataset. This struct contains information about the install dataset gathered from a system.", - "type": "object", - "properties": { - "boot_disk_path": { - "description": "The full path to the zone manifest file on the boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "boot_inventory": { - "description": "The manifest read from the boot disk, and whether the manifest is valid.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_status": { - "title": "IdOrdMap", - "description": "Information about the install dataset on non-boot disks.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - }, - "uniqueItems": true - } - }, - "required": [ - "boot_disk_path", - "boot_inventory", - "non_boot_status" - ] - }, - "ZoneManifestNonBootInventory": { - "description": "Inventory representation of a zone manifest on a non-boot disk.\n\nUnlike [`ZoneManifestBootInventory`] which is structured since Reconfigurator makes decisions based on it, information about non-boot disks is purely advisory. For simplicity, we store information in an unstructured format.", - "type": "object", - "properties": { - "is_valid": { - "description": "Whether the status is valid.", - "type": "boolean" - }, - "message": { - "description": "A message describing the status.\n\nIf `is_valid` is true, then the message describes the list of artifacts found and their hashes.\n\nIf `is_valid` is false, then this message describes the reason for the invalid status. This could include errors reading the zone manifest, or zone file mismatches.", - "type": "string" - }, - "path": { - "description": "The full path to the zone manifest JSON on the non-boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "zpool_id": { - "description": "The ID of the non-boot zpool.", - "allOf": [ - { - "$ref": "#/components/schemas/InternalZpoolUuid" - } - ] - } - }, - "required": [ - "is_valid", - "message", - "path", - "zpool_id" - ] - }, - "ZpoolName": { - "title": "The name of a Zpool", - "description": "Zpool names are of the format ox{i,p}_. They are either Internal or External, and should be unique", - "type": "string", - "pattern": "^ox[ip]_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" - }, - "ZpoolUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ZpoolUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "PropolisUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::PropolisUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } -} diff --git a/openapi/sled-agent/sled-agent-5.0.0-253577.json.gitref b/openapi/sled-agent/sled-agent-5.0.0-253577.json.gitref new file mode 100644 index 00000000000..711357e5b8c --- /dev/null +++ b/openapi/sled-agent/sled-agent-5.0.0-253577.json.gitref @@ -0,0 +1 @@ +4d5bdc6d348b27761348d763c4085f060bcefc18:openapi/sled-agent/sled-agent-5.0.0-253577.json \ No newline at end of file diff --git a/openapi/sled-agent/sled-agent-6.0.0-d37dd7.json b/openapi/sled-agent/sled-agent-6.0.0-d37dd7.json deleted file mode 100644 index 598fb0a39ea..00000000000 --- a/openapi/sled-agent/sled-agent-6.0.0-d37dd7.json +++ /dev/null @@ -1,8583 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Sled Agent API", - "description": "API for interacting with individual sleds", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "6.0.0" - }, - "paths": { - "/artifacts": { - "get": { - "operationId": "artifact_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactListResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}": { - "put": { - "operationId": "artifact_put", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactPutResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}/copy-from-depot": { - "post": { - "operationId": "artifact_copy_from_depot", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotBody" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts-config": { - "get": { - "operationId": "artifact_config_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "artifact_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/bootstore/status": { - "get": { - "summary": "Get the internal state of the local bootstore node", - "operationId": "bootstore_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BootstoreStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/debug/switch-zone-policy": { - "get": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.", - "operationId": "debug_operator_switch_zone_policy_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.\n\nSetting the switch zone policy is asynchronous and inherently racy with the standard process of starting the switch zone. If the switch zone is in the process of being started or stopped when this policy is changed, the new policy may not take effect until that transition completes.", - "operationId": "debug_operator_switch_zone_policy_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/disks/{disk_id}": { - "put": { - "operationId": "disk_put", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskRuntimeState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/eip-gateways": { - "put": { - "summary": "Update per-NIC IP address <-> internet gateway mappings.", - "operationId": "set_eip_gateways", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIpGatewayMap" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/inventory": { - "get": { - "summary": "Fetch basic information about this sled", - "operationId": "inventory", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Inventory" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/network-bootstore-config": { - "get": { - "summary": "This API endpoint is only reading the local sled agent's view of the", - "description": "bootstore. The boostore is a distributed data store that is eventually consistent. Reads from individual nodes may not represent the latest state.", - "operationId": "read_network_bootstore_config_cache", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "write_network_bootstore_config", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/omicron-config": { - "put": { - "operationId": "omicron_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OmicronSledConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/probes": { - "put": { - "summary": "Update the entire set of probe zones on this sled.", - "description": "Probe zones are used to debug networking configuration. They look similar to instances, in that they have an OPTE port on a VPC subnet and external addresses, but no actual VM.", - "operationId": "probes_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProbeSet" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-identifiers": { - "get": { - "summary": "Fetch sled identifiers", - "operationId": "sled_identifiers", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledIdentifiers" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-role": { - "get": { - "operationId": "sled_role_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledRole" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sleds": { - "put": { - "summary": "Add a sled to a rack that was already initialized via RSS", - "operationId": "sled_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddSledRequest" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/dladm-info": { - "get": { - "operationId": "support_dladm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/health-check": { - "get": { - "operationId": "support_health_check", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/ipadm-info": { - "get": { - "operationId": "support_ipadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/logs/download/{zone}": { - "get": { - "summary": "This endpoint returns a zip file of a zone's logs organized by service.", - "operationId": "support_logs_download", - "parameters": [ - { - "in": "path", - "name": "zone", - "description": "The zone for which one would like to collect logs for", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "max_rotated", - "description": "The max number of rotated logs to include in the final support bundle", - "required": true, - "schema": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support/logs/zones": { - "get": { - "summary": "This endpoint returns a list of known zones on a sled that have service", - "description": "logs that can be collected into a support bundle.", - "operationId": "support_logs", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/nvmeadm-info": { - "get": { - "operationId": "support_nvmeadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pargs-info": { - "get": { - "operationId": "support_pargs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pfiles-info": { - "get": { - "operationId": "support_pfiles_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pstack-info": { - "get": { - "operationId": "support_pstack_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zfs-info": { - "get": { - "operationId": "support_zfs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zoneadm-info": { - "get": { - "operationId": "support_zoneadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zpool-info": { - "get": { - "operationId": "support_zpool_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}": { - "get": { - "summary": "List all support bundles within a particular dataset", - "operationId": "support_bundle_list", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SupportBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}": { - "post": { - "summary": "Starts creation of a support bundle within a particular dataset", - "description": "Callers should transfer chunks of the bundle with \"support_bundle_transfer\", and then call \"support_bundle_finalize\" once the bundle has finished transferring.\n\nIf a support bundle was previously created without being finalized successfully, this endpoint will reset the state.\n\nIf a support bundle was previously created and finalized successfully, this endpoint will return metadata indicating that it already exists.", - "operationId": "support_bundle_start_creation", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a support bundle from a particular dataset", - "operationId": "support_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download": { - "get": { - "summary": "Fetch a support bundle from a particular dataset", - "operationId": "support_bundle_download", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a support bundle from a particular dataset", - "operationId": "support_bundle_head", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download/{file}": { - "get": { - "summary": "Fetch a file within a support bundle from a particular dataset", - "operationId": "support_bundle_download_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a file within a support bundle from a particular dataset", - "operationId": "support_bundle_head_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/finalize": { - "post": { - "summary": "Finalizes the creation of a support bundle", - "description": "If the requested hash matched the bundle, the bundle is created. Otherwise, an error is returned.", - "operationId": "support_bundle_finalize", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - }, - { - "in": "query", - "name": "hash", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/index": { - "get": { - "summary": "Fetch the index (list of files within a support bundle)", - "operationId": "support_bundle_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about the list of files within a support bundle", - "operationId": "support_bundle_head_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/transfer": { - "put": { - "summary": "Transfers a chunk of a support bundle within a particular dataset", - "operationId": "support_bundle_transfer", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - }, - { - "in": "query", - "name": "offset", - "required": true, - "schema": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/switch-ports": { - "post": { - "operationId": "uplink_ensure", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPorts" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v2p": { - "get": { - "summary": "List v2p mappings present on sled", - "operationId": "list_v2p", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_VirtualNetworkInterfaceHost", - "type": "array", - "items": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Create a mapping from a virtual NIC to a physical host", - "operationId": "set_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a mapping from a virtual NIC to a physical host", - "operationId": "del_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}": { - "put": { - "operationId": "vmm_register", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_unregister", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmUnregisterResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/disks/{disk_id}/snapshot": { - "post": { - "summary": "Take a snapshot of a disk that is attached to an instance", - "operationId": "vmm_issue_disk_snapshot_request", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/external-ip": { - "put": { - "operationId": "vmm_put_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_delete_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/state": { - "get": { - "operationId": "vmm_get_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "vmm_put_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc/{vpc_id}/firewall/rules": { - "put": { - "operationId": "vpc_firewall_rules_put", - "parameters": [ - { - "in": "path", - "name": "vpc_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRulesEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc-routes": { - "get": { - "summary": "Get the current versions of VPC routing rules.", - "operationId": "list_vpc_routes", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteState", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteState" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update VPC routing rules.", - "operationId": "set_vpc_routes", - "requestBody": { - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteSet", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteSet" - } - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones": { - "get": { - "summary": "List the zones that are currently managed by the sled agent.", - "operationId": "zones_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup": { - "post": { - "summary": "Trigger a zone bundle cleanup.", - "operationId": "zone_bundle_cleanup", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_CleanupCount", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/CleanupCount" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/context": { - "get": { - "summary": "Return context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContext" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContextUpdate" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/utilization": { - "get": { - "summary": "Return utilization information about all zone bundles.", - "operationId": "zone_bundle_utilization", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_BundleUtilization", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/BundleUtilization" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles": { - "get": { - "summary": "List all zone bundles that exist, even for now-deleted zones.", - "operationId": "zone_bundle_list_all", - "parameters": [ - { - "in": "query", - "name": "filter", - "description": "An optional substring used to filter zone bundles.", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}": { - "get": { - "summary": "List the zone bundles that are available for a running zone.", - "operationId": "zone_bundle_list", - "parameters": [ - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}/{bundle_id}": { - "get": { - "summary": "Fetch the binary content of a single zone bundle.", - "operationId": "zone_bundle_get", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a zone bundle.", - "operationId": "zone_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "AddSledRequest": { - "description": "A request to Add a given sled after rack initialization has occurred", - "type": "object", - "properties": { - "sled_id": { - "$ref": "#/components/schemas/BaseboardId" - }, - "start_request": { - "$ref": "#/components/schemas/StartSledAgentRequest" - } - }, - "required": [ - "sled_id", - "start_request" - ] - }, - "ArtifactConfig": { - "type": "object", - "properties": { - "artifacts": { - "type": "array", - "items": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "uniqueItems": true - }, - "generation": { - "$ref": "#/components/schemas/Generation" - } - }, - "required": [ - "artifacts", - "generation" - ] - }, - "ArtifactCopyFromDepotBody": { - "type": "object", - "properties": { - "depot_base_url": { - "type": "string" - } - }, - "required": [ - "depot_base_url" - ] - }, - "ArtifactCopyFromDepotResponse": { - "type": "object" - }, - "ArtifactListResponse": { - "type": "object", - "properties": { - "generation": { - "$ref": "#/components/schemas/Generation" - }, - "list": { - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - }, - "required": [ - "generation", - "list" - ] - }, - "ArtifactPutResponse": { - "type": "object", - "properties": { - "datasets": { - "description": "The number of valid M.2 artifact datasets we found on the sled. There is typically one of these datasets for each functional M.2.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "successful_writes": { - "description": "The number of valid writes to the M.2 artifact datasets. This should be less than or equal to the number of artifact datasets.", - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "required": [ - "datasets", - "successful_writes" - ] - }, - "Baseboard": { - "description": "Describes properties that should uniquely identify a Gimlet.", - "oneOf": [ - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "gimlet" - ] - } - }, - "required": [ - "identifier", - "model", - "revision", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "pc" - ] - } - }, - "required": [ - "identifier", - "model", - "type" - ] - } - ] - }, - "BaseboardId": { - "description": "A representation of a Baseboard ID as used in the inventory subsystem This type is essentially the same as a `Baseboard` except it doesn't have a revision or HW type (Gimlet, PC, Unknown).", - "type": "object", - "properties": { - "part_number": { - "description": "Oxide Part Number", - "type": "string" - }, - "serial_number": { - "description": "Serial number (unique for a given part number)", - "type": "string" - } - }, - "required": [ - "part_number", - "serial_number" - ] - }, - "BfdMode": { - "description": "BFD connection mode.", - "type": "string", - "enum": [ - "single_hop", - "multi_hop" - ] - }, - "BfdPeerConfig": { - "type": "object", - "properties": { - "detection_threshold": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "type": "string", - "format": "ip" - }, - "mode": { - "$ref": "#/components/schemas/BfdMode" - }, - "remote": { - "type": "string", - "format": "ip" - }, - "required_rx": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "$ref": "#/components/schemas/SwitchLocation" - } - }, - "required": [ - "detection_threshold", - "mode", - "remote", - "required_rx", - "switch" - ] - }, - "BgpConfig": { - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number for the BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "checker": { - "nullable": true, - "description": "Checker to apply to incoming messages.", - "default": null, - "type": "string" - }, - "originate": { - "description": "The set of prefixes for the BGP router to originate.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - }, - "shaper": { - "nullable": true, - "description": "Shaper to apply to outgoing messages.", - "default": null, - "type": "string" - } - }, - "required": [ - "asn", - "originate" - ] - }, - "BgpPeerConfig": { - "type": "object", - "properties": { - "addr": { - "description": "Address of the peer.", - "type": "string", - "format": "ipv4" - }, - "allowed_export": { - "description": "Define export policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "allowed_import": { - "description": "Define import policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "asn": { - "description": "The autonomous system number of the router the peer belongs to.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "communities": { - "description": "Include the provided communities in updates sent to the peer.", - "default": [], - "type": "array", - "items": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "connect_retry": { - "nullable": true, - "description": "The interval in seconds between peer connection retry attempts.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "delay_open": { - "nullable": true, - "description": "How long to delay sending open messages to a peer. In seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "enforce_first_as": { - "description": "Enforce that the first AS in paths received from this peer is the peer's AS.", - "default": false, - "type": "boolean" - }, - "hold_time": { - "nullable": true, - "description": "How long to keep a session alive without a keepalive in seconds. Defaults to 6.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "idle_hold_time": { - "nullable": true, - "description": "How long to keep a peer in idle after a state machine reset in seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "keepalive": { - "nullable": true, - "description": "The interval to send keepalive messages at.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "local_pref": { - "nullable": true, - "description": "Apply a local preference to routes received from this peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "md5_auth_key": { - "nullable": true, - "description": "Use the given key for TCP-MD5 authentication with the peer.", - "default": null, - "type": "string" - }, - "min_ttl": { - "nullable": true, - "description": "Require messages from a peer have a minimum IP time to live field.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "multi_exit_discriminator": { - "nullable": true, - "description": "Apply the provided multi-exit discriminator (MED) updates sent to the peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "port": { - "description": "Switch port the peer is reachable on.", - "type": "string" - }, - "remote_asn": { - "nullable": true, - "description": "Require that a peer has a specified ASN.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "Associate a VLAN ID with a BGP peer session.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "addr", - "asn", - "port" - ] - }, - "BlobStorageBackend": { - "description": "A storage backend for a disk whose initial contents are given explicitly by the specification.", - "type": "object", - "properties": { - "base64": { - "description": "The disk's initial contents, encoded as a base64 string.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - } - }, - "required": [ - "base64", - "readonly" - ], - "additionalProperties": false - }, - "Board": { - "description": "A VM's mainboard.", - "type": "object", - "properties": { - "chipset": { - "description": "The chipset to expose to guest software.", - "allOf": [ - { - "$ref": "#/components/schemas/Chipset" - } - ] - }, - "cpuid": { - "nullable": true, - "description": "The CPUID values to expose to the guest. If `None`, bhyve will derive default values from the host's CPUID values.", - "allOf": [ - { - "$ref": "#/components/schemas/Cpuid" - } - ] - }, - "cpus": { - "description": "The number of virtual logical processors attached to this VM.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "guest_hv_interface": { - "description": "The hypervisor platform to expose to the guest. The default is a bhyve-compatible interface with no additional features.\n\nFor compatibility with older versions of Propolis, this field is only serialized if it specifies a non-default interface.", - "allOf": [ - { - "$ref": "#/components/schemas/GuestHypervisorInterface" - } - ] - }, - "memory_mb": { - "description": "The amount of guest RAM attached to this VM.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "chipset", - "cpus", - "memory_mb" - ], - "additionalProperties": false - }, - "BootImageHeader": { - "type": "object", - "properties": { - "data_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "flags": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "image_name": { - "type": "string" - }, - "image_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "sha256": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 32, - "maxItems": 32 - }, - "target_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "data_size", - "flags", - "image_name", - "image_size", - "sha256", - "target_size" - ] - }, - "BootOrderEntry": { - "description": "An entry in the boot order stored in a [`BootSettings`] component.", - "type": "object", - "properties": { - "id": { - "description": "The ID of another component in the spec that Propolis should try to boot from.\n\nCurrently, only disk device components are supported.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - } - }, - "required": [ - "id" - ] - }, - "BootPartitionContents": { - "type": "object", - "properties": { - "boot_disk": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/M2Slot" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/M2Slot" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_a": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_b": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "boot_disk", - "slot_a", - "slot_b" - ] - }, - "BootPartitionDetails": { - "type": "object", - "properties": { - "artifact_hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "artifact_size": { - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "header": { - "$ref": "#/components/schemas/BootImageHeader" - } - }, - "required": [ - "artifact_hash", - "artifact_size", - "header" - ] - }, - "BootSettings": { - "description": "Settings supplied to the guest's firmware image that specify the order in which it should consider its options when selecting a device to try to boot from.", - "type": "object", - "properties": { - "order": { - "description": "An ordered list of components to attempt to boot from.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BootOrderEntry" - } - } - }, - "required": [ - "order" - ], - "additionalProperties": false - }, - "BootstoreStatus": { - "type": "object", - "properties": { - "accepted_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "established_connections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EstablishedConnection" - } - }, - "fsm_ledger_generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "fsm_state": { - "type": "string" - }, - "negotiating_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "network_config_ledger_generation": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "peers": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - } - }, - "required": [ - "accepted_connections", - "established_connections", - "fsm_ledger_generation", - "fsm_state", - "negotiating_connections", - "peers" - ] - }, - "BundleUtilization": { - "description": "The portion of a debug dataset used for zone bundles.", - "type": "object", - "properties": { - "bytes_available": { - "description": "The total number of bytes available for zone bundles.\n\nThis is `dataset_quota` multiplied by the context's storage limit.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes_used": { - "description": "Total bundle usage, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "dataset_quota": { - "description": "The total dataset quota, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bytes_available", - "bytes_used", - "dataset_quota" - ] - }, - "ByteCount": { - "description": "Byte count to express memory or storage capacity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "Chipset": { - "description": "A kind of virtual chipset.", - "oneOf": [ - { - "description": "An Intel 440FX-compatible chipset.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i440_fx" - ] - }, - "value": { - "$ref": "#/components/schemas/I440Fx" - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "CleanupContext": { - "description": "Context provided for the zone bundle cleanup task.", - "type": "object", - "properties": { - "period": { - "description": "The period on which automatic checks and cleanup is performed.", - "allOf": [ - { - "$ref": "#/components/schemas/CleanupPeriod" - } - ] - }, - "priority": { - "description": "The priority ordering for keeping old bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "description": "The limit on the dataset quota available for zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/StorageLimit" - } - ] - } - }, - "required": [ - "period", - "priority", - "storage_limit" - ] - }, - "CleanupContextUpdate": { - "description": "Parameters used to update the zone bundle cleanup context.", - "type": "object", - "properties": { - "period": { - "nullable": true, - "description": "The new period on which automatic cleanups are run.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "priority": { - "nullable": true, - "description": "The priority ordering for preserving old zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "nullable": true, - "description": "The new limit on the underlying dataset quota allowed for bundles.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "CleanupCount": { - "description": "The count of bundles / bytes removed during a cleanup operation.", - "type": "object", - "properties": { - "bundles": { - "description": "The number of bundles removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes": { - "description": "The number of bytes removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bundles", - "bytes" - ] - }, - "CleanupPeriod": { - "description": "A period on which bundles are automatically cleaned up.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "ComponentV0": { - "oneOf": [ - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioDisk" - }, - "type": { - "type": "string", - "enum": [ - "virtio_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/NvmeDisk" - }, - "type": { - "type": "string", - "enum": [ - "nvme_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNic" - }, - "type": { - "type": "string", - "enum": [ - "virtio_nic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SerialPort" - }, - "type": { - "type": "string", - "enum": [ - "serial_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/PciPciBridge" - }, - "type": { - "type": "string", - "enum": [ - "pci_pci_bridge" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/QemuPvpanic" - }, - "type": { - "type": "string", - "enum": [ - "qemu_pvpanic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BootSettings" - }, - "type": { - "type": "string", - "enum": [ - "boot_settings" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPciPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_pci_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuP9" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_p9" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/P9fs" - }, - "type": { - "type": "string", - "enum": [ - "p9fs" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/MigrationFailureInjector" - }, - "type": { - "type": "string", - "enum": [ - "migration_failure_injector" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/CrucibleStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "crucible_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/FileStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "file_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BlobStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "blob_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "virtio_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/DlpiNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "dlpi_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - } - ] - }, - "CompressionAlgorithm": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "on" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "off" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "gzip" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "level": { - "$ref": "#/components/schemas/GzipLevel" - }, - "type": { - "type": "string", - "enum": [ - "gzip_n" - ] - } - }, - "required": [ - "level", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lz4" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lzjb" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "zle" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "ConfigReconcilerInventory": { - "description": "Describes the last attempt made by the sled-agent-config-reconciler to reconcile the current sled config against the actual state of the sled.", - "type": "object", - "properties": { - "boot_partitions": { - "$ref": "#/components/schemas/BootPartitionContents" - }, - "datasets": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "external_disks": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "last_reconciled_config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "orphaned_datasets": { - "title": "IdOrdMap", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/OrphanedDataset" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/OrphanedDataset" - }, - "uniqueItems": true - }, - "remove_mupdate_override": { - "nullable": true, - "description": "The result of removing the mupdate override file on disk.\n\n`None` if `remove_mupdate_override` was not provided in the sled config.", - "allOf": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideInventory" - } - ] - }, - "zones": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - } - }, - "required": [ - "boot_partitions", - "datasets", - "external_disks", - "last_reconciled_config", - "orphaned_datasets", - "zones" - ] - }, - "ConfigReconcilerInventoryResult": { - "oneOf": [ - { - "type": "object", - "properties": { - "result": { - "type": "string", - "enum": [ - "ok" - ] - } - }, - "required": [ - "result" - ] - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "result": { - "type": "string", - "enum": [ - "err" - ] - } - }, - "required": [ - "message", - "result" - ] - } - ] - }, - "ConfigReconcilerInventoryStatus": { - "description": "Status of the sled-agent-config-reconciler task.", - "oneOf": [ - { - "description": "The reconciler task has not yet run for the first time since sled-agent started.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "not_yet_run" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The reconciler task is actively running.", - "type": "object", - "properties": { - "config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "running_for": { - "$ref": "#/components/schemas/Duration" - }, - "started_at": { - "type": "string", - "format": "date-time" - }, - "status": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "config", - "running_for", - "started_at", - "status" - ] - }, - { - "description": "The reconciler task is currently idle, but previously did complete a reconciliation attempt.\n\nThis variant does not include the `OmicronSledConfig` used in the last attempt, because that's always available via [`ConfigReconcilerInventory::last_reconciled_config`].", - "type": "object", - "properties": { - "completed_at": { - "type": "string", - "format": "date-time" - }, - "ran_for": { - "$ref": "#/components/schemas/Duration" - }, - "status": { - "type": "string", - "enum": [ - "idle" - ] - } - }, - "required": [ - "completed_at", - "ran_for", - "status" - ] - } - ] - }, - "Cpuid": { - "description": "A set of CPUID values to expose to a guest.", - "type": "object", - "properties": { - "entries": { - "description": "A list of CPUID leaves/subleaves and their associated values.\n\nPropolis servers require that each entry's `leaf` be unique and that it falls in either the \"standard\" (0 to 0xFFFF) or \"extended\" (0x8000_0000 to 0x8000_FFFF) function ranges, since these are the only valid input ranges currently defined by Intel and AMD. See the Intel 64 and IA-32 Architectures Software Developer's Manual (June 2024) Table 3-17 and the AMD64 Architecture Programmer's Manual (March 2024) Volume 3's documentation of the CPUID instruction.", - "type": "array", - "items": { - "$ref": "#/components/schemas/CpuidEntry" - } - }, - "vendor": { - "description": "The CPU vendor to emulate.\n\nCPUID leaves in the extended range (0x8000_0000 to 0x8000_FFFF) have vendor-defined semantics. Propolis uses this value to determine these semantics when deciding whether it needs to specialize the supplied template values for these leaves.", - "allOf": [ - { - "$ref": "#/components/schemas/CpuidVendor" - } - ] - } - }, - "required": [ - "entries", - "vendor" - ], - "additionalProperties": false - }, - "CpuidEntry": { - "description": "A full description of a CPUID leaf/subleaf and the values it produces.", - "type": "object", - "properties": { - "eax": { - "description": "The value to return in eax.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ebx": { - "description": "The value to return in ebx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ecx": { - "description": "The value to return in ecx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "edx": { - "description": "The value to return in edx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "leaf": { - "description": "The leaf (function) number for this entry.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "subleaf": { - "nullable": true, - "description": "The subleaf (index) number for this entry, if it uses subleaves.", - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "eax", - "ebx", - "ecx", - "edx", - "leaf" - ], - "additionalProperties": false - }, - "CpuidVendor": { - "description": "A CPU vendor to use when interpreting the meanings of CPUID leaves in the extended ID range (0x80000000 to 0x8000FFFF).", - "type": "string", - "enum": [ - "amd", - "intel" - ] - }, - "CrucibleStorageBackend": { - "description": "A Crucible storage backend.", - "type": "object", - "properties": { - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "request_json": { - "description": "A serialized `[crucible_client_types::VolumeConstructionRequest]`. This is stored in serialized form so that breaking changes to the definition of a `VolumeConstructionRequest` do not inadvertently break instance spec deserialization.\n\nWhen using a spec to initialize a new instance, the spec author must ensure this request is well-formed and can be deserialized by the version of `crucible_client_types` used by the target Propolis.", - "type": "string" - } - }, - "required": [ - "readonly", - "request_json" - ], - "additionalProperties": false - }, - "DatasetConfig": { - "description": "Configuration information necessary to request a single dataset.\n\nThese datasets are tracked directly by Nexus.", - "type": "object", - "properties": { - "compression": { - "description": "The compression mode to be used by the dataset", - "allOf": [ - { - "$ref": "#/components/schemas/CompressionAlgorithm" - } - ] - }, - "id": { - "description": "The UUID of the dataset being requested", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetUuid" - } - ] - }, - "name": { - "description": "The dataset's name", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetName" - } - ] - }, - "quota": { - "nullable": true, - "description": "The upper bound on the amount of storage used by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "reservation": { - "nullable": true, - "description": "The lower bound on the amount of storage usable by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "compression", - "id", - "name" - ] - }, - "DatasetKind": { - "description": "The kind of dataset. See the `DatasetKind` enum in omicron-common for possible values.", - "type": "string" - }, - "DatasetName": { - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/DatasetKind" - }, - "pool_name": { - "$ref": "#/components/schemas/ZpoolName" - } - }, - "required": [ - "kind", - "pool_name" - ] - }, - "DatasetUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::DatasetUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "DhcpConfig": { - "description": "DHCP configuration for a port\n\nNot present here: Hostname (DHCPv4 option 12; used in DHCPv6 option 39); we use `InstanceRuntimeState::hostname` for this value.", - "type": "object", - "properties": { - "dns_servers": { - "description": "DNS servers to send to the instance\n\n(DHCPv4 option 6; DHCPv6 option 23)", - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - }, - "host_domain": { - "nullable": true, - "description": "DNS zone this instance's hostname belongs to (e.g. the `project.example` part of `instance1.project.example`)\n\n(DHCPv4 option 15; used in DHCPv6 option 39)", - "type": "string" - }, - "search_domains": { - "description": "DNS search domains\n\n(DHCPv4 option 119; DHCPv6 option 24)", - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "dns_servers", - "search_domains" - ] - }, - "DiskEnsureBody": { - "description": "Sent from to a sled agent to establish the runtime state of a Disk", - "type": "object", - "properties": { - "initial_runtime": { - "description": "Last runtime state of the Disk known to Nexus (used if the agent has never seen this Disk before).", - "allOf": [ - { - "$ref": "#/components/schemas/DiskRuntimeState" - } - ] - }, - "target": { - "description": "requested runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskStateRequested" - } - ] - } - }, - "required": [ - "initial_runtime", - "target" - ] - }, - "DiskIdentity": { - "description": "Uniquely identifies a disk.", - "type": "object", - "properties": { - "model": { - "type": "string" - }, - "serial": { - "type": "string" - }, - "vendor": { - "type": "string" - } - }, - "required": [ - "model", - "serial", - "vendor" - ] - }, - "DiskRuntimeState": { - "description": "Runtime state of the Disk, which includes its attach state and some minimal metadata", - "type": "object", - "properties": { - "disk_state": { - "description": "runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskState" - } - ] - }, - "gen": { - "description": "generation number for this state", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "time_updated": { - "description": "timestamp for this information", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "disk_state", - "gen", - "time_updated" - ] - }, - "DiskState": { - "description": "State of a Disk", - "oneOf": [ - { - "description": "Disk is being initialized", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "creating" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready but detached from any Instance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready to receive blocks from an external source", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "import_ready" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from a URL", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_url" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from bulk writes", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_bulk_writes" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being finalized to state Detached", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "finalizing" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is undergoing maintenance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "maintenance" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is being detached from the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "detaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk has been destroyed", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is unavailable", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskStateRequested": { - "description": "Used to request a Disk state change", - "oneOf": [ - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskVariant": { - "type": "string", - "enum": [ - "U2", - "M2" - ] - }, - "DlpiNetworkBackend": { - "description": "A network backend associated with a DLPI VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "Duration": { - "type": "object", - "properties": { - "nanos": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "secs": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "nanos", - "secs" - ] - }, - "EarlyNetworkConfig": { - "description": "Network configuration required to bring up the control plane\n\nThe fields in this structure are those from [`crate::rack_init::RackInitializeRequest`] necessary for use beyond RSS. This is just for the initial rack configuration and cold boot purposes. Updates come from Nexus.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/EarlyNetworkConfigBody" - }, - "generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "EarlyNetworkConfigBody": { - "description": "This is the actual configuration of EarlyNetworking.\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "ntp_servers": { - "description": "The external NTP server addresses.", - "type": "array", - "items": { - "type": "string" - } - }, - "rack_network_config": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RackNetworkConfigV2" - } - ] - } - }, - "required": [ - "ntp_servers" - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "EstablishedConnection": { - "type": "object", - "properties": { - "addr": { - "type": "string" - }, - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - } - }, - "required": [ - "addr", - "baseboard" - ] - }, - "ExternalIp": { - "description": "An external IP address used by a probe.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used by the address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external IP address.", - "type": "string", - "format": "ip" - }, - "kind": { - "description": "The kind of address this is.", - "allOf": [ - { - "$ref": "#/components/schemas/IpKind" - } - ] - }, - "last_port": { - "description": "The last port used by the address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "kind", - "last_port" - ] - }, - "ExternalIpGatewayMap": { - "description": "Per-NIC mappings from external IP addresses to the Internet Gateways which can choose them as a source.", - "type": "object", - "properties": { - "mappings": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - } - } - } - }, - "required": [ - "mappings" - ] - }, - "FileStorageBackend": { - "description": "A storage backend backed by a file in the host system's file system.", - "type": "object", - "properties": { - "block_size": { - "description": "Block size of the backend", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "path": { - "description": "A path to a file that backs a disk.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "workers": { - "nullable": true, - "description": "Optional worker threads for the file backend, exposed for testing only.", - "type": "integer", - "format": "uint", - "minimum": 1 - } - }, - "required": [ - "block_size", - "path", - "readonly" - ], - "additionalProperties": false - }, - "Generation": { - "description": "Generation numbers stored in the database, used for optimistic concurrency control", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "GuestHypervisorInterface": { - "description": "A hypervisor interface to expose to the guest.", - "oneOf": [ - { - "description": "Expose a bhyve-like interface (\"bhyve bhyve \" as the hypervisor ID in leaf 0x4000_0000 and no additional leaves or features).", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bhyve" - ] - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "description": "Expose a Hyper-V-compatible hypervisor interface with the supplied features enabled.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "hyper_v" - ] - }, - "value": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HyperVFeatureFlag" - }, - "uniqueItems": true - } - }, - "required": [ - "features" - ], - "additionalProperties": false - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "GzipLevel": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "HostIdentifier": { - "description": "A `HostIdentifier` represents either an IP host or network (v4 or v6), or an entire VPC (identified by its VNI). It is used in firewall rule host filters.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "HostPhase2DesiredContents": { - "description": "Describes the desired contents of a host phase 2 slot (i.e., the boot partition on one of the internal M.2 drives).", - "oneOf": [ - { - "description": "Do not change the current contents.\n\nWe use this value when we've detected a sled has been mupdated (and we don't want to overwrite phase 2 images until we understand how to recover from that mupdate) and as the default value when reading an [`OmicronSledConfig`] that was ledgered before this concept existed.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "current_contents" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Set the phase 2 slot to the given artifact.\n\nThe artifact will come from an unpacked and distributed TUF repo.", - "type": "object", - "properties": { - "hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "type": { - "type": "string", - "enum": [ - "artifact" - ] - } - }, - "required": [ - "hash", - "type" - ] - } - ] - }, - "HostPhase2DesiredSlots": { - "description": "Describes the desired contents for both host phase 2 slots.", - "type": "object", - "properties": { - "slot_a": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - }, - "slot_b": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - } - }, - "required": [ - "slot_a", - "slot_b" - ] - }, - "HostPortConfig": { - "type": "object", - "properties": { - "addrs": { - "description": "IP Address and prefix (e.g., `192.168.0.1/16`) to apply to switchport (must be in infra_ip pool). May also include an optional VLAN ID.", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "lldp": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Switchport to use for external connectivity", - "type": "string" - }, - "tx_eq": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - } - }, - "required": [ - "addrs", - "port" - ] - }, - "Hostname": { - "title": "An RFC-1035-compliant hostname", - "description": "A hostname identifies a host on a network, and is usually a dot-delimited sequence of labels, where each label contains only letters, digits, or the hyphen. See RFCs 1035 and 952 for more details.", - "type": "string", - "pattern": "^([a-zA-Z0-9]+[a-zA-Z0-9\\-]*(? for background.", - "oneOf": [ - { - "description": "Start the switch zone if a switch is present.\n\nThis is the default policy.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "start_if_switch_present" - ] - } - }, - "required": [ - "policy" - ] - }, - { - "description": "Even if a switch zone is present, stop the switch zone.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "stop_despite_switch_presence" - ] - } - }, - "required": [ - "policy" - ] - } - ] - }, - "OrphanedDataset": { - "type": "object", - "properties": { - "available": { - "$ref": "#/components/schemas/ByteCount" - }, - "id": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/DatasetUuid" - } - ] - }, - "mounted": { - "type": "boolean" - }, - "name": { - "$ref": "#/components/schemas/DatasetName" - }, - "reason": { - "type": "string" - }, - "used": { - "$ref": "#/components/schemas/ByteCount" - } - }, - "required": [ - "available", - "mounted", - "name", - "reason", - "used" - ] - }, - "P9fs": { - "description": "Describes a filesystem to expose through a P9 device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "chunk_size": { - "description": "The chunk size to use in the 9P protocol. Vanilla Helios images should use 8192. Falcon Helios base images and Linux can use up to 65536.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach the guest to this P9 filesystem.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - }, - "source": { - "description": "The host source path to mount into the guest.", - "type": "string" - }, - "target": { - "description": "The 9P target filesystem tag.", - "type": "string" - } - }, - "required": [ - "chunk_size", - "pci_path", - "source", - "target" - ], - "additionalProperties": false - }, - "PciPath": { - "description": "A PCI bus/device/function tuple.", - "type": "object", - "properties": { - "bus": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "device": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "function": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "bus", - "device", - "function" - ] - }, - "PciPciBridge": { - "description": "A PCI-PCI bridge.", - "type": "object", - "properties": { - "downstream_bus": { - "description": "The logical bus number of this bridge's downstream bus. Other devices may use this bus number in their PCI paths to indicate they should be attached to this bridge's bus.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach this bridge.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "downstream_bus", - "pci_path" - ], - "additionalProperties": false - }, - "PhysicalDiskUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::PhysicalDiskUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "PortConfigV2": { - "type": "object", - "properties": { - "addresses": { - "description": "This port's addresses and optional vlan IDs", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "autoneg": { - "description": "Whether or not to set autonegotiation", - "default": false, - "type": "boolean" - }, - "bgp_peers": { - "description": "BGP peers on this port", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeerConfig" - } - }, - "lldp": { - "nullable": true, - "description": "LLDP configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Nmae of the port this config applies to.", - "type": "string" - }, - "routes": { - "description": "The set of routes associated with this port.", - "type": "array", - "items": { - "$ref": "#/components/schemas/RouteConfig" - } - }, - "switch": { - "description": "Switch the port belongs to.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - }, - "tx_eq": { - "nullable": true, - "description": "TX-EQ configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - }, - "uplink_port_fec": { - "nullable": true, - "description": "Port forward error correction type.", - "allOf": [ - { - "$ref": "#/components/schemas/PortFec" - } - ] - }, - "uplink_port_speed": { - "description": "Port speed.", - "allOf": [ - { - "$ref": "#/components/schemas/PortSpeed" - } - ] - } - }, - "required": [ - "addresses", - "bgp_peers", - "port", - "routes", - "switch", - "uplink_port_speed" - ] - }, - "PortFec": { - "description": "Switchport FEC options", - "type": "string", - "enum": [ - "firecode", - "none", - "rs" - ] - }, - "PortSpeed": { - "description": "Switchport Speed options", - "type": "string", - "enum": [ - "speed0_g", - "speed1_g", - "speed10_g", - "speed25_g", - "speed40_g", - "speed50_g", - "speed100_g", - "speed200_g", - "speed400_g" - ] - }, - "PriorityDimension": { - "description": "A dimension along with bundles can be sorted, to determine priority.", - "oneOf": [ - { - "description": "Sorting by time, with older bundles with lower priority.", - "type": "string", - "enum": [ - "time" - ] - }, - { - "description": "Sorting by the cause for creating the bundle.", - "type": "string", - "enum": [ - "cause" - ] - } - ] - }, - "PriorityOrder": { - "description": "The priority order for bundles during cleanup.\n\nBundles are sorted along the dimensions in [`PriorityDimension`], with each dimension appearing exactly once. During cleanup, lesser-priority bundles are pruned first, to maintain the dataset quota. Note that bundles are sorted by each dimension in the order in which they appear, with each dimension having higher priority than the next.", - "type": "array", - "items": { - "$ref": "#/components/schemas/PriorityDimension" - }, - "minItems": 2, - "maxItems": 2 - }, - "ProbeCreate": { - "description": "Parameters used to create a probe.", - "type": "object", - "properties": { - "external_ips": { - "description": "The external IP addresses assigned to the probe.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalIp" - } - }, - "id": { - "description": "The ID for the probe.", - "allOf": [ - { - "$ref": "#/components/schemas/ProbeUuid" - } - ] - }, - "interface": { - "description": "The probe's networking interface.", - "allOf": [ - { - "$ref": "#/components/schemas/NetworkInterface" - } - ] - } - }, - "required": [ - "external_ips", - "id", - "interface" - ] - }, - "ProbeSet": { - "description": "A set of probes that the target sled should run.", - "type": "object", - "properties": { - "probes": { - "title": "IdHashMap", - "description": "The exact set of probes to run.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ProbeCreate" - } - ], - "path": "iddqd::IdHashMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ProbeCreate" - }, - "uniqueItems": true - } - }, - "required": [ - "probes" - ] - }, - "ProbeUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ProbeUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "QemuPvpanic": { - "type": "object", - "properties": { - "enable_isa": { - "description": "Enable the QEMU PVPANIC ISA bus device (I/O port 0x505).", - "type": "boolean" - } - }, - "required": [ - "enable_isa" - ], - "additionalProperties": false - }, - "RackNetworkConfigV2": { - "description": "Initial network configuration", - "type": "object", - "properties": { - "bfd": { - "description": "BFD configuration for connecting the rack to external networks", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/BfdPeerConfig" - } - }, - "bgp": { - "description": "BGP configurations for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpConfig" - } - }, - "infra_ip_first": { - "description": "First ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "infra_ip_last": { - "description": "Last ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "ports": { - "description": "Uplinks for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/PortConfigV2" - } - }, - "rack_subnet": { - "$ref": "#/components/schemas/Ipv6Net" - } - }, - "required": [ - "bgp", - "infra_ip_first", - "infra_ip_last", - "ports", - "rack_subnet" - ] - }, - "RemoveMupdateOverrideBootSuccessInventory": { - "description": "Status of removing the mupdate override on the boot disk.", - "oneOf": [ - { - "description": "The mupdate override was successfully removed.", - "type": "string", - "enum": [ - "removed" - ] - }, - { - "description": "No mupdate override was found.\n\nThis is considered a success for idempotency reasons.", - "type": "string", - "enum": [ - "no_override" - ] - } - ] - }, - "RemoveMupdateOverrideInventory": { - "description": "Status of removing the mupdate override in the inventory.", - "type": "object", - "properties": { - "boot_disk_result": { - "description": "The result of removing the mupdate override on the boot disk.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_message": { - "description": "What happened on non-boot disks.\n\nWe aren't modeling this out in more detail, because we plan to not try and keep ledgered data in sync across both disks in the future.", - "type": "string" - } - }, - "required": [ - "boot_disk_result", - "non_boot_message" - ] - }, - "ResolvedVpcFirewallRule": { - "description": "VPC firewall rule after object name resolution has been performed by Nexus", - "type": "object", - "properties": { - "action": { - "$ref": "#/components/schemas/VpcFirewallRuleAction" - }, - "direction": { - "$ref": "#/components/schemas/VpcFirewallRuleDirection" - }, - "filter_hosts": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/HostIdentifier" - }, - "uniqueItems": true - }, - "filter_ports": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/L4PortRange" - } - }, - "filter_protocols": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleProtocol" - } - }, - "priority": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "status": { - "$ref": "#/components/schemas/VpcFirewallRuleStatus" - }, - "targets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NetworkInterface" - } - } - }, - "required": [ - "action", - "direction", - "priority", - "status", - "targets" - ] - }, - "ResolvedVpcRoute": { - "description": "A VPC route resolved into a concrete target.", - "type": "object", - "properties": { - "dest": { - "$ref": "#/components/schemas/IpNet" - }, - "target": { - "$ref": "#/components/schemas/RouterTarget" - } - }, - "required": [ - "dest", - "target" - ] - }, - "ResolvedVpcRouteSet": { - "description": "An updated set of routes for a given VPC and/or subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "routes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRoute" - }, - "uniqueItems": true - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id", - "routes" - ] - }, - "ResolvedVpcRouteState": { - "description": "Version information for routes on a given VPC subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id" - ] - }, - "RouteConfig": { - "type": "object", - "properties": { - "destination": { - "description": "The destination of the route.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "nexthop": { - "description": "The nexthop/gateway address.", - "type": "string", - "format": "ip" - }, - "rib_priority": { - "nullable": true, - "description": "The RIB priority (i.e. Admin Distance) associated with this route.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id associated with this route.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "destination", - "nexthop" - ] - }, - "RouterId": { - "description": "Identifier for a VPC and/or subnet.", - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/RouterKind" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "kind", - "vni" - ] - }, - "RouterKind": { - "description": "The scope of a set of VPC router rules.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "system" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "subnet": { - "$ref": "#/components/schemas/IpNet" - }, - "type": { - "type": "string", - "enum": [ - "custom" - ] - } - }, - "required": [ - "subnet", - "type" - ] - } - ] - }, - "RouterTarget": { - "description": "The target for a given router entry.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "drop" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "internet_gateway" - ] - }, - "value": { - "$ref": "#/components/schemas/InternetGatewayRouterTarget" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc_subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "RouterVersion": { - "description": "Information on the current parent router (and version) of a route set according to the control plane.", - "type": "object", - "properties": { - "router_id": { - "type": "string", - "format": "uuid" - }, - "version": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "router_id", - "version" - ] - }, - "SerialPort": { - "description": "A serial port device.", - "type": "object", - "properties": { - "num": { - "description": "The serial port number for this port.", - "allOf": [ - { - "$ref": "#/components/schemas/SerialPortNumber" - } - ] - } - }, - "required": [ - "num" - ], - "additionalProperties": false - }, - "SerialPortNumber": { - "description": "A serial port identifier, which determines what I/O ports a guest can use to access a port.", - "type": "string", - "enum": [ - "com1", - "com2", - "com3", - "com4" - ] - }, - "SledCpuFamily": { - "description": "Identifies the kind of CPU present on a sled, determined by reading CPUID.\n\nThis is intended to broadly support the control plane answering the question \"can I run this instance on that sled?\" given an instance with either no or some CPU platform requirement. It is not enough information for more precise placement questions - for example, is a CPU a high-frequency part or many-core part? We don't include Genoa here, but in that CPU family there are high frequency parts, many-core parts, and large-cache parts. To support those questions (or satisfactorily answer #8730) we would need to collect additional information and send it along.", - "oneOf": [ - { - "description": "The CPU vendor or its family number don't correspond to any of the known family variants.", - "type": "string", - "enum": [ - "unknown" - ] - }, - { - "description": "AMD Milan processors (or very close). Could be an actual Milan in a Gimlet, a close-to-Milan client Zen 3 part, or Zen 4 (for which Milan is the greatest common denominator).", - "type": "string", - "enum": [ - "amd_milan" - ] - }, - { - "description": "AMD Turin processors (or very close). Could be an actual Turin in a Cosmo, or a close-to-Turin client Zen 5 part.", - "type": "string", - "enum": [ - "amd_turin" - ] - }, - { - "description": "AMD Turin Dense processors. There are no \"Turin Dense-like\" CPUs unlike other cases, so this means a bona fide Zen 5c Turin Dense part.", - "type": "string", - "enum": [ - "amd_turin_dense" - ] - } - ] - }, - "SledDiagnosticsQueryOutput": { - "oneOf": [ - { - "type": "object", - "properties": { - "success": { - "type": "object", - "properties": { - "command": { - "description": "The command and its arguments.", - "type": "string" - }, - "exit_code": { - "nullable": true, - "description": "The exit code if one was present when the command exited.", - "type": "integer", - "format": "int32" - }, - "exit_status": { - "description": "The exit status of the command. This will be the exit code (if any) and exit reason such as from a signal.", - "type": "string" - }, - "stdio": { - "description": "Any stdout/stderr produced by the command.", - "type": "string" - } - }, - "required": [ - "command", - "exit_status", - "stdio" - ] - } - }, - "required": [ - "success" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "failure": { - "type": "object", - "properties": { - "error": { - "description": "The reason the command failed to execute.", - "type": "string" - } - }, - "required": [ - "error" - ] - } - }, - "required": [ - "failure" - ], - "additionalProperties": false - } - ] - }, - "SledIdentifiers": { - "description": "Identifiers for a single sled.\n\nThis is intended primarily to be used in timeseries, to identify sled from which metric data originates.", - "type": "object", - "properties": { - "model": { - "description": "Model name of the sled", - "type": "string" - }, - "rack_id": { - "description": "Control plane ID of the rack this sled is a member of", - "type": "string", - "format": "uuid" - }, - "revision": { - "description": "Revision number of the sled", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "serial": { - "description": "Serial number of the sled", - "type": "string" - }, - "sled_id": { - "description": "Control plane ID for the sled itself", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "model", - "rack_id", - "revision", - "serial", - "sled_id" - ] - }, - "SledRole": { - "description": "Describes the role of the sled within the rack.\n\nNote that this may change if the sled is physically moved within the rack.", - "oneOf": [ - { - "description": "The sled is a general compute sled.", - "type": "string", - "enum": [ - "gimlet" - ] - }, - { - "description": "The sled is attached to the network switch, and has additional responsibilities.", - "type": "string", - "enum": [ - "scrimlet" - ] - } - ] - }, - "SledUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::SledUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "SledVmmState": { - "description": "A wrapper type containing a sled's total knowledge of the state of a VMM.", - "type": "object", - "properties": { - "migration_in": { - "nullable": true, - "description": "The current state of any inbound migration to this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "migration_out": { - "nullable": true, - "description": "The state of any outbound migration from this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "vmm_state": { - "description": "The most recent state of the sled's VMM process.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmRuntimeState" - } - ] - } - }, - "required": [ - "vmm_state" - ] - }, - "SoftNpuP9": { - "description": "Describes a PCI device that shares host files with the guest using the P9 protocol.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPciPort": { - "description": "Describes a SoftNPU PCI device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPort": { - "description": "Describes a port in a SoftNPU emulated ASIC.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the port's associated DLPI backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "link_name": { - "description": "The data link name for this port.", - "type": "string" - } - }, - "required": [ - "backend_id", - "link_name" - ], - "additionalProperties": false - }, - "SourceNatConfig": { - "description": "An IP address and port range used for source NAT, i.e., making outbound network connections from guests or services.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used for source NAT, inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external address provided to the instance or service.", - "type": "string", - "format": "ip" - }, - "last_port": { - "description": "The last port used for source NAT, also inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "last_port" - ] - }, - "SpecKey": { - "description": "A key identifying a component in an instance spec.", - "oneOf": [ - { - "title": "uuid", - "allOf": [ - { - "type": "string", - "format": "uuid" - } - ] - }, - { - "title": "name", - "allOf": [ - { - "type": "string" - } - ] - } - ] - }, - "StartSledAgentRequest": { - "description": "Configuration information for launching a Sled Agent.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/StartSledAgentRequestBody" - }, - "generation": { - "description": "The current generation number of data as stored in CRDB.\n\nThe initial generation is set during RSS time and then only mutated by Nexus. For now, we don't actually anticipate mutating this data, but we leave open the possiblity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "StartSledAgentRequestBody": { - "description": "This is the actual app level data of `StartSledAgentRequest`\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "id": { - "description": "Uuid of the Sled Agent to be created.", - "allOf": [ - { - "$ref": "#/components/schemas/SledUuid" - } - ] - }, - "is_lrtq_learner": { - "description": "Is this node an LRTQ learner node?\n\nWe only put the node into learner mode if `use_trust_quorum` is also true.", - "type": "boolean" - }, - "rack_id": { - "description": "Uuid of the rack to which this sled agent belongs.", - "type": "string", - "format": "uuid" - }, - "subnet": { - "description": "Portion of the IP space to be managed by the Sled Agent.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Subnet" - } - ] - }, - "use_trust_quorum": { - "description": "Use trust quorum for key generation", - "type": "boolean" - } - }, - "required": [ - "id", - "is_lrtq_learner", - "rack_id", - "subnet", - "use_trust_quorum" - ] - }, - "StorageLimit": { - "description": "The limit on space allowed for zone bundles, as a percentage of the overall dataset's quota.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "SupportBundleMetadata": { - "description": "Metadata about a support bundle", - "type": "object", - "properties": { - "state": { - "$ref": "#/components/schemas/SupportBundleState" - }, - "support_bundle_id": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - "required": [ - "state", - "support_bundle_id" - ] - }, - "SupportBundleState": { - "type": "string", - "enum": [ - "complete", - "incomplete" - ] - }, - "SupportBundleUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::SupportBundleUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "SwitchLocation": { - "description": "Identifies switch physical location", - "oneOf": [ - { - "description": "Switch in upper slot", - "type": "string", - "enum": [ - "switch0" - ] - }, - { - "description": "Switch in lower slot", - "type": "string", - "enum": [ - "switch1" - ] - } - ] - }, - "SwitchPorts": { - "description": "A set of switch uplinks.", - "type": "object", - "properties": { - "uplinks": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HostPortConfig" - } - } - }, - "required": [ - "uplinks" - ] - }, - "TxEqConfig": { - "description": "Per-port tx-eq overrides. This can be used to fine-tune the transceiver equalization settings to improve signal integrity.", - "type": "object", - "properties": { - "main": { - "nullable": true, - "description": "Main tap", - "type": "integer", - "format": "int32" - }, - "post1": { - "nullable": true, - "description": "Post-cursor tap1", - "type": "integer", - "format": "int32" - }, - "post2": { - "nullable": true, - "description": "Post-cursor tap2", - "type": "integer", - "format": "int32" - }, - "pre1": { - "nullable": true, - "description": "Pre-cursor tap1", - "type": "integer", - "format": "int32" - }, - "pre2": { - "nullable": true, - "description": "Pre-cursor tap2", - "type": "integer", - "format": "int32" - } - } - }, - "UplinkAddressConfig": { - "type": "object", - "properties": { - "address": { - "$ref": "#/components/schemas/IpNet" - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id (if any) associated with this address.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "address" - ] - }, - "VirtioDisk": { - "description": "A disk that presents a virtio-block interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the disk's backend component.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "pci_path": { - "description": "The PCI bus/device/function at which this disk should be attached.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtioNetworkBackend": { - "description": "A network backend associated with a virtio-net (viona) VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the viona VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "VirtioNic": { - "description": "A network card that presents a virtio-net interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the device's backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "interface_id": { - "description": "A caller-defined correlation identifier for this interface. If Propolis is configured to collect network interface kstats in its Oximeter metrics, the metric series for this interface will be associated with this identifier.", - "type": "string", - "format": "uuid" - }, - "pci_path": { - "description": "The PCI path at which to attach this device.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "interface_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtualNetworkInterfaceHost": { - "description": "A mapping from a virtual NIC to a physical host", - "type": "object", - "properties": { - "physical_host_ip": { - "type": "string", - "format": "ipv6" - }, - "virtual_ip": { - "type": "string", - "format": "ip" - }, - "virtual_mac": { - "$ref": "#/components/schemas/MacAddr" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "physical_host_ip", - "virtual_ip", - "virtual_mac", - "vni" - ] - }, - "VmmIssueDiskSnapshotRequestBody": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmIssueDiskSnapshotRequestResponse": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmPutStateBody": { - "description": "The body of a request to move a previously-ensured instance into a specific runtime state.", - "type": "object", - "properties": { - "state": { - "description": "The state into which the instance should be driven.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmStateRequested" - } - ] - } - }, - "required": [ - "state" - ] - }, - "VmmPutStateResponse": { - "description": "The response sent from a request to move an instance into a specific runtime state.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current runtime state of the instance after handling the request to change its state. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "VmmRuntimeState": { - "description": "The dynamic runtime properties of an individual VMM process.", - "type": "object", - "properties": { - "gen": { - "description": "The generation number for this VMM's state.", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "state": { - "description": "The last state reported by this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmState" - } - ] - }, - "time_updated": { - "description": "Timestamp for the VMM's state.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "gen", - "state", - "time_updated" - ] - }, - "VmmSpec": { - "description": "Specifies the virtual hardware configuration of a new Propolis VMM in the form of a Propolis instance specification.\n\nSled-agent expects that when an instance spec is provided alongside an `InstanceSledLocalConfig` to initialize a new instance, the NIC IDs in that config's network interface list will match the IDs of the virtio network backends in the instance spec.", - "allOf": [ - { - "$ref": "#/components/schemas/InstanceSpecV0" - } - ] - }, - "VmmState": { - "description": "One of the states that a VMM can be in.", - "oneOf": [ - { - "description": "The VMM is initializing and has not started running guest CPUs yet.", - "type": "string", - "enum": [ - "starting" - ] - }, - { - "description": "The VMM has finished initializing and may be running guest CPUs.", - "type": "string", - "enum": [ - "running" - ] - }, - { - "description": "The VMM is shutting down.", - "type": "string", - "enum": [ - "stopping" - ] - }, - { - "description": "The VMM's guest has stopped, and the guest will not run again, but the VMM process may not have released all of its resources yet.", - "type": "string", - "enum": [ - "stopped" - ] - }, - { - "description": "The VMM is being restarted or its guest OS is rebooting.", - "type": "string", - "enum": [ - "rebooting" - ] - }, - { - "description": "The VMM is part of a live migration.", - "type": "string", - "enum": [ - "migrating" - ] - }, - { - "description": "The VMM process reported an internal failure.", - "type": "string", - "enum": [ - "failed" - ] - }, - { - "description": "The VMM process has been destroyed and its resources have been released.", - "type": "string", - "enum": [ - "destroyed" - ] - } - ] - }, - "VmmStateRequested": { - "description": "Requestable running state of an Instance.\n\nA subset of [`omicron_common::api::external::InstanceState`].", - "oneOf": [ - { - "description": "Run this instance by migrating in from a previous running incarnation of the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "migration_target" - ] - }, - "value": { - "$ref": "#/components/schemas/InstanceMigrationTargetParams" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Start the instance if it is not already running.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Stop the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "stopped" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Immediately reset the instance, as though it had stopped and immediately began to run again.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "reboot" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "VmmUnregisterResponse": { - "description": "The response sent from a request to unregister an instance.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current state of the instance after handling the request to unregister it. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "Vni": { - "description": "A Geneve Virtual Network Identifier", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "VpcFirewallIcmpFilter": { - "type": "object", - "properties": { - "code": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/IcmpParamRange" - } - ] - }, - "icmp_type": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "icmp_type" - ] - }, - "VpcFirewallRuleAction": { - "type": "string", - "enum": [ - "allow", - "deny" - ] - }, - "VpcFirewallRuleDirection": { - "type": "string", - "enum": [ - "inbound", - "outbound" - ] - }, - "VpcFirewallRuleProtocol": { - "description": "The protocols that may be specified in a firewall rule's filter", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "tcp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "udp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "icmp" - ] - }, - "value": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallIcmpFilter" - } - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleStatus": { - "type": "string", - "enum": [ - "disabled", - "enabled" - ] - }, - "VpcFirewallRulesEnsureBody": { - "description": "Update firewall rules for a VPC", - "type": "object", - "properties": { - "rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcFirewallRule" - } - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "rules", - "vni" - ] - }, - "ZoneArtifactInventory": { - "description": "Inventory representation of a single zone artifact on a boot disk.\n\nPart of [`ZoneManifestBootInventory`].", - "type": "object", - "properties": { - "expected_hash": { - "description": "The expected digest of the file's contents.", - "type": "string", - "format": "hex string (32 bytes)" - }, - "expected_size": { - "description": "The expected size of the file, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "file_name": { - "description": "The name of the zone file on disk, for example `nexus.tar.gz`. Zone files are always \".tar.gz\".", - "type": "string" - }, - "path": { - "description": "The full path to the zone file.", - "type": "string", - "format": "Utf8PathBuf" - }, - "status": { - "description": "The status of the artifact.\n\nThis is `Ok(())` if the artifact is present and matches the expected size and digest, or an error message if it is missing or does not match.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "type": "null" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "type": "string", - "enum": [ - null - ] - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "expected_hash", - "expected_size", - "file_name", - "path", - "status" - ] - }, - "ZoneBundleCause": { - "description": "The reason or cause for a zone bundle, i.e., why it was created.", - "oneOf": [ - { - "description": "Some other, unspecified reason.", - "type": "string", - "enum": [ - "other" - ] - }, - { - "description": "A zone bundle taken when a sled agent finds a zone that it does not expect to be running.", - "type": "string", - "enum": [ - "unexpected_zone" - ] - }, - { - "description": "An instance zone was terminated.", - "type": "string", - "enum": [ - "terminated_instance" - ] - } - ] - }, - "ZoneBundleId": { - "description": "An identifier for a zone bundle.", - "type": "object", - "properties": { - "bundle_id": { - "description": "The ID for this bundle itself.", - "type": "string", - "format": "uuid" - }, - "zone_name": { - "description": "The name of the zone this bundle is derived from.", - "type": "string" - } - }, - "required": [ - "bundle_id", - "zone_name" - ] - }, - "ZoneBundleMetadata": { - "description": "Metadata about a zone bundle.", - "type": "object", - "properties": { - "cause": { - "description": "The reason or cause a bundle was created.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleCause" - } - ] - }, - "id": { - "description": "Identifier for this zone bundle", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleId" - } - ] - }, - "time_created": { - "description": "The time at which this zone bundle was created.", - "type": "string", - "format": "date-time" - }, - "version": { - "description": "A version number for this zone bundle.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "cause", - "id", - "time_created", - "version" - ] - }, - "ZoneImageResolverInventory": { - "description": "Inventory representation of zone image resolver status and health.", - "type": "object", - "properties": { - "mupdate_override": { - "description": "The mupdate override status.", - "allOf": [ - { - "$ref": "#/components/schemas/MupdateOverrideInventory" - } - ] - }, - "zone_manifest": { - "description": "The zone manifest status.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneManifestInventory" - } - ] - } - }, - "required": [ - "mupdate_override", - "zone_manifest" - ] - }, - "ZoneManifestBootInventory": { - "description": "Inventory representation of zone artifacts on the boot disk.\n\nPart of [`ZoneManifestInventory`].", - "type": "object", - "properties": { - "artifacts": { - "title": "IdOrdMap", - "description": "The artifacts on disk.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneArtifactInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneArtifactInventory" - }, - "uniqueItems": true - }, - "source": { - "description": "The manifest source.\n\nIn production this is [`OmicronZoneManifestSource::Installinator`], but in some development and testing flows Sled Agent synthesizes zone manifests. In those cases, the source is [`OmicronZoneManifestSource::SledAgent`].", - "allOf": [ - { - "$ref": "#/components/schemas/OmicronZoneManifestSource" - } - ] - } - }, - "required": [ - "artifacts", - "source" - ] - }, - "ZoneManifestInventory": { - "description": "Inventory representation of a zone manifest.\n\nPart of [`ZoneImageResolverInventory`].\n\nA zone manifest is a listing of all the zones present in a system's install dataset. This struct contains information about the install dataset gathered from a system.", - "type": "object", - "properties": { - "boot_disk_path": { - "description": "The full path to the zone manifest file on the boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "boot_inventory": { - "description": "The manifest read from the boot disk, and whether the manifest is valid.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_status": { - "title": "IdOrdMap", - "description": "Information about the install dataset on non-boot disks.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - }, - "uniqueItems": true - } - }, - "required": [ - "boot_disk_path", - "boot_inventory", - "non_boot_status" - ] - }, - "ZoneManifestNonBootInventory": { - "description": "Inventory representation of a zone manifest on a non-boot disk.\n\nUnlike [`ZoneManifestBootInventory`] which is structured since Reconfigurator makes decisions based on it, information about non-boot disks is purely advisory. For simplicity, we store information in an unstructured format.", - "type": "object", - "properties": { - "is_valid": { - "description": "Whether the status is valid.", - "type": "boolean" - }, - "message": { - "description": "A message describing the status.\n\nIf `is_valid` is true, then the message describes the list of artifacts found and their hashes.\n\nIf `is_valid` is false, then this message describes the reason for the invalid status. This could include errors reading the zone manifest, or zone file mismatches.", - "type": "string" - }, - "path": { - "description": "The full path to the zone manifest JSON on the non-boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "zpool_id": { - "description": "The ID of the non-boot zpool.", - "allOf": [ - { - "$ref": "#/components/schemas/InternalZpoolUuid" - } - ] - } - }, - "required": [ - "is_valid", - "message", - "path", - "zpool_id" - ] - }, - "ZpoolName": { - "title": "The name of a Zpool", - "description": "Zpool names are of the format ox{i,p}_. They are either Internal or External, and should be unique", - "type": "string", - "pattern": "^ox[ip]_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" - }, - "ZpoolUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ZpoolUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "PropolisUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::PropolisUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } -} diff --git a/openapi/sled-agent/sled-agent-6.0.0-d37dd7.json.gitref b/openapi/sled-agent/sled-agent-6.0.0-d37dd7.json.gitref new file mode 100644 index 00000000000..72706e690f2 --- /dev/null +++ b/openapi/sled-agent/sled-agent-6.0.0-d37dd7.json.gitref @@ -0,0 +1 @@ +c009adbad528a212beb85212b2c509768f594aa8:openapi/sled-agent/sled-agent-6.0.0-d37dd7.json \ No newline at end of file diff --git a/openapi/sled-agent/sled-agent-7.0.0-62acb3.json b/openapi/sled-agent/sled-agent-7.0.0-62acb3.json deleted file mode 100644 index ddb7f61f616..00000000000 --- a/openapi/sled-agent/sled-agent-7.0.0-62acb3.json +++ /dev/null @@ -1,8734 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Sled Agent API", - "description": "API for interacting with individual sleds", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "7.0.0" - }, - "paths": { - "/artifacts": { - "get": { - "operationId": "artifact_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactListResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}": { - "put": { - "operationId": "artifact_put", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactPutResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}/copy-from-depot": { - "post": { - "operationId": "artifact_copy_from_depot", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotBody" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts-config": { - "get": { - "operationId": "artifact_config_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "artifact_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/bootstore/status": { - "get": { - "summary": "Get the internal state of the local bootstore node", - "operationId": "bootstore_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BootstoreStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/debug/switch-zone-policy": { - "get": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.", - "operationId": "debug_operator_switch_zone_policy_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.\n\nSetting the switch zone policy is asynchronous and inherently racy with the standard process of starting the switch zone. If the switch zone is in the process of being started or stopped when this policy is changed, the new policy may not take effect until that transition completes.", - "operationId": "debug_operator_switch_zone_policy_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/disks/{disk_id}": { - "put": { - "operationId": "disk_put", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskRuntimeState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/eip-gateways": { - "put": { - "summary": "Update per-NIC IP address <-> internet gateway mappings.", - "operationId": "set_eip_gateways", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIpGatewayMap" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/inventory": { - "get": { - "summary": "Fetch basic information about this sled", - "operationId": "inventory", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Inventory" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/network-bootstore-config": { - "get": { - "summary": "This API endpoint is only reading the local sled agent's view of the", - "description": "bootstore. The boostore is a distributed data store that is eventually consistent. Reads from individual nodes may not represent the latest state.", - "operationId": "read_network_bootstore_config_cache", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "write_network_bootstore_config", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/omicron-config": { - "put": { - "operationId": "omicron_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OmicronSledConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/probes": { - "put": { - "summary": "Update the entire set of probe zones on this sled.", - "description": "Probe zones are used to debug networking configuration. They look similar to instances, in that they have an OPTE port on a VPC subnet and external addresses, but no actual VM.", - "operationId": "probes_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProbeSet" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-identifiers": { - "get": { - "summary": "Fetch sled identifiers", - "operationId": "sled_identifiers", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledIdentifiers" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-role": { - "get": { - "operationId": "sled_role_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledRole" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sleds": { - "put": { - "summary": "Add a sled to a rack that was already initialized via RSS", - "operationId": "sled_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddSledRequest" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/dladm-info": { - "get": { - "operationId": "support_dladm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/health-check": { - "get": { - "operationId": "support_health_check", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/ipadm-info": { - "get": { - "operationId": "support_ipadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/logs/download/{zone}": { - "get": { - "summary": "This endpoint returns a zip file of a zone's logs organized by service.", - "operationId": "support_logs_download", - "parameters": [ - { - "in": "path", - "name": "zone", - "description": "The zone for which one would like to collect logs for", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "max_rotated", - "description": "The max number of rotated logs to include in the final support bundle", - "required": true, - "schema": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support/logs/zones": { - "get": { - "summary": "This endpoint returns a list of known zones on a sled that have service", - "description": "logs that can be collected into a support bundle.", - "operationId": "support_logs", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/nvmeadm-info": { - "get": { - "operationId": "support_nvmeadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pargs-info": { - "get": { - "operationId": "support_pargs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pfiles-info": { - "get": { - "operationId": "support_pfiles_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pstack-info": { - "get": { - "operationId": "support_pstack_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zfs-info": { - "get": { - "operationId": "support_zfs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zoneadm-info": { - "get": { - "operationId": "support_zoneadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zpool-info": { - "get": { - "operationId": "support_zpool_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}": { - "get": { - "summary": "List all support bundles within a particular dataset", - "operationId": "support_bundle_list", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SupportBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}": { - "post": { - "summary": "Starts creation of a support bundle within a particular dataset", - "description": "Callers should transfer chunks of the bundle with \"support_bundle_transfer\", and then call \"support_bundle_finalize\" once the bundle has finished transferring.\n\nIf a support bundle was previously created without being finalized successfully, this endpoint will reset the state.\n\nIf a support bundle was previously created and finalized successfully, this endpoint will return metadata indicating that it already exists.", - "operationId": "support_bundle_start_creation", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a support bundle from a particular dataset", - "operationId": "support_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download": { - "get": { - "summary": "Fetch a support bundle from a particular dataset", - "operationId": "support_bundle_download", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a support bundle from a particular dataset", - "operationId": "support_bundle_head", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download/{file}": { - "get": { - "summary": "Fetch a file within a support bundle from a particular dataset", - "operationId": "support_bundle_download_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a file within a support bundle from a particular dataset", - "operationId": "support_bundle_head_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/finalize": { - "post": { - "summary": "Finalizes the creation of a support bundle", - "description": "If the requested hash matched the bundle, the bundle is created. Otherwise, an error is returned.", - "operationId": "support_bundle_finalize", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - }, - { - "in": "query", - "name": "hash", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/index": { - "get": { - "summary": "Fetch the index (list of files within a support bundle)", - "operationId": "support_bundle_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about the list of files within a support bundle", - "operationId": "support_bundle_head_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/transfer": { - "put": { - "summary": "Transfers a chunk of a support bundle within a particular dataset", - "operationId": "support_bundle_transfer", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - }, - { - "in": "query", - "name": "offset", - "required": true, - "schema": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/switch-ports": { - "post": { - "operationId": "uplink_ensure", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPorts" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v2p": { - "get": { - "summary": "List v2p mappings present on sled", - "operationId": "list_v2p", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_VirtualNetworkInterfaceHost", - "type": "array", - "items": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Create a mapping from a virtual NIC to a physical host", - "operationId": "set_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a mapping from a virtual NIC to a physical host", - "operationId": "del_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}": { - "put": { - "operationId": "vmm_register", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_unregister", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmUnregisterResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/disks/{disk_id}/snapshot": { - "post": { - "summary": "Take a snapshot of a disk that is attached to an instance", - "operationId": "vmm_issue_disk_snapshot_request", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/external-ip": { - "put": { - "operationId": "vmm_put_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_delete_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/multicast-group": { - "put": { - "operationId": "vmm_join_multicast_group", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceMulticastBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_leave_multicast_group", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceMulticastBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/state": { - "get": { - "operationId": "vmm_get_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "vmm_put_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc/{vpc_id}/firewall/rules": { - "put": { - "operationId": "vpc_firewall_rules_put", - "parameters": [ - { - "in": "path", - "name": "vpc_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRulesEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc-routes": { - "get": { - "summary": "Get the current versions of VPC routing rules.", - "operationId": "list_vpc_routes", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteState", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteState" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update VPC routing rules.", - "operationId": "set_vpc_routes", - "requestBody": { - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteSet", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteSet" - } - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones": { - "get": { - "summary": "List the zones that are currently managed by the sled agent.", - "operationId": "zones_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup": { - "post": { - "summary": "Trigger a zone bundle cleanup.", - "operationId": "zone_bundle_cleanup", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_CleanupCount", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/CleanupCount" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/context": { - "get": { - "summary": "Return context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContext" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContextUpdate" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/utilization": { - "get": { - "summary": "Return utilization information about all zone bundles.", - "operationId": "zone_bundle_utilization", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_BundleUtilization", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/BundleUtilization" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles": { - "get": { - "summary": "List all zone bundles that exist, even for now-deleted zones.", - "operationId": "zone_bundle_list_all", - "parameters": [ - { - "in": "query", - "name": "filter", - "description": "An optional substring used to filter zone bundles.", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}": { - "get": { - "summary": "List the zone bundles that are available for a running zone.", - "operationId": "zone_bundle_list", - "parameters": [ - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}/{bundle_id}": { - "get": { - "summary": "Fetch the binary content of a single zone bundle.", - "operationId": "zone_bundle_get", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a zone bundle.", - "operationId": "zone_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "AddSledRequest": { - "description": "A request to Add a given sled after rack initialization has occurred", - "type": "object", - "properties": { - "sled_id": { - "$ref": "#/components/schemas/BaseboardId" - }, - "start_request": { - "$ref": "#/components/schemas/StartSledAgentRequest" - } - }, - "required": [ - "sled_id", - "start_request" - ] - }, - "ArtifactConfig": { - "type": "object", - "properties": { - "artifacts": { - "type": "array", - "items": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "uniqueItems": true - }, - "generation": { - "$ref": "#/components/schemas/Generation" - } - }, - "required": [ - "artifacts", - "generation" - ] - }, - "ArtifactCopyFromDepotBody": { - "type": "object", - "properties": { - "depot_base_url": { - "type": "string" - } - }, - "required": [ - "depot_base_url" - ] - }, - "ArtifactCopyFromDepotResponse": { - "type": "object" - }, - "ArtifactListResponse": { - "type": "object", - "properties": { - "generation": { - "$ref": "#/components/schemas/Generation" - }, - "list": { - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - }, - "required": [ - "generation", - "list" - ] - }, - "ArtifactPutResponse": { - "type": "object", - "properties": { - "datasets": { - "description": "The number of valid M.2 artifact datasets we found on the sled. There is typically one of these datasets for each functional M.2.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "successful_writes": { - "description": "The number of valid writes to the M.2 artifact datasets. This should be less than or equal to the number of artifact datasets.", - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "required": [ - "datasets", - "successful_writes" - ] - }, - "Baseboard": { - "description": "Describes properties that should uniquely identify a Gimlet.", - "oneOf": [ - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "gimlet" - ] - } - }, - "required": [ - "identifier", - "model", - "revision", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "pc" - ] - } - }, - "required": [ - "identifier", - "model", - "type" - ] - } - ] - }, - "BaseboardId": { - "description": "A representation of a Baseboard ID as used in the inventory subsystem This type is essentially the same as a `Baseboard` except it doesn't have a revision or HW type (Gimlet, PC, Unknown).", - "type": "object", - "properties": { - "part_number": { - "description": "Oxide Part Number", - "type": "string" - }, - "serial_number": { - "description": "Serial number (unique for a given part number)", - "type": "string" - } - }, - "required": [ - "part_number", - "serial_number" - ] - }, - "BfdMode": { - "description": "BFD connection mode.", - "type": "string", - "enum": [ - "single_hop", - "multi_hop" - ] - }, - "BfdPeerConfig": { - "type": "object", - "properties": { - "detection_threshold": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "type": "string", - "format": "ip" - }, - "mode": { - "$ref": "#/components/schemas/BfdMode" - }, - "remote": { - "type": "string", - "format": "ip" - }, - "required_rx": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "$ref": "#/components/schemas/SwitchLocation" - } - }, - "required": [ - "detection_threshold", - "mode", - "remote", - "required_rx", - "switch" - ] - }, - "BgpConfig": { - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number for the BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "checker": { - "nullable": true, - "description": "Checker to apply to incoming messages.", - "default": null, - "type": "string" - }, - "originate": { - "description": "The set of prefixes for the BGP router to originate.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - }, - "shaper": { - "nullable": true, - "description": "Shaper to apply to outgoing messages.", - "default": null, - "type": "string" - } - }, - "required": [ - "asn", - "originate" - ] - }, - "BgpPeerConfig": { - "type": "object", - "properties": { - "addr": { - "description": "Address of the peer.", - "type": "string", - "format": "ipv4" - }, - "allowed_export": { - "description": "Define export policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "allowed_import": { - "description": "Define import policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "asn": { - "description": "The autonomous system number of the router the peer belongs to.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "communities": { - "description": "Include the provided communities in updates sent to the peer.", - "default": [], - "type": "array", - "items": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "connect_retry": { - "nullable": true, - "description": "The interval in seconds between peer connection retry attempts.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "delay_open": { - "nullable": true, - "description": "How long to delay sending open messages to a peer. In seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "enforce_first_as": { - "description": "Enforce that the first AS in paths received from this peer is the peer's AS.", - "default": false, - "type": "boolean" - }, - "hold_time": { - "nullable": true, - "description": "How long to keep a session alive without a keepalive in seconds. Defaults to 6.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "idle_hold_time": { - "nullable": true, - "description": "How long to keep a peer in idle after a state machine reset in seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "keepalive": { - "nullable": true, - "description": "The interval to send keepalive messages at.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "local_pref": { - "nullable": true, - "description": "Apply a local preference to routes received from this peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "md5_auth_key": { - "nullable": true, - "description": "Use the given key for TCP-MD5 authentication with the peer.", - "default": null, - "type": "string" - }, - "min_ttl": { - "nullable": true, - "description": "Require messages from a peer have a minimum IP time to live field.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "multi_exit_discriminator": { - "nullable": true, - "description": "Apply the provided multi-exit discriminator (MED) updates sent to the peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "port": { - "description": "Switch port the peer is reachable on.", - "type": "string" - }, - "remote_asn": { - "nullable": true, - "description": "Require that a peer has a specified ASN.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "Associate a VLAN ID with a BGP peer session.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "addr", - "asn", - "port" - ] - }, - "BlobStorageBackend": { - "description": "A storage backend for a disk whose initial contents are given explicitly by the specification.", - "type": "object", - "properties": { - "base64": { - "description": "The disk's initial contents, encoded as a base64 string.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - } - }, - "required": [ - "base64", - "readonly" - ], - "additionalProperties": false - }, - "Board": { - "description": "A VM's mainboard.", - "type": "object", - "properties": { - "chipset": { - "description": "The chipset to expose to guest software.", - "allOf": [ - { - "$ref": "#/components/schemas/Chipset" - } - ] - }, - "cpuid": { - "nullable": true, - "description": "The CPUID values to expose to the guest. If `None`, bhyve will derive default values from the host's CPUID values.", - "allOf": [ - { - "$ref": "#/components/schemas/Cpuid" - } - ] - }, - "cpus": { - "description": "The number of virtual logical processors attached to this VM.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "guest_hv_interface": { - "description": "The hypervisor platform to expose to the guest. The default is a bhyve-compatible interface with no additional features.\n\nFor compatibility with older versions of Propolis, this field is only serialized if it specifies a non-default interface.", - "allOf": [ - { - "$ref": "#/components/schemas/GuestHypervisorInterface" - } - ] - }, - "memory_mb": { - "description": "The amount of guest RAM attached to this VM.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "chipset", - "cpus", - "memory_mb" - ], - "additionalProperties": false - }, - "BootImageHeader": { - "type": "object", - "properties": { - "data_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "flags": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "image_name": { - "type": "string" - }, - "image_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "sha256": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 32, - "maxItems": 32 - }, - "target_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "data_size", - "flags", - "image_name", - "image_size", - "sha256", - "target_size" - ] - }, - "BootOrderEntry": { - "description": "An entry in the boot order stored in a [`BootSettings`] component.", - "type": "object", - "properties": { - "id": { - "description": "The ID of another component in the spec that Propolis should try to boot from.\n\nCurrently, only disk device components are supported.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - } - }, - "required": [ - "id" - ] - }, - "BootPartitionContents": { - "type": "object", - "properties": { - "boot_disk": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/M2Slot" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/M2Slot" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_a": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_b": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "boot_disk", - "slot_a", - "slot_b" - ] - }, - "BootPartitionDetails": { - "type": "object", - "properties": { - "artifact_hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "artifact_size": { - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "header": { - "$ref": "#/components/schemas/BootImageHeader" - } - }, - "required": [ - "artifact_hash", - "artifact_size", - "header" - ] - }, - "BootSettings": { - "description": "Settings supplied to the guest's firmware image that specify the order in which it should consider its options when selecting a device to try to boot from.", - "type": "object", - "properties": { - "order": { - "description": "An ordered list of components to attempt to boot from.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BootOrderEntry" - } - } - }, - "required": [ - "order" - ], - "additionalProperties": false - }, - "BootstoreStatus": { - "type": "object", - "properties": { - "accepted_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "established_connections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EstablishedConnection" - } - }, - "fsm_ledger_generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "fsm_state": { - "type": "string" - }, - "negotiating_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "network_config_ledger_generation": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "peers": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - } - }, - "required": [ - "accepted_connections", - "established_connections", - "fsm_ledger_generation", - "fsm_state", - "negotiating_connections", - "peers" - ] - }, - "BundleUtilization": { - "description": "The portion of a debug dataset used for zone bundles.", - "type": "object", - "properties": { - "bytes_available": { - "description": "The total number of bytes available for zone bundles.\n\nThis is `dataset_quota` multiplied by the context's storage limit.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes_used": { - "description": "Total bundle usage, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "dataset_quota": { - "description": "The total dataset quota, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bytes_available", - "bytes_used", - "dataset_quota" - ] - }, - "ByteCount": { - "description": "Byte count to express memory or storage capacity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "Chipset": { - "description": "A kind of virtual chipset.", - "oneOf": [ - { - "description": "An Intel 440FX-compatible chipset.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i440_fx" - ] - }, - "value": { - "$ref": "#/components/schemas/I440Fx" - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "CleanupContext": { - "description": "Context provided for the zone bundle cleanup task.", - "type": "object", - "properties": { - "period": { - "description": "The period on which automatic checks and cleanup is performed.", - "allOf": [ - { - "$ref": "#/components/schemas/CleanupPeriod" - } - ] - }, - "priority": { - "description": "The priority ordering for keeping old bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "description": "The limit on the dataset quota available for zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/StorageLimit" - } - ] - } - }, - "required": [ - "period", - "priority", - "storage_limit" - ] - }, - "CleanupContextUpdate": { - "description": "Parameters used to update the zone bundle cleanup context.", - "type": "object", - "properties": { - "period": { - "nullable": true, - "description": "The new period on which automatic cleanups are run.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "priority": { - "nullable": true, - "description": "The priority ordering for preserving old zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "nullable": true, - "description": "The new limit on the underlying dataset quota allowed for bundles.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "CleanupCount": { - "description": "The count of bundles / bytes removed during a cleanup operation.", - "type": "object", - "properties": { - "bundles": { - "description": "The number of bundles removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes": { - "description": "The number of bytes removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bundles", - "bytes" - ] - }, - "CleanupPeriod": { - "description": "A period on which bundles are automatically cleaned up.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "ComponentV0": { - "oneOf": [ - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioDisk" - }, - "type": { - "type": "string", - "enum": [ - "virtio_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/NvmeDisk" - }, - "type": { - "type": "string", - "enum": [ - "nvme_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNic" - }, - "type": { - "type": "string", - "enum": [ - "virtio_nic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SerialPort" - }, - "type": { - "type": "string", - "enum": [ - "serial_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/PciPciBridge" - }, - "type": { - "type": "string", - "enum": [ - "pci_pci_bridge" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/QemuPvpanic" - }, - "type": { - "type": "string", - "enum": [ - "qemu_pvpanic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BootSettings" - }, - "type": { - "type": "string", - "enum": [ - "boot_settings" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPciPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_pci_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuP9" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_p9" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/P9fs" - }, - "type": { - "type": "string", - "enum": [ - "p9fs" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/MigrationFailureInjector" - }, - "type": { - "type": "string", - "enum": [ - "migration_failure_injector" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/CrucibleStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "crucible_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/FileStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "file_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BlobStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "blob_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "virtio_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/DlpiNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "dlpi_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - } - ] - }, - "CompressionAlgorithm": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "on" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "off" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "gzip" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "level": { - "$ref": "#/components/schemas/GzipLevel" - }, - "type": { - "type": "string", - "enum": [ - "gzip_n" - ] - } - }, - "required": [ - "level", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lz4" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lzjb" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "zle" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "ConfigReconcilerInventory": { - "description": "Describes the last attempt made by the sled-agent-config-reconciler to reconcile the current sled config against the actual state of the sled.", - "type": "object", - "properties": { - "boot_partitions": { - "$ref": "#/components/schemas/BootPartitionContents" - }, - "datasets": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "external_disks": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "last_reconciled_config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "orphaned_datasets": { - "title": "IdOrdMap", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/OrphanedDataset" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/OrphanedDataset" - }, - "uniqueItems": true - }, - "remove_mupdate_override": { - "nullable": true, - "description": "The result of removing the mupdate override file on disk.\n\n`None` if `remove_mupdate_override` was not provided in the sled config.", - "allOf": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideInventory" - } - ] - }, - "zones": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - } - }, - "required": [ - "boot_partitions", - "datasets", - "external_disks", - "last_reconciled_config", - "orphaned_datasets", - "zones" - ] - }, - "ConfigReconcilerInventoryResult": { - "oneOf": [ - { - "type": "object", - "properties": { - "result": { - "type": "string", - "enum": [ - "ok" - ] - } - }, - "required": [ - "result" - ] - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "result": { - "type": "string", - "enum": [ - "err" - ] - } - }, - "required": [ - "message", - "result" - ] - } - ] - }, - "ConfigReconcilerInventoryStatus": { - "description": "Status of the sled-agent-config-reconciler task.", - "oneOf": [ - { - "description": "The reconciler task has not yet run for the first time since sled-agent started.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "not_yet_run" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The reconciler task is actively running.", - "type": "object", - "properties": { - "config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "running_for": { - "$ref": "#/components/schemas/Duration" - }, - "started_at": { - "type": "string", - "format": "date-time" - }, - "status": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "config", - "running_for", - "started_at", - "status" - ] - }, - { - "description": "The reconciler task is currently idle, but previously did complete a reconciliation attempt.\n\nThis variant does not include the `OmicronSledConfig` used in the last attempt, because that's always available via [`ConfigReconcilerInventory::last_reconciled_config`].", - "type": "object", - "properties": { - "completed_at": { - "type": "string", - "format": "date-time" - }, - "ran_for": { - "$ref": "#/components/schemas/Duration" - }, - "status": { - "type": "string", - "enum": [ - "idle" - ] - } - }, - "required": [ - "completed_at", - "ran_for", - "status" - ] - } - ] - }, - "Cpuid": { - "description": "A set of CPUID values to expose to a guest.", - "type": "object", - "properties": { - "entries": { - "description": "A list of CPUID leaves/subleaves and their associated values.\n\nPropolis servers require that each entry's `leaf` be unique and that it falls in either the \"standard\" (0 to 0xFFFF) or \"extended\" (0x8000_0000 to 0x8000_FFFF) function ranges, since these are the only valid input ranges currently defined by Intel and AMD. See the Intel 64 and IA-32 Architectures Software Developer's Manual (June 2024) Table 3-17 and the AMD64 Architecture Programmer's Manual (March 2024) Volume 3's documentation of the CPUID instruction.", - "type": "array", - "items": { - "$ref": "#/components/schemas/CpuidEntry" - } - }, - "vendor": { - "description": "The CPU vendor to emulate.\n\nCPUID leaves in the extended range (0x8000_0000 to 0x8000_FFFF) have vendor-defined semantics. Propolis uses this value to determine these semantics when deciding whether it needs to specialize the supplied template values for these leaves.", - "allOf": [ - { - "$ref": "#/components/schemas/CpuidVendor" - } - ] - } - }, - "required": [ - "entries", - "vendor" - ], - "additionalProperties": false - }, - "CpuidEntry": { - "description": "A full description of a CPUID leaf/subleaf and the values it produces.", - "type": "object", - "properties": { - "eax": { - "description": "The value to return in eax.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ebx": { - "description": "The value to return in ebx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ecx": { - "description": "The value to return in ecx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "edx": { - "description": "The value to return in edx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "leaf": { - "description": "The leaf (function) number for this entry.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "subleaf": { - "nullable": true, - "description": "The subleaf (index) number for this entry, if it uses subleaves.", - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "eax", - "ebx", - "ecx", - "edx", - "leaf" - ], - "additionalProperties": false - }, - "CpuidVendor": { - "description": "A CPU vendor to use when interpreting the meanings of CPUID leaves in the extended ID range (0x80000000 to 0x8000FFFF).", - "type": "string", - "enum": [ - "amd", - "intel" - ] - }, - "CrucibleStorageBackend": { - "description": "A Crucible storage backend.", - "type": "object", - "properties": { - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "request_json": { - "description": "A serialized `[crucible_client_types::VolumeConstructionRequest]`. This is stored in serialized form so that breaking changes to the definition of a `VolumeConstructionRequest` do not inadvertently break instance spec deserialization.\n\nWhen using a spec to initialize a new instance, the spec author must ensure this request is well-formed and can be deserialized by the version of `crucible_client_types` used by the target Propolis.", - "type": "string" - } - }, - "required": [ - "readonly", - "request_json" - ], - "additionalProperties": false - }, - "DatasetConfig": { - "description": "Configuration information necessary to request a single dataset.\n\nThese datasets are tracked directly by Nexus.", - "type": "object", - "properties": { - "compression": { - "description": "The compression mode to be used by the dataset", - "allOf": [ - { - "$ref": "#/components/schemas/CompressionAlgorithm" - } - ] - }, - "id": { - "description": "The UUID of the dataset being requested", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetUuid" - } - ] - }, - "name": { - "description": "The dataset's name", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetName" - } - ] - }, - "quota": { - "nullable": true, - "description": "The upper bound on the amount of storage used by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "reservation": { - "nullable": true, - "description": "The lower bound on the amount of storage usable by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "compression", - "id", - "name" - ] - }, - "DatasetKind": { - "description": "The kind of dataset. See the `DatasetKind` enum in omicron-common for possible values.", - "type": "string" - }, - "DatasetName": { - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/DatasetKind" - }, - "pool_name": { - "$ref": "#/components/schemas/ZpoolName" - } - }, - "required": [ - "kind", - "pool_name" - ] - }, - "DatasetUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::DatasetUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "DhcpConfig": { - "description": "DHCP configuration for a port\n\nNot present here: Hostname (DHCPv4 option 12; used in DHCPv6 option 39); we use `InstanceRuntimeState::hostname` for this value.", - "type": "object", - "properties": { - "dns_servers": { - "description": "DNS servers to send to the instance\n\n(DHCPv4 option 6; DHCPv6 option 23)", - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - }, - "host_domain": { - "nullable": true, - "description": "DNS zone this instance's hostname belongs to (e.g. the `project.example` part of `instance1.project.example`)\n\n(DHCPv4 option 15; used in DHCPv6 option 39)", - "type": "string" - }, - "search_domains": { - "description": "DNS search domains\n\n(DHCPv4 option 119; DHCPv6 option 24)", - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "dns_servers", - "search_domains" - ] - }, - "DiskEnsureBody": { - "description": "Sent from to a sled agent to establish the runtime state of a Disk", - "type": "object", - "properties": { - "initial_runtime": { - "description": "Last runtime state of the Disk known to Nexus (used if the agent has never seen this Disk before).", - "allOf": [ - { - "$ref": "#/components/schemas/DiskRuntimeState" - } - ] - }, - "target": { - "description": "requested runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskStateRequested" - } - ] - } - }, - "required": [ - "initial_runtime", - "target" - ] - }, - "DiskIdentity": { - "description": "Uniquely identifies a disk.", - "type": "object", - "properties": { - "model": { - "type": "string" - }, - "serial": { - "type": "string" - }, - "vendor": { - "type": "string" - } - }, - "required": [ - "model", - "serial", - "vendor" - ] - }, - "DiskRuntimeState": { - "description": "Runtime state of the Disk, which includes its attach state and some minimal metadata", - "type": "object", - "properties": { - "disk_state": { - "description": "runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskState" - } - ] - }, - "gen": { - "description": "generation number for this state", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "time_updated": { - "description": "timestamp for this information", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "disk_state", - "gen", - "time_updated" - ] - }, - "DiskState": { - "description": "State of a Disk", - "oneOf": [ - { - "description": "Disk is being initialized", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "creating" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready but detached from any Instance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready to receive blocks from an external source", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "import_ready" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from a URL", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_url" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from bulk writes", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_bulk_writes" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being finalized to state Detached", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "finalizing" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is undergoing maintenance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "maintenance" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is being detached from the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "detaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk has been destroyed", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is unavailable", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskStateRequested": { - "description": "Used to request a Disk state change", - "oneOf": [ - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskVariant": { - "type": "string", - "enum": [ - "U2", - "M2" - ] - }, - "DlpiNetworkBackend": { - "description": "A network backend associated with a DLPI VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "Duration": { - "type": "object", - "properties": { - "nanos": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "secs": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "nanos", - "secs" - ] - }, - "EarlyNetworkConfig": { - "description": "Network configuration required to bring up the control plane\n\nThe fields in this structure are those from [`crate::rack_init::RackInitializeRequest`] necessary for use beyond RSS. This is just for the initial rack configuration and cold boot purposes. Updates come from Nexus.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/EarlyNetworkConfigBody" - }, - "generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "EarlyNetworkConfigBody": { - "description": "This is the actual configuration of EarlyNetworking.\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "ntp_servers": { - "description": "The external NTP server addresses.", - "type": "array", - "items": { - "type": "string" - } - }, - "rack_network_config": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RackNetworkConfigV2" - } - ] - } - }, - "required": [ - "ntp_servers" - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "EstablishedConnection": { - "type": "object", - "properties": { - "addr": { - "type": "string" - }, - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - } - }, - "required": [ - "addr", - "baseboard" - ] - }, - "ExternalIp": { - "description": "An external IP address used by a probe.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used by the address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external IP address.", - "type": "string", - "format": "ip" - }, - "kind": { - "description": "The kind of address this is.", - "allOf": [ - { - "$ref": "#/components/schemas/IpKind" - } - ] - }, - "last_port": { - "description": "The last port used by the address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "kind", - "last_port" - ] - }, - "ExternalIpGatewayMap": { - "description": "Per-NIC mappings from external IP addresses to the Internet Gateways which can choose them as a source.", - "type": "object", - "properties": { - "mappings": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - } - } - } - }, - "required": [ - "mappings" - ] - }, - "FileStorageBackend": { - "description": "A storage backend backed by a file in the host system's file system.", - "type": "object", - "properties": { - "block_size": { - "description": "Block size of the backend", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "path": { - "description": "A path to a file that backs a disk.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "workers": { - "nullable": true, - "description": "Optional worker threads for the file backend, exposed for testing only.", - "type": "integer", - "format": "uint", - "minimum": 1 - } - }, - "required": [ - "block_size", - "path", - "readonly" - ], - "additionalProperties": false - }, - "Generation": { - "description": "Generation numbers stored in the database, used for optimistic concurrency control", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "GuestHypervisorInterface": { - "description": "A hypervisor interface to expose to the guest.", - "oneOf": [ - { - "description": "Expose a bhyve-like interface (\"bhyve bhyve \" as the hypervisor ID in leaf 0x4000_0000 and no additional leaves or features).", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bhyve" - ] - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "description": "Expose a Hyper-V-compatible hypervisor interface with the supplied features enabled.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "hyper_v" - ] - }, - "value": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HyperVFeatureFlag" - }, - "uniqueItems": true - } - }, - "required": [ - "features" - ], - "additionalProperties": false - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "GzipLevel": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "HostIdentifier": { - "description": "A `HostIdentifier` represents either an IP host or network (v4 or v6), or an entire VPC (identified by its VNI). It is used in firewall rule host filters.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "HostPhase2DesiredContents": { - "description": "Describes the desired contents of a host phase 2 slot (i.e., the boot partition on one of the internal M.2 drives).", - "oneOf": [ - { - "description": "Do not change the current contents.\n\nWe use this value when we've detected a sled has been mupdated (and we don't want to overwrite phase 2 images until we understand how to recover from that mupdate) and as the default value when reading an [`OmicronSledConfig`] that was ledgered before this concept existed.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "current_contents" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Set the phase 2 slot to the given artifact.\n\nThe artifact will come from an unpacked and distributed TUF repo.", - "type": "object", - "properties": { - "hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "type": { - "type": "string", - "enum": [ - "artifact" - ] - } - }, - "required": [ - "hash", - "type" - ] - } - ] - }, - "HostPhase2DesiredSlots": { - "description": "Describes the desired contents for both host phase 2 slots.", - "type": "object", - "properties": { - "slot_a": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - }, - "slot_b": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - } - }, - "required": [ - "slot_a", - "slot_b" - ] - }, - "HostPortConfig": { - "type": "object", - "properties": { - "addrs": { - "description": "IP Address and prefix (e.g., `192.168.0.1/16`) to apply to switchport (must be in infra_ip pool). May also include an optional VLAN ID.", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "lldp": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Switchport to use for external connectivity", - "type": "string" - }, - "tx_eq": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - } - }, - "required": [ - "addrs", - "port" - ] - }, - "Hostname": { - "title": "An RFC-1035-compliant hostname", - "description": "A hostname identifies a host on a network, and is usually a dot-delimited sequence of labels, where each label contains only letters, digits, or the hyphen. See RFCs 1035 and 952 for more details.", - "type": "string", - "pattern": "^([a-zA-Z0-9]+[a-zA-Z0-9\\-]*(? for background.", - "oneOf": [ - { - "description": "Start the switch zone if a switch is present.\n\nThis is the default policy.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "start_if_switch_present" - ] - } - }, - "required": [ - "policy" - ] - }, - { - "description": "Even if a switch zone is present, stop the switch zone.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "stop_despite_switch_presence" - ] - } - }, - "required": [ - "policy" - ] - } - ] - }, - "OrphanedDataset": { - "type": "object", - "properties": { - "available": { - "$ref": "#/components/schemas/ByteCount" - }, - "id": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/DatasetUuid" - } - ] - }, - "mounted": { - "type": "boolean" - }, - "name": { - "$ref": "#/components/schemas/DatasetName" - }, - "reason": { - "type": "string" - }, - "used": { - "$ref": "#/components/schemas/ByteCount" - } - }, - "required": [ - "available", - "mounted", - "name", - "reason", - "used" - ] - }, - "P9fs": { - "description": "Describes a filesystem to expose through a P9 device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "chunk_size": { - "description": "The chunk size to use in the 9P protocol. Vanilla Helios images should use 8192. Falcon Helios base images and Linux can use up to 65536.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach the guest to this P9 filesystem.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - }, - "source": { - "description": "The host source path to mount into the guest.", - "type": "string" - }, - "target": { - "description": "The 9P target filesystem tag.", - "type": "string" - } - }, - "required": [ - "chunk_size", - "pci_path", - "source", - "target" - ], - "additionalProperties": false - }, - "PciPath": { - "description": "A PCI bus/device/function tuple.", - "type": "object", - "properties": { - "bus": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "device": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "function": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "bus", - "device", - "function" - ] - }, - "PciPciBridge": { - "description": "A PCI-PCI bridge.", - "type": "object", - "properties": { - "downstream_bus": { - "description": "The logical bus number of this bridge's downstream bus. Other devices may use this bus number in their PCI paths to indicate they should be attached to this bridge's bus.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach this bridge.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "downstream_bus", - "pci_path" - ], - "additionalProperties": false - }, - "PhysicalDiskUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::PhysicalDiskUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "PortConfigV2": { - "type": "object", - "properties": { - "addresses": { - "description": "This port's addresses and optional vlan IDs", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "autoneg": { - "description": "Whether or not to set autonegotiation", - "default": false, - "type": "boolean" - }, - "bgp_peers": { - "description": "BGP peers on this port", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeerConfig" - } - }, - "lldp": { - "nullable": true, - "description": "LLDP configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Nmae of the port this config applies to.", - "type": "string" - }, - "routes": { - "description": "The set of routes associated with this port.", - "type": "array", - "items": { - "$ref": "#/components/schemas/RouteConfig" - } - }, - "switch": { - "description": "Switch the port belongs to.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - }, - "tx_eq": { - "nullable": true, - "description": "TX-EQ configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - }, - "uplink_port_fec": { - "nullable": true, - "description": "Port forward error correction type.", - "allOf": [ - { - "$ref": "#/components/schemas/PortFec" - } - ] - }, - "uplink_port_speed": { - "description": "Port speed.", - "allOf": [ - { - "$ref": "#/components/schemas/PortSpeed" - } - ] - } - }, - "required": [ - "addresses", - "bgp_peers", - "port", - "routes", - "switch", - "uplink_port_speed" - ] - }, - "PortFec": { - "description": "Switchport FEC options", - "type": "string", - "enum": [ - "firecode", - "none", - "rs" - ] - }, - "PortSpeed": { - "description": "Switchport Speed options", - "type": "string", - "enum": [ - "speed0_g", - "speed1_g", - "speed10_g", - "speed25_g", - "speed40_g", - "speed50_g", - "speed100_g", - "speed200_g", - "speed400_g" - ] - }, - "PriorityDimension": { - "description": "A dimension along with bundles can be sorted, to determine priority.", - "oneOf": [ - { - "description": "Sorting by time, with older bundles with lower priority.", - "type": "string", - "enum": [ - "time" - ] - }, - { - "description": "Sorting by the cause for creating the bundle.", - "type": "string", - "enum": [ - "cause" - ] - } - ] - }, - "PriorityOrder": { - "description": "The priority order for bundles during cleanup.\n\nBundles are sorted along the dimensions in [`PriorityDimension`], with each dimension appearing exactly once. During cleanup, lesser-priority bundles are pruned first, to maintain the dataset quota. Note that bundles are sorted by each dimension in the order in which they appear, with each dimension having higher priority than the next.", - "type": "array", - "items": { - "$ref": "#/components/schemas/PriorityDimension" - }, - "minItems": 2, - "maxItems": 2 - }, - "ProbeCreate": { - "description": "Parameters used to create a probe.", - "type": "object", - "properties": { - "external_ips": { - "description": "The external IP addresses assigned to the probe.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalIp" - } - }, - "id": { - "description": "The ID for the probe.", - "allOf": [ - { - "$ref": "#/components/schemas/ProbeUuid" - } - ] - }, - "interface": { - "description": "The probe's networking interface.", - "allOf": [ - { - "$ref": "#/components/schemas/NetworkInterface" - } - ] - } - }, - "required": [ - "external_ips", - "id", - "interface" - ] - }, - "ProbeSet": { - "description": "A set of probes that the target sled should run.", - "type": "object", - "properties": { - "probes": { - "title": "IdHashMap", - "description": "The exact set of probes to run.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ProbeCreate" - } - ], - "path": "iddqd::IdHashMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ProbeCreate" - }, - "uniqueItems": true - } - }, - "required": [ - "probes" - ] - }, - "ProbeUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ProbeUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "QemuPvpanic": { - "type": "object", - "properties": { - "enable_isa": { - "description": "Enable the QEMU PVPANIC ISA bus device (I/O port 0x505).", - "type": "boolean" - } - }, - "required": [ - "enable_isa" - ], - "additionalProperties": false - }, - "RackNetworkConfigV2": { - "description": "Initial network configuration", - "type": "object", - "properties": { - "bfd": { - "description": "BFD configuration for connecting the rack to external networks", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/BfdPeerConfig" - } - }, - "bgp": { - "description": "BGP configurations for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpConfig" - } - }, - "infra_ip_first": { - "description": "First ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "infra_ip_last": { - "description": "Last ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "ports": { - "description": "Uplinks for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/PortConfigV2" - } - }, - "rack_subnet": { - "$ref": "#/components/schemas/Ipv6Net" - } - }, - "required": [ - "bgp", - "infra_ip_first", - "infra_ip_last", - "ports", - "rack_subnet" - ] - }, - "RemoveMupdateOverrideBootSuccessInventory": { - "description": "Status of removing the mupdate override on the boot disk.", - "oneOf": [ - { - "description": "The mupdate override was successfully removed.", - "type": "string", - "enum": [ - "removed" - ] - }, - { - "description": "No mupdate override was found.\n\nThis is considered a success for idempotency reasons.", - "type": "string", - "enum": [ - "no_override" - ] - } - ] - }, - "RemoveMupdateOverrideInventory": { - "description": "Status of removing the mupdate override in the inventory.", - "type": "object", - "properties": { - "boot_disk_result": { - "description": "The result of removing the mupdate override on the boot disk.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_message": { - "description": "What happened on non-boot disks.\n\nWe aren't modeling this out in more detail, because we plan to not try and keep ledgered data in sync across both disks in the future.", - "type": "string" - } - }, - "required": [ - "boot_disk_result", - "non_boot_message" - ] - }, - "ResolvedVpcFirewallRule": { - "description": "VPC firewall rule after object name resolution has been performed by Nexus", - "type": "object", - "properties": { - "action": { - "$ref": "#/components/schemas/VpcFirewallRuleAction" - }, - "direction": { - "$ref": "#/components/schemas/VpcFirewallRuleDirection" - }, - "filter_hosts": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/HostIdentifier" - }, - "uniqueItems": true - }, - "filter_ports": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/L4PortRange" - } - }, - "filter_protocols": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleProtocol" - } - }, - "priority": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "status": { - "$ref": "#/components/schemas/VpcFirewallRuleStatus" - }, - "targets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NetworkInterface" - } - } - }, - "required": [ - "action", - "direction", - "priority", - "status", - "targets" - ] - }, - "ResolvedVpcRoute": { - "description": "A VPC route resolved into a concrete target.", - "type": "object", - "properties": { - "dest": { - "$ref": "#/components/schemas/IpNet" - }, - "target": { - "$ref": "#/components/schemas/RouterTarget" - } - }, - "required": [ - "dest", - "target" - ] - }, - "ResolvedVpcRouteSet": { - "description": "An updated set of routes for a given VPC and/or subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "routes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRoute" - }, - "uniqueItems": true - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id", - "routes" - ] - }, - "ResolvedVpcRouteState": { - "description": "Version information for routes on a given VPC subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id" - ] - }, - "RouteConfig": { - "type": "object", - "properties": { - "destination": { - "description": "The destination of the route.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "nexthop": { - "description": "The nexthop/gateway address.", - "type": "string", - "format": "ip" - }, - "rib_priority": { - "nullable": true, - "description": "The RIB priority (i.e. Admin Distance) associated with this route.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id associated with this route.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "destination", - "nexthop" - ] - }, - "RouterId": { - "description": "Identifier for a VPC and/or subnet.", - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/RouterKind" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "kind", - "vni" - ] - }, - "RouterKind": { - "description": "The scope of a set of VPC router rules.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "system" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "subnet": { - "$ref": "#/components/schemas/IpNet" - }, - "type": { - "type": "string", - "enum": [ - "custom" - ] - } - }, - "required": [ - "subnet", - "type" - ] - } - ] - }, - "RouterTarget": { - "description": "The target for a given router entry.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "drop" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "internet_gateway" - ] - }, - "value": { - "$ref": "#/components/schemas/InternetGatewayRouterTarget" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc_subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "RouterVersion": { - "description": "Information on the current parent router (and version) of a route set according to the control plane.", - "type": "object", - "properties": { - "router_id": { - "type": "string", - "format": "uuid" - }, - "version": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "router_id", - "version" - ] - }, - "SerialPort": { - "description": "A serial port device.", - "type": "object", - "properties": { - "num": { - "description": "The serial port number for this port.", - "allOf": [ - { - "$ref": "#/components/schemas/SerialPortNumber" - } - ] - } - }, - "required": [ - "num" - ], - "additionalProperties": false - }, - "SerialPortNumber": { - "description": "A serial port identifier, which determines what I/O ports a guest can use to access a port.", - "type": "string", - "enum": [ - "com1", - "com2", - "com3", - "com4" - ] - }, - "SledCpuFamily": { - "description": "Identifies the kind of CPU present on a sled, determined by reading CPUID.\n\nThis is intended to broadly support the control plane answering the question \"can I run this instance on that sled?\" given an instance with either no or some CPU platform requirement. It is not enough information for more precise placement questions - for example, is a CPU a high-frequency part or many-core part? We don't include Genoa here, but in that CPU family there are high frequency parts, many-core parts, and large-cache parts. To support those questions (or satisfactorily answer #8730) we would need to collect additional information and send it along.", - "oneOf": [ - { - "description": "The CPU vendor or its family number don't correspond to any of the known family variants.", - "type": "string", - "enum": [ - "unknown" - ] - }, - { - "description": "AMD Milan processors (or very close). Could be an actual Milan in a Gimlet, a close-to-Milan client Zen 3 part, or Zen 4 (for which Milan is the greatest common denominator).", - "type": "string", - "enum": [ - "amd_milan" - ] - }, - { - "description": "AMD Turin processors (or very close). Could be an actual Turin in a Cosmo, or a close-to-Turin client Zen 5 part.", - "type": "string", - "enum": [ - "amd_turin" - ] - }, - { - "description": "AMD Turin Dense processors. There are no \"Turin Dense-like\" CPUs unlike other cases, so this means a bona fide Zen 5c Turin Dense part.", - "type": "string", - "enum": [ - "amd_turin_dense" - ] - } - ] - }, - "SledDiagnosticsQueryOutput": { - "oneOf": [ - { - "type": "object", - "properties": { - "success": { - "type": "object", - "properties": { - "command": { - "description": "The command and its arguments.", - "type": "string" - }, - "exit_code": { - "nullable": true, - "description": "The exit code if one was present when the command exited.", - "type": "integer", - "format": "int32" - }, - "exit_status": { - "description": "The exit status of the command. This will be the exit code (if any) and exit reason such as from a signal.", - "type": "string" - }, - "stdio": { - "description": "Any stdout/stderr produced by the command.", - "type": "string" - } - }, - "required": [ - "command", - "exit_status", - "stdio" - ] - } - }, - "required": [ - "success" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "failure": { - "type": "object", - "properties": { - "error": { - "description": "The reason the command failed to execute.", - "type": "string" - } - }, - "required": [ - "error" - ] - } - }, - "required": [ - "failure" - ], - "additionalProperties": false - } - ] - }, - "SledIdentifiers": { - "description": "Identifiers for a single sled.\n\nThis is intended primarily to be used in timeseries, to identify sled from which metric data originates.", - "type": "object", - "properties": { - "model": { - "description": "Model name of the sled", - "type": "string" - }, - "rack_id": { - "description": "Control plane ID of the rack this sled is a member of", - "type": "string", - "format": "uuid" - }, - "revision": { - "description": "Revision number of the sled", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "serial": { - "description": "Serial number of the sled", - "type": "string" - }, - "sled_id": { - "description": "Control plane ID for the sled itself", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "model", - "rack_id", - "revision", - "serial", - "sled_id" - ] - }, - "SledRole": { - "description": "Describes the role of the sled within the rack.\n\nNote that this may change if the sled is physically moved within the rack.", - "oneOf": [ - { - "description": "The sled is a general compute sled.", - "type": "string", - "enum": [ - "gimlet" - ] - }, - { - "description": "The sled is attached to the network switch, and has additional responsibilities.", - "type": "string", - "enum": [ - "scrimlet" - ] - } - ] - }, - "SledUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::SledUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "SledVmmState": { - "description": "A wrapper type containing a sled's total knowledge of the state of a VMM.", - "type": "object", - "properties": { - "migration_in": { - "nullable": true, - "description": "The current state of any inbound migration to this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "migration_out": { - "nullable": true, - "description": "The state of any outbound migration from this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "vmm_state": { - "description": "The most recent state of the sled's VMM process.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmRuntimeState" - } - ] - } - }, - "required": [ - "vmm_state" - ] - }, - "SoftNpuP9": { - "description": "Describes a PCI device that shares host files with the guest using the P9 protocol.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPciPort": { - "description": "Describes a SoftNPU PCI device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPort": { - "description": "Describes a port in a SoftNPU emulated ASIC.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the port's associated DLPI backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "link_name": { - "description": "The data link name for this port.", - "type": "string" - } - }, - "required": [ - "backend_id", - "link_name" - ], - "additionalProperties": false - }, - "SourceNatConfig": { - "description": "An IP address and port range used for source NAT, i.e., making outbound network connections from guests or services.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used for source NAT, inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external address provided to the instance or service.", - "type": "string", - "format": "ip" - }, - "last_port": { - "description": "The last port used for source NAT, also inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "last_port" - ] - }, - "SpecKey": { - "description": "A key identifying a component in an instance spec.", - "oneOf": [ - { - "title": "uuid", - "allOf": [ - { - "type": "string", - "format": "uuid" - } - ] - }, - { - "title": "name", - "allOf": [ - { - "type": "string" - } - ] - } - ] - }, - "StartSledAgentRequest": { - "description": "Configuration information for launching a Sled Agent.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/StartSledAgentRequestBody" - }, - "generation": { - "description": "The current generation number of data as stored in CRDB.\n\nThe initial generation is set during RSS time and then only mutated by Nexus. For now, we don't actually anticipate mutating this data, but we leave open the possiblity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "StartSledAgentRequestBody": { - "description": "This is the actual app level data of `StartSledAgentRequest`\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "id": { - "description": "Uuid of the Sled Agent to be created.", - "allOf": [ - { - "$ref": "#/components/schemas/SledUuid" - } - ] - }, - "is_lrtq_learner": { - "description": "Is this node an LRTQ learner node?\n\nWe only put the node into learner mode if `use_trust_quorum` is also true.", - "type": "boolean" - }, - "rack_id": { - "description": "Uuid of the rack to which this sled agent belongs.", - "type": "string", - "format": "uuid" - }, - "subnet": { - "description": "Portion of the IP space to be managed by the Sled Agent.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Subnet" - } - ] - }, - "use_trust_quorum": { - "description": "Use trust quorum for key generation", - "type": "boolean" - } - }, - "required": [ - "id", - "is_lrtq_learner", - "rack_id", - "subnet", - "use_trust_quorum" - ] - }, - "StorageLimit": { - "description": "The limit on space allowed for zone bundles, as a percentage of the overall dataset's quota.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "SupportBundleMetadata": { - "description": "Metadata about a support bundle", - "type": "object", - "properties": { - "state": { - "$ref": "#/components/schemas/SupportBundleState" - }, - "support_bundle_id": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - "required": [ - "state", - "support_bundle_id" - ] - }, - "SupportBundleState": { - "type": "string", - "enum": [ - "complete", - "incomplete" - ] - }, - "SupportBundleUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::SupportBundleUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "SwitchLocation": { - "description": "Identifies switch physical location", - "oneOf": [ - { - "description": "Switch in upper slot", - "type": "string", - "enum": [ - "switch0" - ] - }, - { - "description": "Switch in lower slot", - "type": "string", - "enum": [ - "switch1" - ] - } - ] - }, - "SwitchPorts": { - "description": "A set of switch uplinks.", - "type": "object", - "properties": { - "uplinks": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HostPortConfig" - } - } - }, - "required": [ - "uplinks" - ] - }, - "TxEqConfig": { - "description": "Per-port tx-eq overrides. This can be used to fine-tune the transceiver equalization settings to improve signal integrity.", - "type": "object", - "properties": { - "main": { - "nullable": true, - "description": "Main tap", - "type": "integer", - "format": "int32" - }, - "post1": { - "nullable": true, - "description": "Post-cursor tap1", - "type": "integer", - "format": "int32" - }, - "post2": { - "nullable": true, - "description": "Post-cursor tap2", - "type": "integer", - "format": "int32" - }, - "pre1": { - "nullable": true, - "description": "Pre-cursor tap1", - "type": "integer", - "format": "int32" - }, - "pre2": { - "nullable": true, - "description": "Pre-cursor tap2", - "type": "integer", - "format": "int32" - } - } - }, - "UplinkAddressConfig": { - "type": "object", - "properties": { - "address": { - "$ref": "#/components/schemas/IpNet" - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id (if any) associated with this address.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "address" - ] - }, - "VirtioDisk": { - "description": "A disk that presents a virtio-block interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the disk's backend component.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "pci_path": { - "description": "The PCI bus/device/function at which this disk should be attached.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtioNetworkBackend": { - "description": "A network backend associated with a virtio-net (viona) VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the viona VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "VirtioNic": { - "description": "A network card that presents a virtio-net interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the device's backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "interface_id": { - "description": "A caller-defined correlation identifier for this interface. If Propolis is configured to collect network interface kstats in its Oximeter metrics, the metric series for this interface will be associated with this identifier.", - "type": "string", - "format": "uuid" - }, - "pci_path": { - "description": "The PCI path at which to attach this device.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "interface_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtualNetworkInterfaceHost": { - "description": "A mapping from a virtual NIC to a physical host", - "type": "object", - "properties": { - "physical_host_ip": { - "type": "string", - "format": "ipv6" - }, - "virtual_ip": { - "type": "string", - "format": "ip" - }, - "virtual_mac": { - "$ref": "#/components/schemas/MacAddr" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "physical_host_ip", - "virtual_ip", - "virtual_mac", - "vni" - ] - }, - "VmmIssueDiskSnapshotRequestBody": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmIssueDiskSnapshotRequestResponse": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmPutStateBody": { - "description": "The body of a request to move a previously-ensured instance into a specific runtime state.", - "type": "object", - "properties": { - "state": { - "description": "The state into which the instance should be driven.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmStateRequested" - } - ] - } - }, - "required": [ - "state" - ] - }, - "VmmPutStateResponse": { - "description": "The response sent from a request to move an instance into a specific runtime state.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current runtime state of the instance after handling the request to change its state. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "VmmRuntimeState": { - "description": "The dynamic runtime properties of an individual VMM process.", - "type": "object", - "properties": { - "gen": { - "description": "The generation number for this VMM's state.", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "state": { - "description": "The last state reported by this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmState" - } - ] - }, - "time_updated": { - "description": "Timestamp for the VMM's state.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "gen", - "state", - "time_updated" - ] - }, - "VmmSpec": { - "description": "Specifies the virtual hardware configuration of a new Propolis VMM in the form of a Propolis instance specification.\n\nSled-agent expects that when an instance spec is provided alongside an `InstanceSledLocalConfig` to initialize a new instance, the NIC IDs in that config's network interface list will match the IDs of the virtio network backends in the instance spec.", - "allOf": [ - { - "$ref": "#/components/schemas/InstanceSpecV0" - } - ] - }, - "VmmState": { - "description": "One of the states that a VMM can be in.", - "oneOf": [ - { - "description": "The VMM is initializing and has not started running guest CPUs yet.", - "type": "string", - "enum": [ - "starting" - ] - }, - { - "description": "The VMM has finished initializing and may be running guest CPUs.", - "type": "string", - "enum": [ - "running" - ] - }, - { - "description": "The VMM is shutting down.", - "type": "string", - "enum": [ - "stopping" - ] - }, - { - "description": "The VMM's guest has stopped, and the guest will not run again, but the VMM process may not have released all of its resources yet.", - "type": "string", - "enum": [ - "stopped" - ] - }, - { - "description": "The VMM is being restarted or its guest OS is rebooting.", - "type": "string", - "enum": [ - "rebooting" - ] - }, - { - "description": "The VMM is part of a live migration.", - "type": "string", - "enum": [ - "migrating" - ] - }, - { - "description": "The VMM process reported an internal failure.", - "type": "string", - "enum": [ - "failed" - ] - }, - { - "description": "The VMM process has been destroyed and its resources have been released.", - "type": "string", - "enum": [ - "destroyed" - ] - } - ] - }, - "VmmStateRequested": { - "description": "Requestable running state of an Instance.\n\nA subset of [`omicron_common::api::external::InstanceState`].", - "oneOf": [ - { - "description": "Run this instance by migrating in from a previous running incarnation of the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "migration_target" - ] - }, - "value": { - "$ref": "#/components/schemas/InstanceMigrationTargetParams" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Start the instance if it is not already running.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Stop the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "stopped" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Immediately reset the instance, as though it had stopped and immediately began to run again.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "reboot" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "VmmUnregisterResponse": { - "description": "The response sent from a request to unregister an instance.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current state of the instance after handling the request to unregister it. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "Vni": { - "description": "A Geneve Virtual Network Identifier", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "VpcFirewallIcmpFilter": { - "type": "object", - "properties": { - "code": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/IcmpParamRange" - } - ] - }, - "icmp_type": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "icmp_type" - ] - }, - "VpcFirewallRuleAction": { - "type": "string", - "enum": [ - "allow", - "deny" - ] - }, - "VpcFirewallRuleDirection": { - "type": "string", - "enum": [ - "inbound", - "outbound" - ] - }, - "VpcFirewallRuleProtocol": { - "description": "The protocols that may be specified in a firewall rule's filter", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "tcp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "udp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "icmp" - ] - }, - "value": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallIcmpFilter" - } - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleStatus": { - "type": "string", - "enum": [ - "disabled", - "enabled" - ] - }, - "VpcFirewallRulesEnsureBody": { - "description": "Update firewall rules for a VPC", - "type": "object", - "properties": { - "rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcFirewallRule" - } - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "rules", - "vni" - ] - }, - "ZoneArtifactInventory": { - "description": "Inventory representation of a single zone artifact on a boot disk.\n\nPart of [`ZoneManifestBootInventory`].", - "type": "object", - "properties": { - "expected_hash": { - "description": "The expected digest of the file's contents.", - "type": "string", - "format": "hex string (32 bytes)" - }, - "expected_size": { - "description": "The expected size of the file, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "file_name": { - "description": "The name of the zone file on disk, for example `nexus.tar.gz`. Zone files are always \".tar.gz\".", - "type": "string" - }, - "path": { - "description": "The full path to the zone file.", - "type": "string", - "format": "Utf8PathBuf" - }, - "status": { - "description": "The status of the artifact.\n\nThis is `Ok(())` if the artifact is present and matches the expected size and digest, or an error message if it is missing or does not match.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "type": "null" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "type": "string", - "enum": [ - null - ] - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "expected_hash", - "expected_size", - "file_name", - "path", - "status" - ] - }, - "ZoneBundleCause": { - "description": "The reason or cause for a zone bundle, i.e., why it was created.", - "oneOf": [ - { - "description": "Some other, unspecified reason.", - "type": "string", - "enum": [ - "other" - ] - }, - { - "description": "A zone bundle taken when a sled agent finds a zone that it does not expect to be running.", - "type": "string", - "enum": [ - "unexpected_zone" - ] - }, - { - "description": "An instance zone was terminated.", - "type": "string", - "enum": [ - "terminated_instance" - ] - } - ] - }, - "ZoneBundleId": { - "description": "An identifier for a zone bundle.", - "type": "object", - "properties": { - "bundle_id": { - "description": "The ID for this bundle itself.", - "type": "string", - "format": "uuid" - }, - "zone_name": { - "description": "The name of the zone this bundle is derived from.", - "type": "string" - } - }, - "required": [ - "bundle_id", - "zone_name" - ] - }, - "ZoneBundleMetadata": { - "description": "Metadata about a zone bundle.", - "type": "object", - "properties": { - "cause": { - "description": "The reason or cause a bundle was created.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleCause" - } - ] - }, - "id": { - "description": "Identifier for this zone bundle", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleId" - } - ] - }, - "time_created": { - "description": "The time at which this zone bundle was created.", - "type": "string", - "format": "date-time" - }, - "version": { - "description": "A version number for this zone bundle.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "cause", - "id", - "time_created", - "version" - ] - }, - "ZoneImageResolverInventory": { - "description": "Inventory representation of zone image resolver status and health.", - "type": "object", - "properties": { - "mupdate_override": { - "description": "The mupdate override status.", - "allOf": [ - { - "$ref": "#/components/schemas/MupdateOverrideInventory" - } - ] - }, - "zone_manifest": { - "description": "The zone manifest status.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneManifestInventory" - } - ] - } - }, - "required": [ - "mupdate_override", - "zone_manifest" - ] - }, - "ZoneManifestBootInventory": { - "description": "Inventory representation of zone artifacts on the boot disk.\n\nPart of [`ZoneManifestInventory`].", - "type": "object", - "properties": { - "artifacts": { - "title": "IdOrdMap", - "description": "The artifacts on disk.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneArtifactInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneArtifactInventory" - }, - "uniqueItems": true - }, - "source": { - "description": "The manifest source.\n\nIn production this is [`OmicronZoneManifestSource::Installinator`], but in some development and testing flows Sled Agent synthesizes zone manifests. In those cases, the source is [`OmicronZoneManifestSource::SledAgent`].", - "allOf": [ - { - "$ref": "#/components/schemas/OmicronZoneManifestSource" - } - ] - } - }, - "required": [ - "artifacts", - "source" - ] - }, - "ZoneManifestInventory": { - "description": "Inventory representation of a zone manifest.\n\nPart of [`ZoneImageResolverInventory`].\n\nA zone manifest is a listing of all the zones present in a system's install dataset. This struct contains information about the install dataset gathered from a system.", - "type": "object", - "properties": { - "boot_disk_path": { - "description": "The full path to the zone manifest file on the boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "boot_inventory": { - "description": "The manifest read from the boot disk, and whether the manifest is valid.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_status": { - "title": "IdOrdMap", - "description": "Information about the install dataset on non-boot disks.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - }, - "uniqueItems": true - } - }, - "required": [ - "boot_disk_path", - "boot_inventory", - "non_boot_status" - ] - }, - "ZoneManifestNonBootInventory": { - "description": "Inventory representation of a zone manifest on a non-boot disk.\n\nUnlike [`ZoneManifestBootInventory`] which is structured since Reconfigurator makes decisions based on it, information about non-boot disks is purely advisory. For simplicity, we store information in an unstructured format.", - "type": "object", - "properties": { - "is_valid": { - "description": "Whether the status is valid.", - "type": "boolean" - }, - "message": { - "description": "A message describing the status.\n\nIf `is_valid` is true, then the message describes the list of artifacts found and their hashes.\n\nIf `is_valid` is false, then this message describes the reason for the invalid status. This could include errors reading the zone manifest, or zone file mismatches.", - "type": "string" - }, - "path": { - "description": "The full path to the zone manifest JSON on the non-boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "zpool_id": { - "description": "The ID of the non-boot zpool.", - "allOf": [ - { - "$ref": "#/components/schemas/InternalZpoolUuid" - } - ] - } - }, - "required": [ - "is_valid", - "message", - "path", - "zpool_id" - ] - }, - "ZpoolName": { - "title": "The name of a Zpool", - "description": "Zpool names are of the format ox{i,p}_. They are either Internal or External, and should be unique", - "type": "string", - "pattern": "^ox[ip]_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" - }, - "ZpoolUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ZpoolUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "PropolisUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::PropolisUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } -} diff --git a/openapi/sled-agent/sled-agent-7.0.0-62acb3.json.gitref b/openapi/sled-agent/sled-agent-7.0.0-62acb3.json.gitref new file mode 100644 index 00000000000..77139fcf6a6 --- /dev/null +++ b/openapi/sled-agent/sled-agent-7.0.0-62acb3.json.gitref @@ -0,0 +1 @@ +18058fcad61863324e3be38f17001ed5760d1458:openapi/sled-agent/sled-agent-7.0.0-62acb3.json \ No newline at end of file diff --git a/openapi/sled-agent/sled-agent-8.0.0-0e6bcf.json b/openapi/sled-agent/sled-agent-8.0.0-0e6bcf.json deleted file mode 100644 index 240ac62c649..00000000000 --- a/openapi/sled-agent/sled-agent-8.0.0-0e6bcf.json +++ /dev/null @@ -1,8711 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Sled Agent API", - "description": "API for interacting with individual sleds", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "8.0.0" - }, - "paths": { - "/artifacts": { - "get": { - "operationId": "artifact_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactListResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}": { - "put": { - "operationId": "artifact_put", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactPutResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}/copy-from-depot": { - "post": { - "operationId": "artifact_copy_from_depot", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotBody" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts-config": { - "get": { - "operationId": "artifact_config_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "artifact_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/bootstore/status": { - "get": { - "summary": "Get the internal state of the local bootstore node", - "operationId": "bootstore_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BootstoreStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/debug/switch-zone-policy": { - "get": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.", - "operationId": "debug_operator_switch_zone_policy_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.\n\nSetting the switch zone policy is asynchronous and inherently racy with the standard process of starting the switch zone. If the switch zone is in the process of being started or stopped when this policy is changed, the new policy may not take effect until that transition completes.", - "operationId": "debug_operator_switch_zone_policy_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/disks/{disk_id}": { - "put": { - "operationId": "disk_put", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskRuntimeState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/eip-gateways": { - "put": { - "summary": "Update per-NIC IP address <-> internet gateway mappings.", - "operationId": "set_eip_gateways", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIpGatewayMap" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/inventory": { - "get": { - "summary": "Fetch basic information about this sled", - "operationId": "inventory", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Inventory" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/network-bootstore-config": { - "get": { - "summary": "This API endpoint is only reading the local sled agent's view of the", - "description": "bootstore. The boostore is a distributed data store that is eventually consistent. Reads from individual nodes may not represent the latest state.", - "operationId": "read_network_bootstore_config_cache", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "write_network_bootstore_config", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/omicron-config": { - "put": { - "operationId": "omicron_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OmicronSledConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/probes": { - "put": { - "summary": "Update the entire set of probe zones on this sled.", - "description": "Probe zones are used to debug networking configuration. They look similar to instances, in that they have an OPTE port on a VPC subnet and external addresses, but no actual VM.", - "operationId": "probes_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProbeSet" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-identifiers": { - "get": { - "summary": "Fetch sled identifiers", - "operationId": "sled_identifiers", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledIdentifiers" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sleds": { - "put": { - "summary": "Add a sled to a rack that was already initialized via RSS", - "operationId": "sled_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddSledRequest" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/dladm-info": { - "get": { - "operationId": "support_dladm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/health-check": { - "get": { - "operationId": "support_health_check", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/ipadm-info": { - "get": { - "operationId": "support_ipadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/logs/download/{zone}": { - "get": { - "summary": "This endpoint returns a zip file of a zone's logs organized by service.", - "operationId": "support_logs_download", - "parameters": [ - { - "in": "path", - "name": "zone", - "description": "The zone for which one would like to collect logs for", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "max_rotated", - "description": "The max number of rotated logs to include in the final support bundle", - "required": true, - "schema": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support/logs/zones": { - "get": { - "summary": "This endpoint returns a list of known zones on a sled that have service", - "description": "logs that can be collected into a support bundle.", - "operationId": "support_logs", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/nvmeadm-info": { - "get": { - "operationId": "support_nvmeadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pargs-info": { - "get": { - "operationId": "support_pargs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pfiles-info": { - "get": { - "operationId": "support_pfiles_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pstack-info": { - "get": { - "operationId": "support_pstack_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zfs-info": { - "get": { - "operationId": "support_zfs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zoneadm-info": { - "get": { - "operationId": "support_zoneadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zpool-info": { - "get": { - "operationId": "support_zpool_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}": { - "get": { - "summary": "List all support bundles within a particular dataset", - "operationId": "support_bundle_list", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SupportBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}": { - "post": { - "summary": "Starts creation of a support bundle within a particular dataset", - "description": "Callers should transfer chunks of the bundle with \"support_bundle_transfer\", and then call \"support_bundle_finalize\" once the bundle has finished transferring.\n\nIf a support bundle was previously created without being finalized successfully, this endpoint will reset the state.\n\nIf a support bundle was previously created and finalized successfully, this endpoint will return metadata indicating that it already exists.", - "operationId": "support_bundle_start_creation", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a support bundle from a particular dataset", - "operationId": "support_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download": { - "get": { - "summary": "Fetch a support bundle from a particular dataset", - "operationId": "support_bundle_download", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a support bundle from a particular dataset", - "operationId": "support_bundle_head", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download/{file}": { - "get": { - "summary": "Fetch a file within a support bundle from a particular dataset", - "operationId": "support_bundle_download_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a file within a support bundle from a particular dataset", - "operationId": "support_bundle_head_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/finalize": { - "post": { - "summary": "Finalizes the creation of a support bundle", - "description": "If the requested hash matched the bundle, the bundle is created. Otherwise, an error is returned.", - "operationId": "support_bundle_finalize", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - }, - { - "in": "query", - "name": "hash", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/index": { - "get": { - "summary": "Fetch the index (list of files within a support bundle)", - "operationId": "support_bundle_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about the list of files within a support bundle", - "operationId": "support_bundle_head_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/transfer": { - "put": { - "summary": "Transfers a chunk of a support bundle within a particular dataset", - "operationId": "support_bundle_transfer", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - }, - { - "in": "query", - "name": "offset", - "required": true, - "schema": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/switch-ports": { - "post": { - "operationId": "uplink_ensure", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPorts" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v2p": { - "get": { - "summary": "List v2p mappings present on sled", - "operationId": "list_v2p", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_VirtualNetworkInterfaceHost", - "type": "array", - "items": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Create a mapping from a virtual NIC to a physical host", - "operationId": "set_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a mapping from a virtual NIC to a physical host", - "operationId": "del_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}": { - "put": { - "operationId": "vmm_register", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_unregister", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmUnregisterResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/disks/{disk_id}/snapshot": { - "post": { - "summary": "Take a snapshot of a disk that is attached to an instance", - "operationId": "vmm_issue_disk_snapshot_request", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/external-ip": { - "put": { - "operationId": "vmm_put_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_delete_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/multicast-group": { - "put": { - "operationId": "vmm_join_multicast_group", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceMulticastBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_leave_multicast_group", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceMulticastBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/state": { - "get": { - "operationId": "vmm_get_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "vmm_put_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc/{vpc_id}/firewall/rules": { - "put": { - "operationId": "vpc_firewall_rules_put", - "parameters": [ - { - "in": "path", - "name": "vpc_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRulesEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc-routes": { - "get": { - "summary": "Get the current versions of VPC routing rules.", - "operationId": "list_vpc_routes", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteState", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteState" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update VPC routing rules.", - "operationId": "set_vpc_routes", - "requestBody": { - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteSet", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteSet" - } - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones": { - "get": { - "summary": "List the zones that are currently managed by the sled agent.", - "operationId": "zones_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup": { - "post": { - "summary": "Trigger a zone bundle cleanup.", - "operationId": "zone_bundle_cleanup", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_CleanupCount", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/CleanupCount" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/context": { - "get": { - "summary": "Return context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContext" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContextUpdate" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/utilization": { - "get": { - "summary": "Return utilization information about all zone bundles.", - "operationId": "zone_bundle_utilization", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_BundleUtilization", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/BundleUtilization" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles": { - "get": { - "summary": "List all zone bundles that exist, even for now-deleted zones.", - "operationId": "zone_bundle_list_all", - "parameters": [ - { - "in": "query", - "name": "filter", - "description": "An optional substring used to filter zone bundles.", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}": { - "get": { - "summary": "List the zone bundles that are available for a running zone.", - "operationId": "zone_bundle_list", - "parameters": [ - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}/{bundle_id}": { - "get": { - "summary": "Fetch the binary content of a single zone bundle.", - "operationId": "zone_bundle_get", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a zone bundle.", - "operationId": "zone_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "AddSledRequest": { - "description": "A request to Add a given sled after rack initialization has occurred", - "type": "object", - "properties": { - "sled_id": { - "$ref": "#/components/schemas/BaseboardId" - }, - "start_request": { - "$ref": "#/components/schemas/StartSledAgentRequest" - } - }, - "required": [ - "sled_id", - "start_request" - ] - }, - "ArtifactConfig": { - "type": "object", - "properties": { - "artifacts": { - "type": "array", - "items": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "uniqueItems": true - }, - "generation": { - "$ref": "#/components/schemas/Generation" - } - }, - "required": [ - "artifacts", - "generation" - ] - }, - "ArtifactCopyFromDepotBody": { - "type": "object", - "properties": { - "depot_base_url": { - "type": "string" - } - }, - "required": [ - "depot_base_url" - ] - }, - "ArtifactCopyFromDepotResponse": { - "type": "object" - }, - "ArtifactListResponse": { - "type": "object", - "properties": { - "generation": { - "$ref": "#/components/schemas/Generation" - }, - "list": { - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - }, - "required": [ - "generation", - "list" - ] - }, - "ArtifactPutResponse": { - "type": "object", - "properties": { - "datasets": { - "description": "The number of valid M.2 artifact datasets we found on the sled. There is typically one of these datasets for each functional M.2.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "successful_writes": { - "description": "The number of valid writes to the M.2 artifact datasets. This should be less than or equal to the number of artifact datasets.", - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "required": [ - "datasets", - "successful_writes" - ] - }, - "Baseboard": { - "description": "Describes properties that should uniquely identify a Gimlet.", - "oneOf": [ - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "gimlet" - ] - } - }, - "required": [ - "identifier", - "model", - "revision", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "pc" - ] - } - }, - "required": [ - "identifier", - "model", - "type" - ] - } - ] - }, - "BaseboardId": { - "description": "A representation of a Baseboard ID as used in the inventory subsystem This type is essentially the same as a `Baseboard` except it doesn't have a revision or HW type (Gimlet, PC, Unknown).", - "type": "object", - "properties": { - "part_number": { - "description": "Oxide Part Number", - "type": "string" - }, - "serial_number": { - "description": "Serial number (unique for a given part number)", - "type": "string" - } - }, - "required": [ - "part_number", - "serial_number" - ] - }, - "BfdMode": { - "description": "BFD connection mode.", - "type": "string", - "enum": [ - "single_hop", - "multi_hop" - ] - }, - "BfdPeerConfig": { - "type": "object", - "properties": { - "detection_threshold": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "type": "string", - "format": "ip" - }, - "mode": { - "$ref": "#/components/schemas/BfdMode" - }, - "remote": { - "type": "string", - "format": "ip" - }, - "required_rx": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "$ref": "#/components/schemas/SwitchLocation" - } - }, - "required": [ - "detection_threshold", - "mode", - "remote", - "required_rx", - "switch" - ] - }, - "BgpConfig": { - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number for the BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "checker": { - "nullable": true, - "description": "Checker to apply to incoming messages.", - "default": null, - "type": "string" - }, - "originate": { - "description": "The set of prefixes for the BGP router to originate.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - }, - "shaper": { - "nullable": true, - "description": "Shaper to apply to outgoing messages.", - "default": null, - "type": "string" - } - }, - "required": [ - "asn", - "originate" - ] - }, - "BgpPeerConfig": { - "type": "object", - "properties": { - "addr": { - "description": "Address of the peer.", - "type": "string", - "format": "ipv4" - }, - "allowed_export": { - "description": "Define export policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "allowed_import": { - "description": "Define import policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "asn": { - "description": "The autonomous system number of the router the peer belongs to.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "communities": { - "description": "Include the provided communities in updates sent to the peer.", - "default": [], - "type": "array", - "items": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "connect_retry": { - "nullable": true, - "description": "The interval in seconds between peer connection retry attempts.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "delay_open": { - "nullable": true, - "description": "How long to delay sending open messages to a peer. In seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "enforce_first_as": { - "description": "Enforce that the first AS in paths received from this peer is the peer's AS.", - "default": false, - "type": "boolean" - }, - "hold_time": { - "nullable": true, - "description": "How long to keep a session alive without a keepalive in seconds. Defaults to 6.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "idle_hold_time": { - "nullable": true, - "description": "How long to keep a peer in idle after a state machine reset in seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "keepalive": { - "nullable": true, - "description": "The interval to send keepalive messages at.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "local_pref": { - "nullable": true, - "description": "Apply a local preference to routes received from this peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "md5_auth_key": { - "nullable": true, - "description": "Use the given key for TCP-MD5 authentication with the peer.", - "default": null, - "type": "string" - }, - "min_ttl": { - "nullable": true, - "description": "Require messages from a peer have a minimum IP time to live field.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "multi_exit_discriminator": { - "nullable": true, - "description": "Apply the provided multi-exit discriminator (MED) updates sent to the peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "port": { - "description": "Switch port the peer is reachable on.", - "type": "string" - }, - "remote_asn": { - "nullable": true, - "description": "Require that a peer has a specified ASN.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "Associate a VLAN ID with a BGP peer session.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "addr", - "asn", - "port" - ] - }, - "BlobStorageBackend": { - "description": "A storage backend for a disk whose initial contents are given explicitly by the specification.", - "type": "object", - "properties": { - "base64": { - "description": "The disk's initial contents, encoded as a base64 string.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - } - }, - "required": [ - "base64", - "readonly" - ], - "additionalProperties": false - }, - "Board": { - "description": "A VM's mainboard.", - "type": "object", - "properties": { - "chipset": { - "description": "The chipset to expose to guest software.", - "allOf": [ - { - "$ref": "#/components/schemas/Chipset" - } - ] - }, - "cpuid": { - "nullable": true, - "description": "The CPUID values to expose to the guest. If `None`, bhyve will derive default values from the host's CPUID values.", - "allOf": [ - { - "$ref": "#/components/schemas/Cpuid" - } - ] - }, - "cpus": { - "description": "The number of virtual logical processors attached to this VM.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "guest_hv_interface": { - "description": "The hypervisor platform to expose to the guest. The default is a bhyve-compatible interface with no additional features.\n\nFor compatibility with older versions of Propolis, this field is only serialized if it specifies a non-default interface.", - "allOf": [ - { - "$ref": "#/components/schemas/GuestHypervisorInterface" - } - ] - }, - "memory_mb": { - "description": "The amount of guest RAM attached to this VM.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "chipset", - "cpus", - "memory_mb" - ], - "additionalProperties": false - }, - "BootImageHeader": { - "type": "object", - "properties": { - "data_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "flags": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "image_name": { - "type": "string" - }, - "image_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "sha256": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 32, - "maxItems": 32 - }, - "target_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "data_size", - "flags", - "image_name", - "image_size", - "sha256", - "target_size" - ] - }, - "BootOrderEntry": { - "description": "An entry in the boot order stored in a [`BootSettings`] component.", - "type": "object", - "properties": { - "id": { - "description": "The ID of another component in the spec that Propolis should try to boot from.\n\nCurrently, only disk device components are supported.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - } - }, - "required": [ - "id" - ] - }, - "BootPartitionContents": { - "type": "object", - "properties": { - "boot_disk": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/M2Slot" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/M2Slot" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_a": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_b": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "boot_disk", - "slot_a", - "slot_b" - ] - }, - "BootPartitionDetails": { - "type": "object", - "properties": { - "artifact_hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "artifact_size": { - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "header": { - "$ref": "#/components/schemas/BootImageHeader" - } - }, - "required": [ - "artifact_hash", - "artifact_size", - "header" - ] - }, - "BootSettings": { - "description": "Settings supplied to the guest's firmware image that specify the order in which it should consider its options when selecting a device to try to boot from.", - "type": "object", - "properties": { - "order": { - "description": "An ordered list of components to attempt to boot from.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BootOrderEntry" - } - } - }, - "required": [ - "order" - ], - "additionalProperties": false - }, - "BootstoreStatus": { - "type": "object", - "properties": { - "accepted_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "established_connections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EstablishedConnection" - } - }, - "fsm_ledger_generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "fsm_state": { - "type": "string" - }, - "negotiating_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "network_config_ledger_generation": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "peers": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - } - }, - "required": [ - "accepted_connections", - "established_connections", - "fsm_ledger_generation", - "fsm_state", - "negotiating_connections", - "peers" - ] - }, - "BundleUtilization": { - "description": "The portion of a debug dataset used for zone bundles.", - "type": "object", - "properties": { - "bytes_available": { - "description": "The total number of bytes available for zone bundles.\n\nThis is `dataset_quota` multiplied by the context's storage limit.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes_used": { - "description": "Total bundle usage, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "dataset_quota": { - "description": "The total dataset quota, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bytes_available", - "bytes_used", - "dataset_quota" - ] - }, - "ByteCount": { - "description": "Byte count to express memory or storage capacity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "Chipset": { - "description": "A kind of virtual chipset.", - "oneOf": [ - { - "description": "An Intel 440FX-compatible chipset.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i440_fx" - ] - }, - "value": { - "$ref": "#/components/schemas/I440Fx" - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "CleanupContext": { - "description": "Context provided for the zone bundle cleanup task.", - "type": "object", - "properties": { - "period": { - "description": "The period on which automatic checks and cleanup is performed.", - "allOf": [ - { - "$ref": "#/components/schemas/CleanupPeriod" - } - ] - }, - "priority": { - "description": "The priority ordering for keeping old bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "description": "The limit on the dataset quota available for zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/StorageLimit" - } - ] - } - }, - "required": [ - "period", - "priority", - "storage_limit" - ] - }, - "CleanupContextUpdate": { - "description": "Parameters used to update the zone bundle cleanup context.", - "type": "object", - "properties": { - "period": { - "nullable": true, - "description": "The new period on which automatic cleanups are run.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "priority": { - "nullable": true, - "description": "The priority ordering for preserving old zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "nullable": true, - "description": "The new limit on the underlying dataset quota allowed for bundles.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "CleanupCount": { - "description": "The count of bundles / bytes removed during a cleanup operation.", - "type": "object", - "properties": { - "bundles": { - "description": "The number of bundles removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes": { - "description": "The number of bytes removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bundles", - "bytes" - ] - }, - "CleanupPeriod": { - "description": "A period on which bundles are automatically cleaned up.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "ComponentV0": { - "oneOf": [ - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioDisk" - }, - "type": { - "type": "string", - "enum": [ - "virtio_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/NvmeDisk" - }, - "type": { - "type": "string", - "enum": [ - "nvme_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNic" - }, - "type": { - "type": "string", - "enum": [ - "virtio_nic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SerialPort" - }, - "type": { - "type": "string", - "enum": [ - "serial_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/PciPciBridge" - }, - "type": { - "type": "string", - "enum": [ - "pci_pci_bridge" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/QemuPvpanic" - }, - "type": { - "type": "string", - "enum": [ - "qemu_pvpanic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BootSettings" - }, - "type": { - "type": "string", - "enum": [ - "boot_settings" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPciPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_pci_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuP9" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_p9" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/P9fs" - }, - "type": { - "type": "string", - "enum": [ - "p9fs" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/MigrationFailureInjector" - }, - "type": { - "type": "string", - "enum": [ - "migration_failure_injector" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/CrucibleStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "crucible_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/FileStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "file_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BlobStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "blob_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "virtio_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/DlpiNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "dlpi_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - } - ] - }, - "CompressionAlgorithm": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "on" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "off" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "gzip" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "level": { - "$ref": "#/components/schemas/GzipLevel" - }, - "type": { - "type": "string", - "enum": [ - "gzip_n" - ] - } - }, - "required": [ - "level", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lz4" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lzjb" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "zle" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "ConfigReconcilerInventory": { - "description": "Describes the last attempt made by the sled-agent-config-reconciler to reconcile the current sled config against the actual state of the sled.", - "type": "object", - "properties": { - "boot_partitions": { - "$ref": "#/components/schemas/BootPartitionContents" - }, - "datasets": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "external_disks": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "last_reconciled_config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "orphaned_datasets": { - "title": "IdOrdMap", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/OrphanedDataset" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/OrphanedDataset" - }, - "uniqueItems": true - }, - "remove_mupdate_override": { - "nullable": true, - "description": "The result of removing the mupdate override file on disk.\n\n`None` if `remove_mupdate_override` was not provided in the sled config.", - "allOf": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideInventory" - } - ] - }, - "zones": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - } - }, - "required": [ - "boot_partitions", - "datasets", - "external_disks", - "last_reconciled_config", - "orphaned_datasets", - "zones" - ] - }, - "ConfigReconcilerInventoryResult": { - "oneOf": [ - { - "type": "object", - "properties": { - "result": { - "type": "string", - "enum": [ - "ok" - ] - } - }, - "required": [ - "result" - ] - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "result": { - "type": "string", - "enum": [ - "err" - ] - } - }, - "required": [ - "message", - "result" - ] - } - ] - }, - "ConfigReconcilerInventoryStatus": { - "description": "Status of the sled-agent-config-reconciler task.", - "oneOf": [ - { - "description": "The reconciler task has not yet run for the first time since sled-agent started.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "not_yet_run" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The reconciler task is actively running.", - "type": "object", - "properties": { - "config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "running_for": { - "$ref": "#/components/schemas/Duration" - }, - "started_at": { - "type": "string", - "format": "date-time" - }, - "status": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "config", - "running_for", - "started_at", - "status" - ] - }, - { - "description": "The reconciler task is currently idle, but previously did complete a reconciliation attempt.\n\nThis variant does not include the `OmicronSledConfig` used in the last attempt, because that's always available via [`ConfigReconcilerInventory::last_reconciled_config`].", - "type": "object", - "properties": { - "completed_at": { - "type": "string", - "format": "date-time" - }, - "ran_for": { - "$ref": "#/components/schemas/Duration" - }, - "status": { - "type": "string", - "enum": [ - "idle" - ] - } - }, - "required": [ - "completed_at", - "ran_for", - "status" - ] - } - ] - }, - "Cpuid": { - "description": "A set of CPUID values to expose to a guest.", - "type": "object", - "properties": { - "entries": { - "description": "A list of CPUID leaves/subleaves and their associated values.\n\nPropolis servers require that each entry's `leaf` be unique and that it falls in either the \"standard\" (0 to 0xFFFF) or \"extended\" (0x8000_0000 to 0x8000_FFFF) function ranges, since these are the only valid input ranges currently defined by Intel and AMD. See the Intel 64 and IA-32 Architectures Software Developer's Manual (June 2024) Table 3-17 and the AMD64 Architecture Programmer's Manual (March 2024) Volume 3's documentation of the CPUID instruction.", - "type": "array", - "items": { - "$ref": "#/components/schemas/CpuidEntry" - } - }, - "vendor": { - "description": "The CPU vendor to emulate.\n\nCPUID leaves in the extended range (0x8000_0000 to 0x8000_FFFF) have vendor-defined semantics. Propolis uses this value to determine these semantics when deciding whether it needs to specialize the supplied template values for these leaves.", - "allOf": [ - { - "$ref": "#/components/schemas/CpuidVendor" - } - ] - } - }, - "required": [ - "entries", - "vendor" - ], - "additionalProperties": false - }, - "CpuidEntry": { - "description": "A full description of a CPUID leaf/subleaf and the values it produces.", - "type": "object", - "properties": { - "eax": { - "description": "The value to return in eax.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ebx": { - "description": "The value to return in ebx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ecx": { - "description": "The value to return in ecx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "edx": { - "description": "The value to return in edx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "leaf": { - "description": "The leaf (function) number for this entry.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "subleaf": { - "nullable": true, - "description": "The subleaf (index) number for this entry, if it uses subleaves.", - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "eax", - "ebx", - "ecx", - "edx", - "leaf" - ], - "additionalProperties": false - }, - "CpuidVendor": { - "description": "A CPU vendor to use when interpreting the meanings of CPUID leaves in the extended ID range (0x80000000 to 0x8000FFFF).", - "type": "string", - "enum": [ - "amd", - "intel" - ] - }, - "CrucibleStorageBackend": { - "description": "A Crucible storage backend.", - "type": "object", - "properties": { - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "request_json": { - "description": "A serialized `[crucible_client_types::VolumeConstructionRequest]`. This is stored in serialized form so that breaking changes to the definition of a `VolumeConstructionRequest` do not inadvertently break instance spec deserialization.\n\nWhen using a spec to initialize a new instance, the spec author must ensure this request is well-formed and can be deserialized by the version of `crucible_client_types` used by the target Propolis.", - "type": "string" - } - }, - "required": [ - "readonly", - "request_json" - ], - "additionalProperties": false - }, - "DatasetConfig": { - "description": "Configuration information necessary to request a single dataset.\n\nThese datasets are tracked directly by Nexus.", - "type": "object", - "properties": { - "compression": { - "description": "The compression mode to be used by the dataset", - "allOf": [ - { - "$ref": "#/components/schemas/CompressionAlgorithm" - } - ] - }, - "id": { - "description": "The UUID of the dataset being requested", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetUuid" - } - ] - }, - "name": { - "description": "The dataset's name", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetName" - } - ] - }, - "quota": { - "nullable": true, - "description": "The upper bound on the amount of storage used by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "reservation": { - "nullable": true, - "description": "The lower bound on the amount of storage usable by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "compression", - "id", - "name" - ] - }, - "DatasetKind": { - "description": "The kind of dataset. See the `DatasetKind` enum in omicron-common for possible values.", - "type": "string" - }, - "DatasetName": { - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/DatasetKind" - }, - "pool_name": { - "$ref": "#/components/schemas/ZpoolName" - } - }, - "required": [ - "kind", - "pool_name" - ] - }, - "DatasetUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::DatasetUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "DhcpConfig": { - "description": "DHCP configuration for a port\n\nNot present here: Hostname (DHCPv4 option 12; used in DHCPv6 option 39); we use `InstanceRuntimeState::hostname` for this value.", - "type": "object", - "properties": { - "dns_servers": { - "description": "DNS servers to send to the instance\n\n(DHCPv4 option 6; DHCPv6 option 23)", - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - }, - "host_domain": { - "nullable": true, - "description": "DNS zone this instance's hostname belongs to (e.g. the `project.example` part of `instance1.project.example`)\n\n(DHCPv4 option 15; used in DHCPv6 option 39)", - "type": "string" - }, - "search_domains": { - "description": "DNS search domains\n\n(DHCPv4 option 119; DHCPv6 option 24)", - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "dns_servers", - "search_domains" - ] - }, - "DiskEnsureBody": { - "description": "Sent from to a sled agent to establish the runtime state of a Disk", - "type": "object", - "properties": { - "initial_runtime": { - "description": "Last runtime state of the Disk known to Nexus (used if the agent has never seen this Disk before).", - "allOf": [ - { - "$ref": "#/components/schemas/DiskRuntimeState" - } - ] - }, - "target": { - "description": "requested runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskStateRequested" - } - ] - } - }, - "required": [ - "initial_runtime", - "target" - ] - }, - "DiskIdentity": { - "description": "Uniquely identifies a disk.", - "type": "object", - "properties": { - "model": { - "type": "string" - }, - "serial": { - "type": "string" - }, - "vendor": { - "type": "string" - } - }, - "required": [ - "model", - "serial", - "vendor" - ] - }, - "DiskRuntimeState": { - "description": "Runtime state of the Disk, which includes its attach state and some minimal metadata", - "type": "object", - "properties": { - "disk_state": { - "description": "runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskState" - } - ] - }, - "gen": { - "description": "generation number for this state", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "time_updated": { - "description": "timestamp for this information", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "disk_state", - "gen", - "time_updated" - ] - }, - "DiskState": { - "description": "State of a Disk", - "oneOf": [ - { - "description": "Disk is being initialized", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "creating" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready but detached from any Instance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready to receive blocks from an external source", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "import_ready" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from a URL", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_url" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from bulk writes", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_bulk_writes" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being finalized to state Detached", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "finalizing" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is undergoing maintenance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "maintenance" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is being detached from the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "detaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk has been destroyed", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is unavailable", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskStateRequested": { - "description": "Used to request a Disk state change", - "oneOf": [ - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskVariant": { - "type": "string", - "enum": [ - "U2", - "M2" - ] - }, - "DlpiNetworkBackend": { - "description": "A network backend associated with a DLPI VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "Duration": { - "type": "object", - "properties": { - "nanos": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "secs": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "nanos", - "secs" - ] - }, - "EarlyNetworkConfig": { - "description": "Network configuration required to bring up the control plane\n\nThe fields in this structure are those from [`crate::rack_init::RackInitializeRequest`] necessary for use beyond RSS. This is just for the initial rack configuration and cold boot purposes. Updates come from Nexus.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/EarlyNetworkConfigBody" - }, - "generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "EarlyNetworkConfigBody": { - "description": "This is the actual configuration of EarlyNetworking.\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "ntp_servers": { - "description": "The external NTP server addresses.", - "type": "array", - "items": { - "type": "string" - } - }, - "rack_network_config": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RackNetworkConfigV2" - } - ] - } - }, - "required": [ - "ntp_servers" - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "EstablishedConnection": { - "type": "object", - "properties": { - "addr": { - "type": "string" - }, - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - } - }, - "required": [ - "addr", - "baseboard" - ] - }, - "ExternalIp": { - "description": "An external IP address used by a probe.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used by the address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external IP address.", - "type": "string", - "format": "ip" - }, - "kind": { - "description": "The kind of address this is.", - "allOf": [ - { - "$ref": "#/components/schemas/IpKind" - } - ] - }, - "last_port": { - "description": "The last port used by the address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "kind", - "last_port" - ] - }, - "ExternalIpGatewayMap": { - "description": "Per-NIC mappings from external IP addresses to the Internet Gateways which can choose them as a source.", - "type": "object", - "properties": { - "mappings": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - } - } - } - }, - "required": [ - "mappings" - ] - }, - "FileStorageBackend": { - "description": "A storage backend backed by a file in the host system's file system.", - "type": "object", - "properties": { - "block_size": { - "description": "Block size of the backend", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "path": { - "description": "A path to a file that backs a disk.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "workers": { - "nullable": true, - "description": "Optional worker threads for the file backend, exposed for testing only.", - "type": "integer", - "format": "uint", - "minimum": 1 - } - }, - "required": [ - "block_size", - "path", - "readonly" - ], - "additionalProperties": false - }, - "Generation": { - "description": "Generation numbers stored in the database, used for optimistic concurrency control", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "GuestHypervisorInterface": { - "description": "A hypervisor interface to expose to the guest.", - "oneOf": [ - { - "description": "Expose a bhyve-like interface (\"bhyve bhyve \" as the hypervisor ID in leaf 0x4000_0000 and no additional leaves or features).", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bhyve" - ] - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "description": "Expose a Hyper-V-compatible hypervisor interface with the supplied features enabled.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "hyper_v" - ] - }, - "value": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HyperVFeatureFlag" - }, - "uniqueItems": true - } - }, - "required": [ - "features" - ], - "additionalProperties": false - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "GzipLevel": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "HostIdentifier": { - "description": "A `HostIdentifier` represents either an IP host or network (v4 or v6), or an entire VPC (identified by its VNI). It is used in firewall rule host filters.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "HostPhase2DesiredContents": { - "description": "Describes the desired contents of a host phase 2 slot (i.e., the boot partition on one of the internal M.2 drives).", - "oneOf": [ - { - "description": "Do not change the current contents.\n\nWe use this value when we've detected a sled has been mupdated (and we don't want to overwrite phase 2 images until we understand how to recover from that mupdate) and as the default value when reading an [`OmicronSledConfig`] that was ledgered before this concept existed.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "current_contents" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Set the phase 2 slot to the given artifact.\n\nThe artifact will come from an unpacked and distributed TUF repo.", - "type": "object", - "properties": { - "hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "type": { - "type": "string", - "enum": [ - "artifact" - ] - } - }, - "required": [ - "hash", - "type" - ] - } - ] - }, - "HostPhase2DesiredSlots": { - "description": "Describes the desired contents for both host phase 2 slots.", - "type": "object", - "properties": { - "slot_a": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - }, - "slot_b": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - } - }, - "required": [ - "slot_a", - "slot_b" - ] - }, - "HostPortConfig": { - "type": "object", - "properties": { - "addrs": { - "description": "IP Address and prefix (e.g., `192.168.0.1/16`) to apply to switchport (must be in infra_ip pool). May also include an optional VLAN ID.", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "lldp": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Switchport to use for external connectivity", - "type": "string" - }, - "tx_eq": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - } - }, - "required": [ - "addrs", - "port" - ] - }, - "Hostname": { - "title": "An RFC-1035-compliant hostname", - "description": "A hostname identifies a host on a network, and is usually a dot-delimited sequence of labels, where each label contains only letters, digits, or the hyphen. See RFCs 1035 and 952 for more details.", - "type": "string", - "pattern": "^([a-zA-Z0-9]+[a-zA-Z0-9\\-]*(? for background.", - "oneOf": [ - { - "description": "Start the switch zone if a switch is present.\n\nThis is the default policy.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "start_if_switch_present" - ] - } - }, - "required": [ - "policy" - ] - }, - { - "description": "Even if a switch zone is present, stop the switch zone.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "stop_despite_switch_presence" - ] - } - }, - "required": [ - "policy" - ] - } - ] - }, - "OrphanedDataset": { - "type": "object", - "properties": { - "available": { - "$ref": "#/components/schemas/ByteCount" - }, - "id": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/DatasetUuid" - } - ] - }, - "mounted": { - "type": "boolean" - }, - "name": { - "$ref": "#/components/schemas/DatasetName" - }, - "reason": { - "type": "string" - }, - "used": { - "$ref": "#/components/schemas/ByteCount" - } - }, - "required": [ - "available", - "mounted", - "name", - "reason", - "used" - ] - }, - "P9fs": { - "description": "Describes a filesystem to expose through a P9 device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "chunk_size": { - "description": "The chunk size to use in the 9P protocol. Vanilla Helios images should use 8192. Falcon Helios base images and Linux can use up to 65536.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach the guest to this P9 filesystem.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - }, - "source": { - "description": "The host source path to mount into the guest.", - "type": "string" - }, - "target": { - "description": "The 9P target filesystem tag.", - "type": "string" - } - }, - "required": [ - "chunk_size", - "pci_path", - "source", - "target" - ], - "additionalProperties": false - }, - "PciPath": { - "description": "A PCI bus/device/function tuple.", - "type": "object", - "properties": { - "bus": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "device": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "function": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "bus", - "device", - "function" - ] - }, - "PciPciBridge": { - "description": "A PCI-PCI bridge.", - "type": "object", - "properties": { - "downstream_bus": { - "description": "The logical bus number of this bridge's downstream bus. Other devices may use this bus number in their PCI paths to indicate they should be attached to this bridge's bus.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach this bridge.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "downstream_bus", - "pci_path" - ], - "additionalProperties": false - }, - "PhysicalDiskUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::PhysicalDiskUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "PortConfigV2": { - "type": "object", - "properties": { - "addresses": { - "description": "This port's addresses and optional vlan IDs", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "autoneg": { - "description": "Whether or not to set autonegotiation", - "default": false, - "type": "boolean" - }, - "bgp_peers": { - "description": "BGP peers on this port", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeerConfig" - } - }, - "lldp": { - "nullable": true, - "description": "LLDP configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Nmae of the port this config applies to.", - "type": "string" - }, - "routes": { - "description": "The set of routes associated with this port.", - "type": "array", - "items": { - "$ref": "#/components/schemas/RouteConfig" - } - }, - "switch": { - "description": "Switch the port belongs to.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - }, - "tx_eq": { - "nullable": true, - "description": "TX-EQ configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - }, - "uplink_port_fec": { - "nullable": true, - "description": "Port forward error correction type.", - "allOf": [ - { - "$ref": "#/components/schemas/PortFec" - } - ] - }, - "uplink_port_speed": { - "description": "Port speed.", - "allOf": [ - { - "$ref": "#/components/schemas/PortSpeed" - } - ] - } - }, - "required": [ - "addresses", - "bgp_peers", - "port", - "routes", - "switch", - "uplink_port_speed" - ] - }, - "PortFec": { - "description": "Switchport FEC options", - "type": "string", - "enum": [ - "firecode", - "none", - "rs" - ] - }, - "PortSpeed": { - "description": "Switchport Speed options", - "type": "string", - "enum": [ - "speed0_g", - "speed1_g", - "speed10_g", - "speed25_g", - "speed40_g", - "speed50_g", - "speed100_g", - "speed200_g", - "speed400_g" - ] - }, - "PriorityDimension": { - "description": "A dimension along with bundles can be sorted, to determine priority.", - "oneOf": [ - { - "description": "Sorting by time, with older bundles with lower priority.", - "type": "string", - "enum": [ - "time" - ] - }, - { - "description": "Sorting by the cause for creating the bundle.", - "type": "string", - "enum": [ - "cause" - ] - } - ] - }, - "PriorityOrder": { - "description": "The priority order for bundles during cleanup.\n\nBundles are sorted along the dimensions in [`PriorityDimension`], with each dimension appearing exactly once. During cleanup, lesser-priority bundles are pruned first, to maintain the dataset quota. Note that bundles are sorted by each dimension in the order in which they appear, with each dimension having higher priority than the next.", - "type": "array", - "items": { - "$ref": "#/components/schemas/PriorityDimension" - }, - "minItems": 2, - "maxItems": 2 - }, - "ProbeCreate": { - "description": "Parameters used to create a probe.", - "type": "object", - "properties": { - "external_ips": { - "description": "The external IP addresses assigned to the probe.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalIp" - } - }, - "id": { - "description": "The ID for the probe.", - "allOf": [ - { - "$ref": "#/components/schemas/ProbeUuid" - } - ] - }, - "interface": { - "description": "The probe's networking interface.", - "allOf": [ - { - "$ref": "#/components/schemas/NetworkInterface" - } - ] - } - }, - "required": [ - "external_ips", - "id", - "interface" - ] - }, - "ProbeSet": { - "description": "A set of probes that the target sled should run.", - "type": "object", - "properties": { - "probes": { - "title": "IdHashMap", - "description": "The exact set of probes to run.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ProbeCreate" - } - ], - "path": "iddqd::IdHashMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ProbeCreate" - }, - "uniqueItems": true - } - }, - "required": [ - "probes" - ] - }, - "ProbeUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ProbeUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "QemuPvpanic": { - "type": "object", - "properties": { - "enable_isa": { - "description": "Enable the QEMU PVPANIC ISA bus device (I/O port 0x505).", - "type": "boolean" - } - }, - "required": [ - "enable_isa" - ], - "additionalProperties": false - }, - "RackNetworkConfigV2": { - "description": "Initial network configuration", - "type": "object", - "properties": { - "bfd": { - "description": "BFD configuration for connecting the rack to external networks", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/BfdPeerConfig" - } - }, - "bgp": { - "description": "BGP configurations for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpConfig" - } - }, - "infra_ip_first": { - "description": "First ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "infra_ip_last": { - "description": "Last ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "ports": { - "description": "Uplinks for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/PortConfigV2" - } - }, - "rack_subnet": { - "$ref": "#/components/schemas/Ipv6Net" - } - }, - "required": [ - "bgp", - "infra_ip_first", - "infra_ip_last", - "ports", - "rack_subnet" - ] - }, - "RemoveMupdateOverrideBootSuccessInventory": { - "description": "Status of removing the mupdate override on the boot disk.", - "oneOf": [ - { - "description": "The mupdate override was successfully removed.", - "type": "string", - "enum": [ - "removed" - ] - }, - { - "description": "No mupdate override was found.\n\nThis is considered a success for idempotency reasons.", - "type": "string", - "enum": [ - "no_override" - ] - } - ] - }, - "RemoveMupdateOverrideInventory": { - "description": "Status of removing the mupdate override in the inventory.", - "type": "object", - "properties": { - "boot_disk_result": { - "description": "The result of removing the mupdate override on the boot disk.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_message": { - "description": "What happened on non-boot disks.\n\nWe aren't modeling this out in more detail, because we plan to not try and keep ledgered data in sync across both disks in the future.", - "type": "string" - } - }, - "required": [ - "boot_disk_result", - "non_boot_message" - ] - }, - "ResolvedVpcFirewallRule": { - "description": "VPC firewall rule after object name resolution has been performed by Nexus", - "type": "object", - "properties": { - "action": { - "$ref": "#/components/schemas/VpcFirewallRuleAction" - }, - "direction": { - "$ref": "#/components/schemas/VpcFirewallRuleDirection" - }, - "filter_hosts": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/HostIdentifier" - }, - "uniqueItems": true - }, - "filter_ports": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/L4PortRange" - } - }, - "filter_protocols": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleProtocol" - } - }, - "priority": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "status": { - "$ref": "#/components/schemas/VpcFirewallRuleStatus" - }, - "targets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NetworkInterface" - } - } - }, - "required": [ - "action", - "direction", - "priority", - "status", - "targets" - ] - }, - "ResolvedVpcRoute": { - "description": "A VPC route resolved into a concrete target.", - "type": "object", - "properties": { - "dest": { - "$ref": "#/components/schemas/IpNet" - }, - "target": { - "$ref": "#/components/schemas/RouterTarget" - } - }, - "required": [ - "dest", - "target" - ] - }, - "ResolvedVpcRouteSet": { - "description": "An updated set of routes for a given VPC and/or subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "routes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRoute" - }, - "uniqueItems": true - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id", - "routes" - ] - }, - "ResolvedVpcRouteState": { - "description": "Version information for routes on a given VPC subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id" - ] - }, - "RouteConfig": { - "type": "object", - "properties": { - "destination": { - "description": "The destination of the route.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "nexthop": { - "description": "The nexthop/gateway address.", - "type": "string", - "format": "ip" - }, - "rib_priority": { - "nullable": true, - "description": "The RIB priority (i.e. Admin Distance) associated with this route.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id associated with this route.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "destination", - "nexthop" - ] - }, - "RouterId": { - "description": "Identifier for a VPC and/or subnet.", - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/RouterKind" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "kind", - "vni" - ] - }, - "RouterKind": { - "description": "The scope of a set of VPC router rules.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "system" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "subnet": { - "$ref": "#/components/schemas/IpNet" - }, - "type": { - "type": "string", - "enum": [ - "custom" - ] - } - }, - "required": [ - "subnet", - "type" - ] - } - ] - }, - "RouterTarget": { - "description": "The target for a given router entry.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "drop" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "internet_gateway" - ] - }, - "value": { - "$ref": "#/components/schemas/InternetGatewayRouterTarget" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc_subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "RouterVersion": { - "description": "Information on the current parent router (and version) of a route set according to the control plane.", - "type": "object", - "properties": { - "router_id": { - "type": "string", - "format": "uuid" - }, - "version": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "router_id", - "version" - ] - }, - "SerialPort": { - "description": "A serial port device.", - "type": "object", - "properties": { - "num": { - "description": "The serial port number for this port.", - "allOf": [ - { - "$ref": "#/components/schemas/SerialPortNumber" - } - ] - } - }, - "required": [ - "num" - ], - "additionalProperties": false - }, - "SerialPortNumber": { - "description": "A serial port identifier, which determines what I/O ports a guest can use to access a port.", - "type": "string", - "enum": [ - "com1", - "com2", - "com3", - "com4" - ] - }, - "SledCpuFamily": { - "description": "Identifies the kind of CPU present on a sled, determined by reading CPUID.\n\nThis is intended to broadly support the control plane answering the question \"can I run this instance on that sled?\" given an instance with either no or some CPU platform requirement. It is not enough information for more precise placement questions - for example, is a CPU a high-frequency part or many-core part? We don't include Genoa here, but in that CPU family there are high frequency parts, many-core parts, and large-cache parts. To support those questions (or satisfactorily answer #8730) we would need to collect additional information and send it along.", - "oneOf": [ - { - "description": "The CPU vendor or its family number don't correspond to any of the known family variants.", - "type": "string", - "enum": [ - "unknown" - ] - }, - { - "description": "AMD Milan processors (or very close). Could be an actual Milan in a Gimlet, a close-to-Milan client Zen 3 part, or Zen 4 (for which Milan is the greatest common denominator).", - "type": "string", - "enum": [ - "amd_milan" - ] - }, - { - "description": "AMD Turin processors (or very close). Could be an actual Turin in a Cosmo, or a close-to-Turin client Zen 5 part.", - "type": "string", - "enum": [ - "amd_turin" - ] - }, - { - "description": "AMD Turin Dense processors. There are no \"Turin Dense-like\" CPUs unlike other cases, so this means a bona fide Zen 5c Turin Dense part.", - "type": "string", - "enum": [ - "amd_turin_dense" - ] - } - ] - }, - "SledDiagnosticsQueryOutput": { - "oneOf": [ - { - "type": "object", - "properties": { - "success": { - "type": "object", - "properties": { - "command": { - "description": "The command and its arguments.", - "type": "string" - }, - "exit_code": { - "nullable": true, - "description": "The exit code if one was present when the command exited.", - "type": "integer", - "format": "int32" - }, - "exit_status": { - "description": "The exit status of the command. This will be the exit code (if any) and exit reason such as from a signal.", - "type": "string" - }, - "stdio": { - "description": "Any stdout/stderr produced by the command.", - "type": "string" - } - }, - "required": [ - "command", - "exit_status", - "stdio" - ] - } - }, - "required": [ - "success" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "failure": { - "type": "object", - "properties": { - "error": { - "description": "The reason the command failed to execute.", - "type": "string" - } - }, - "required": [ - "error" - ] - } - }, - "required": [ - "failure" - ], - "additionalProperties": false - } - ] - }, - "SledIdentifiers": { - "description": "Identifiers for a single sled.\n\nThis is intended primarily to be used in timeseries, to identify sled from which metric data originates.", - "type": "object", - "properties": { - "model": { - "description": "Model name of the sled", - "type": "string" - }, - "rack_id": { - "description": "Control plane ID of the rack this sled is a member of", - "type": "string", - "format": "uuid" - }, - "revision": { - "description": "Revision number of the sled", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "serial": { - "description": "Serial number of the sled", - "type": "string" - }, - "sled_id": { - "description": "Control plane ID for the sled itself", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "model", - "rack_id", - "revision", - "serial", - "sled_id" - ] - }, - "SledRole": { - "description": "Describes the role of the sled within the rack.\n\nNote that this may change if the sled is physically moved within the rack.", - "oneOf": [ - { - "description": "The sled is a general compute sled.", - "type": "string", - "enum": [ - "gimlet" - ] - }, - { - "description": "The sled is attached to the network switch, and has additional responsibilities.", - "type": "string", - "enum": [ - "scrimlet" - ] - } - ] - }, - "SledUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::SledUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "SledVmmState": { - "description": "A wrapper type containing a sled's total knowledge of the state of a VMM.", - "type": "object", - "properties": { - "migration_in": { - "nullable": true, - "description": "The current state of any inbound migration to this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "migration_out": { - "nullable": true, - "description": "The state of any outbound migration from this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "vmm_state": { - "description": "The most recent state of the sled's VMM process.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmRuntimeState" - } - ] - } - }, - "required": [ - "vmm_state" - ] - }, - "SoftNpuP9": { - "description": "Describes a PCI device that shares host files with the guest using the P9 protocol.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPciPort": { - "description": "Describes a SoftNPU PCI device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPort": { - "description": "Describes a port in a SoftNPU emulated ASIC.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the port's associated DLPI backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "link_name": { - "description": "The data link name for this port.", - "type": "string" - } - }, - "required": [ - "backend_id", - "link_name" - ], - "additionalProperties": false - }, - "SourceNatConfig": { - "description": "An IP address and port range used for source NAT, i.e., making outbound network connections from guests or services.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used for source NAT, inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external address provided to the instance or service.", - "type": "string", - "format": "ip" - }, - "last_port": { - "description": "The last port used for source NAT, also inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "last_port" - ] - }, - "SpecKey": { - "description": "A key identifying a component in an instance spec.", - "oneOf": [ - { - "title": "uuid", - "allOf": [ - { - "type": "string", - "format": "uuid" - } - ] - }, - { - "title": "name", - "allOf": [ - { - "type": "string" - } - ] - } - ] - }, - "StartSledAgentRequest": { - "description": "Configuration information for launching a Sled Agent.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/StartSledAgentRequestBody" - }, - "generation": { - "description": "The current generation number of data as stored in CRDB.\n\nThe initial generation is set during RSS time and then only mutated by Nexus. For now, we don't actually anticipate mutating this data, but we leave open the possiblity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "StartSledAgentRequestBody": { - "description": "This is the actual app level data of `StartSledAgentRequest`\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "id": { - "description": "Uuid of the Sled Agent to be created.", - "allOf": [ - { - "$ref": "#/components/schemas/SledUuid" - } - ] - }, - "is_lrtq_learner": { - "description": "Is this node an LRTQ learner node?\n\nWe only put the node into learner mode if `use_trust_quorum` is also true.", - "type": "boolean" - }, - "rack_id": { - "description": "Uuid of the rack to which this sled agent belongs.", - "type": "string", - "format": "uuid" - }, - "subnet": { - "description": "Portion of the IP space to be managed by the Sled Agent.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Subnet" - } - ] - }, - "use_trust_quorum": { - "description": "Use trust quorum for key generation", - "type": "boolean" - } - }, - "required": [ - "id", - "is_lrtq_learner", - "rack_id", - "subnet", - "use_trust_quorum" - ] - }, - "StorageLimit": { - "description": "The limit on space allowed for zone bundles, as a percentage of the overall dataset's quota.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "SupportBundleMetadata": { - "description": "Metadata about a support bundle", - "type": "object", - "properties": { - "state": { - "$ref": "#/components/schemas/SupportBundleState" - }, - "support_bundle_id": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - "required": [ - "state", - "support_bundle_id" - ] - }, - "SupportBundleState": { - "type": "string", - "enum": [ - "complete", - "incomplete" - ] - }, - "SupportBundleUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::SupportBundleUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "SwitchLocation": { - "description": "Identifies switch physical location", - "oneOf": [ - { - "description": "Switch in upper slot", - "type": "string", - "enum": [ - "switch0" - ] - }, - { - "description": "Switch in lower slot", - "type": "string", - "enum": [ - "switch1" - ] - } - ] - }, - "SwitchPorts": { - "description": "A set of switch uplinks.", - "type": "object", - "properties": { - "uplinks": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HostPortConfig" - } - } - }, - "required": [ - "uplinks" - ] - }, - "TxEqConfig": { - "description": "Per-port tx-eq overrides. This can be used to fine-tune the transceiver equalization settings to improve signal integrity.", - "type": "object", - "properties": { - "main": { - "nullable": true, - "description": "Main tap", - "type": "integer", - "format": "int32" - }, - "post1": { - "nullable": true, - "description": "Post-cursor tap1", - "type": "integer", - "format": "int32" - }, - "post2": { - "nullable": true, - "description": "Post-cursor tap2", - "type": "integer", - "format": "int32" - }, - "pre1": { - "nullable": true, - "description": "Pre-cursor tap1", - "type": "integer", - "format": "int32" - }, - "pre2": { - "nullable": true, - "description": "Pre-cursor tap2", - "type": "integer", - "format": "int32" - } - } - }, - "UplinkAddressConfig": { - "type": "object", - "properties": { - "address": { - "$ref": "#/components/schemas/IpNet" - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id (if any) associated with this address.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "address" - ] - }, - "VirtioDisk": { - "description": "A disk that presents a virtio-block interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the disk's backend component.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "pci_path": { - "description": "The PCI bus/device/function at which this disk should be attached.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtioNetworkBackend": { - "description": "A network backend associated with a virtio-net (viona) VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the viona VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "VirtioNic": { - "description": "A network card that presents a virtio-net interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the device's backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "interface_id": { - "description": "A caller-defined correlation identifier for this interface. If Propolis is configured to collect network interface kstats in its Oximeter metrics, the metric series for this interface will be associated with this identifier.", - "type": "string", - "format": "uuid" - }, - "pci_path": { - "description": "The PCI path at which to attach this device.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "interface_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtualNetworkInterfaceHost": { - "description": "A mapping from a virtual NIC to a physical host", - "type": "object", - "properties": { - "physical_host_ip": { - "type": "string", - "format": "ipv6" - }, - "virtual_ip": { - "type": "string", - "format": "ip" - }, - "virtual_mac": { - "$ref": "#/components/schemas/MacAddr" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "physical_host_ip", - "virtual_ip", - "virtual_mac", - "vni" - ] - }, - "VmmIssueDiskSnapshotRequestBody": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmIssueDiskSnapshotRequestResponse": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmPutStateBody": { - "description": "The body of a request to move a previously-ensured instance into a specific runtime state.", - "type": "object", - "properties": { - "state": { - "description": "The state into which the instance should be driven.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmStateRequested" - } - ] - } - }, - "required": [ - "state" - ] - }, - "VmmPutStateResponse": { - "description": "The response sent from a request to move an instance into a specific runtime state.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current runtime state of the instance after handling the request to change its state. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "VmmRuntimeState": { - "description": "The dynamic runtime properties of an individual VMM process.", - "type": "object", - "properties": { - "gen": { - "description": "The generation number for this VMM's state.", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "state": { - "description": "The last state reported by this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmState" - } - ] - }, - "time_updated": { - "description": "Timestamp for the VMM's state.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "gen", - "state", - "time_updated" - ] - }, - "VmmSpec": { - "description": "Specifies the virtual hardware configuration of a new Propolis VMM in the form of a Propolis instance specification.\n\nSled-agent expects that when an instance spec is provided alongside an `InstanceSledLocalConfig` to initialize a new instance, the NIC IDs in that config's network interface list will match the IDs of the virtio network backends in the instance spec.", - "allOf": [ - { - "$ref": "#/components/schemas/InstanceSpecV0" - } - ] - }, - "VmmState": { - "description": "One of the states that a VMM can be in.", - "oneOf": [ - { - "description": "The VMM is initializing and has not started running guest CPUs yet.", - "type": "string", - "enum": [ - "starting" - ] - }, - { - "description": "The VMM has finished initializing and may be running guest CPUs.", - "type": "string", - "enum": [ - "running" - ] - }, - { - "description": "The VMM is shutting down.", - "type": "string", - "enum": [ - "stopping" - ] - }, - { - "description": "The VMM's guest has stopped, and the guest will not run again, but the VMM process may not have released all of its resources yet.", - "type": "string", - "enum": [ - "stopped" - ] - }, - { - "description": "The VMM is being restarted or its guest OS is rebooting.", - "type": "string", - "enum": [ - "rebooting" - ] - }, - { - "description": "The VMM is part of a live migration.", - "type": "string", - "enum": [ - "migrating" - ] - }, - { - "description": "The VMM process reported an internal failure.", - "type": "string", - "enum": [ - "failed" - ] - }, - { - "description": "The VMM process has been destroyed and its resources have been released.", - "type": "string", - "enum": [ - "destroyed" - ] - } - ] - }, - "VmmStateRequested": { - "description": "Requestable running state of an Instance.\n\nA subset of [`omicron_common::api::external::InstanceState`].", - "oneOf": [ - { - "description": "Run this instance by migrating in from a previous running incarnation of the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "migration_target" - ] - }, - "value": { - "$ref": "#/components/schemas/InstanceMigrationTargetParams" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Start the instance if it is not already running.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Stop the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "stopped" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Immediately reset the instance, as though it had stopped and immediately began to run again.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "reboot" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "VmmUnregisterResponse": { - "description": "The response sent from a request to unregister an instance.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current state of the instance after handling the request to unregister it. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "Vni": { - "description": "A Geneve Virtual Network Identifier", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "VpcFirewallIcmpFilter": { - "type": "object", - "properties": { - "code": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/IcmpParamRange" - } - ] - }, - "icmp_type": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "icmp_type" - ] - }, - "VpcFirewallRuleAction": { - "type": "string", - "enum": [ - "allow", - "deny" - ] - }, - "VpcFirewallRuleDirection": { - "type": "string", - "enum": [ - "inbound", - "outbound" - ] - }, - "VpcFirewallRuleProtocol": { - "description": "The protocols that may be specified in a firewall rule's filter", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "tcp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "udp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "icmp" - ] - }, - "value": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallIcmpFilter" - } - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleStatus": { - "type": "string", - "enum": [ - "disabled", - "enabled" - ] - }, - "VpcFirewallRulesEnsureBody": { - "description": "Update firewall rules for a VPC", - "type": "object", - "properties": { - "rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcFirewallRule" - } - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "rules", - "vni" - ] - }, - "ZoneArtifactInventory": { - "description": "Inventory representation of a single zone artifact on a boot disk.\n\nPart of [`ZoneManifestBootInventory`].", - "type": "object", - "properties": { - "expected_hash": { - "description": "The expected digest of the file's contents.", - "type": "string", - "format": "hex string (32 bytes)" - }, - "expected_size": { - "description": "The expected size of the file, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "file_name": { - "description": "The name of the zone file on disk, for example `nexus.tar.gz`. Zone files are always \".tar.gz\".", - "type": "string" - }, - "path": { - "description": "The full path to the zone file.", - "type": "string", - "format": "Utf8PathBuf" - }, - "status": { - "description": "The status of the artifact.\n\nThis is `Ok(())` if the artifact is present and matches the expected size and digest, or an error message if it is missing or does not match.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "type": "null" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "type": "string", - "enum": [ - null - ] - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "expected_hash", - "expected_size", - "file_name", - "path", - "status" - ] - }, - "ZoneBundleCause": { - "description": "The reason or cause for a zone bundle, i.e., why it was created.", - "oneOf": [ - { - "description": "Some other, unspecified reason.", - "type": "string", - "enum": [ - "other" - ] - }, - { - "description": "A zone bundle taken when a sled agent finds a zone that it does not expect to be running.", - "type": "string", - "enum": [ - "unexpected_zone" - ] - }, - { - "description": "An instance zone was terminated.", - "type": "string", - "enum": [ - "terminated_instance" - ] - } - ] - }, - "ZoneBundleId": { - "description": "An identifier for a zone bundle.", - "type": "object", - "properties": { - "bundle_id": { - "description": "The ID for this bundle itself.", - "type": "string", - "format": "uuid" - }, - "zone_name": { - "description": "The name of the zone this bundle is derived from.", - "type": "string" - } - }, - "required": [ - "bundle_id", - "zone_name" - ] - }, - "ZoneBundleMetadata": { - "description": "Metadata about a zone bundle.", - "type": "object", - "properties": { - "cause": { - "description": "The reason or cause a bundle was created.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleCause" - } - ] - }, - "id": { - "description": "Identifier for this zone bundle", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleId" - } - ] - }, - "time_created": { - "description": "The time at which this zone bundle was created.", - "type": "string", - "format": "date-time" - }, - "version": { - "description": "A version number for this zone bundle.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "cause", - "id", - "time_created", - "version" - ] - }, - "ZoneImageResolverInventory": { - "description": "Inventory representation of zone image resolver status and health.", - "type": "object", - "properties": { - "mupdate_override": { - "description": "The mupdate override status.", - "allOf": [ - { - "$ref": "#/components/schemas/MupdateOverrideInventory" - } - ] - }, - "zone_manifest": { - "description": "The zone manifest status.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneManifestInventory" - } - ] - } - }, - "required": [ - "mupdate_override", - "zone_manifest" - ] - }, - "ZoneManifestBootInventory": { - "description": "Inventory representation of zone artifacts on the boot disk.\n\nPart of [`ZoneManifestInventory`].", - "type": "object", - "properties": { - "artifacts": { - "title": "IdOrdMap", - "description": "The artifacts on disk.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneArtifactInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneArtifactInventory" - }, - "uniqueItems": true - }, - "source": { - "description": "The manifest source.\n\nIn production this is [`OmicronZoneManifestSource::Installinator`], but in some development and testing flows Sled Agent synthesizes zone manifests. In those cases, the source is [`OmicronZoneManifestSource::SledAgent`].", - "allOf": [ - { - "$ref": "#/components/schemas/OmicronZoneManifestSource" - } - ] - } - }, - "required": [ - "artifacts", - "source" - ] - }, - "ZoneManifestInventory": { - "description": "Inventory representation of a zone manifest.\n\nPart of [`ZoneImageResolverInventory`].\n\nA zone manifest is a listing of all the zones present in a system's install dataset. This struct contains information about the install dataset gathered from a system.", - "type": "object", - "properties": { - "boot_disk_path": { - "description": "The full path to the zone manifest file on the boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "boot_inventory": { - "description": "The manifest read from the boot disk, and whether the manifest is valid.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_status": { - "title": "IdOrdMap", - "description": "Information about the install dataset on non-boot disks.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - }, - "uniqueItems": true - } - }, - "required": [ - "boot_disk_path", - "boot_inventory", - "non_boot_status" - ] - }, - "ZoneManifestNonBootInventory": { - "description": "Inventory representation of a zone manifest on a non-boot disk.\n\nUnlike [`ZoneManifestBootInventory`] which is structured since Reconfigurator makes decisions based on it, information about non-boot disks is purely advisory. For simplicity, we store information in an unstructured format.", - "type": "object", - "properties": { - "is_valid": { - "description": "Whether the status is valid.", - "type": "boolean" - }, - "message": { - "description": "A message describing the status.\n\nIf `is_valid` is true, then the message describes the list of artifacts found and their hashes.\n\nIf `is_valid` is false, then this message describes the reason for the invalid status. This could include errors reading the zone manifest, or zone file mismatches.", - "type": "string" - }, - "path": { - "description": "The full path to the zone manifest JSON on the non-boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "zpool_id": { - "description": "The ID of the non-boot zpool.", - "allOf": [ - { - "$ref": "#/components/schemas/InternalZpoolUuid" - } - ] - } - }, - "required": [ - "is_valid", - "message", - "path", - "zpool_id" - ] - }, - "ZpoolName": { - "title": "The name of a Zpool", - "description": "Zpool names are of the format ox{i,p}_. They are either Internal or External, and should be unique", - "type": "string", - "pattern": "^ox[ip]_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" - }, - "ZpoolUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ZpoolUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "PropolisUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::PropolisUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } -} diff --git a/openapi/sled-agent/sled-agent-8.0.0-0e6bcf.json.gitref b/openapi/sled-agent/sled-agent-8.0.0-0e6bcf.json.gitref new file mode 100644 index 00000000000..408e8ec88b6 --- /dev/null +++ b/openapi/sled-agent/sled-agent-8.0.0-0e6bcf.json.gitref @@ -0,0 +1 @@ +73fa6628a393118f927264586d15069b201ba4b7:openapi/sled-agent/sled-agent-8.0.0-0e6bcf.json \ No newline at end of file diff --git a/openapi/sled-agent/sled-agent-9.0.0-12ab86.json b/openapi/sled-agent/sled-agent-9.0.0-12ab86.json deleted file mode 100644 index 69cff10bc80..00000000000 --- a/openapi/sled-agent/sled-agent-9.0.0-12ab86.json +++ /dev/null @@ -1,8859 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Oxide Sled Agent API", - "description": "API for interacting with individual sleds", - "contact": { - "url": "https://oxide.computer", - "email": "api@oxide.computer" - }, - "version": "9.0.0" - }, - "paths": { - "/artifacts": { - "get": { - "operationId": "artifact_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactListResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}": { - "put": { - "operationId": "artifact_put", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactPutResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts/{sha256}/copy-from-depot": { - "post": { - "operationId": "artifact_copy_from_depot", - "parameters": [ - { - "in": "path", - "name": "sha256", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - }, - { - "in": "query", - "name": "generation", - "required": true, - "schema": { - "$ref": "#/components/schemas/Generation" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotBody" - } - } - }, - "required": true - }, - "responses": { - "202": { - "description": "successfully enqueued operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactCopyFromDepotResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/artifacts-config": { - "get": { - "operationId": "artifact_config_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "artifact_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ArtifactConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/bootstore/status": { - "get": { - "summary": "Get the internal state of the local bootstore node", - "operationId": "bootstore_status", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BootstoreStatus" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/debug/switch-zone-policy": { - "get": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.", - "operationId": "debug_operator_switch_zone_policy_get", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "A debugging endpoint only used by `omdb` that allows us to test", - "description": "restarting the switch zone without restarting sled-agent. See for context.\n\nSetting the switch zone policy is asynchronous and inherently racy with the standard process of starting the switch zone. If the switch zone is in the process of being started or stopped when this policy is changed, the new policy may not take effect until that transition completes.", - "operationId": "debug_operator_switch_zone_policy_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OperatorSwitchZonePolicy" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/disks/{disk_id}": { - "put": { - "operationId": "disk_put", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/DiskRuntimeState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/eip-gateways": { - "put": { - "summary": "Update per-NIC IP address <-> internet gateway mappings.", - "operationId": "set_eip_gateways", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ExternalIpGatewayMap" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/inventory": { - "get": { - "summary": "Fetch basic information about this sled", - "operationId": "inventory", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Inventory" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/local-storage/{zpool_id}/{dataset_id}": { - "post": { - "summary": "Create a local storage dataset", - "operationId": "local_storage_dataset_ensure", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/ExternalZpoolUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/LocalStorageDatasetEnsureRequest" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a local storage dataset", - "operationId": "local_storage_dataset_delete", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/ExternalZpoolUuid" - } - } - ], - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/network-bootstore-config": { - "get": { - "summary": "This API endpoint is only reading the local sled agent's view of the", - "description": "bootstore. The boostore is a distributed data store that is eventually consistent. Reads from individual nodes may not represent the latest state.", - "operationId": "read_network_bootstore_config_cache", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "write_network_bootstore_config", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/EarlyNetworkConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/omicron-config": { - "put": { - "operationId": "omicron_config_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/OmicronSledConfig" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/probes": { - "put": { - "summary": "Update the entire set of probe zones on this sled.", - "description": "Probe zones are used to debug networking configuration. They look similar to instances, in that they have an OPTE port on a VPC subnet and external addresses, but no actual VM.", - "operationId": "probes_put", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ProbeSet" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sled-identifiers": { - "get": { - "summary": "Fetch sled identifiers", - "operationId": "sled_identifiers", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledIdentifiers" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/sleds": { - "put": { - "summary": "Add a sled to a rack that was already initialized via RSS", - "operationId": "sled_add", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AddSledRequest" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/dladm-info": { - "get": { - "operationId": "support_dladm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/health-check": { - "get": { - "operationId": "support_health_check", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/ipadm-info": { - "get": { - "operationId": "support_ipadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/logs/download/{zone}": { - "get": { - "summary": "This endpoint returns a zip file of a zone's logs organized by service.", - "operationId": "support_logs_download", - "parameters": [ - { - "in": "path", - "name": "zone", - "description": "The zone for which one would like to collect logs for", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "query", - "name": "max_rotated", - "description": "The max number of rotated logs to include in the final support bundle", - "required": true, - "schema": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support/logs/zones": { - "get": { - "summary": "This endpoint returns a list of known zones on a sled that have service", - "description": "logs that can be collected into a support bundle.", - "operationId": "support_logs", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/nvmeadm-info": { - "get": { - "operationId": "support_nvmeadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pargs-info": { - "get": { - "operationId": "support_pargs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pfiles-info": { - "get": { - "operationId": "support_pfiles_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/pstack-info": { - "get": { - "operationId": "support_pstack_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SledDiagnosticsQueryOutput", - "type": "array", - "items": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zfs-info": { - "get": { - "operationId": "support_zfs_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zoneadm-info": { - "get": { - "operationId": "support_zoneadm_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support/zpool-info": { - "get": { - "operationId": "support_zpool_info", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledDiagnosticsQueryOutput" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}": { - "get": { - "summary": "List all support bundles within a particular dataset", - "operationId": "support_bundle_list", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_SupportBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}": { - "post": { - "summary": "Starts creation of a support bundle within a particular dataset", - "description": "Callers should transfer chunks of the bundle with \"support_bundle_transfer\", and then call \"support_bundle_finalize\" once the bundle has finished transferring.\n\nIf a support bundle was previously created without being finalized successfully, this endpoint will reset the state.\n\nIf a support bundle was previously created and finalized successfully, this endpoint will return metadata indicating that it already exists.", - "operationId": "support_bundle_start_creation", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a support bundle from a particular dataset", - "operationId": "support_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download": { - "get": { - "summary": "Fetch a support bundle from a particular dataset", - "operationId": "support_bundle_download", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a support bundle from a particular dataset", - "operationId": "support_bundle_head", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/download/{file}": { - "get": { - "summary": "Fetch a file within a support bundle from a particular dataset", - "operationId": "support_bundle_download_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about a file within a support bundle from a particular dataset", - "operationId": "support_bundle_head_file", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "file", - "description": "The path of the file within the support bundle to query", - "required": true, - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/finalize": { - "post": { - "summary": "Finalizes the creation of a support bundle", - "description": "If the requested hash matched the bundle, the bundle is created. Otherwise, an error is returned.", - "operationId": "support_bundle_finalize", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - }, - { - "in": "query", - "name": "hash", - "required": true, - "schema": { - "type": "string", - "format": "hex string (32 bytes)" - } - } - ], - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/index": { - "get": { - "summary": "Fetch the index (list of files within a support bundle)", - "operationId": "support_bundle_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - }, - "head": { - "summary": "Fetch metadata about the list of files within a support bundle", - "operationId": "support_bundle_head_index", - "parameters": [ - { - "in": "header", - "name": "range", - "description": "A request to access a portion of the resource, such as `bytes=0-499`\n\nSee: ", - "schema": { - "type": "string" - } - }, - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - } - ], - "responses": { - "default": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - } - } - } - }, - "/support-bundles/{zpool_id}/{dataset_id}/{support_bundle_id}/transfer": { - "put": { - "summary": "Transfers a chunk of a support bundle within a particular dataset", - "operationId": "support_bundle_transfer", - "parameters": [ - { - "in": "path", - "name": "dataset_id", - "description": "The dataset on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/DatasetUuid" - } - }, - { - "in": "path", - "name": "support_bundle_id", - "description": "The ID of the support bundle itself", - "required": true, - "schema": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - { - "in": "path", - "name": "zpool_id", - "description": "The zpool on which this support bundle was provisioned", - "required": true, - "schema": { - "$ref": "#/components/schemas/ZpoolUuid" - } - }, - { - "in": "query", - "name": "offset", - "required": true, - "schema": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - } - ], - "requestBody": { - "content": { - "application/octet-stream": { - "schema": { - "type": "string", - "format": "binary" - } - } - }, - "required": true - }, - "responses": { - "201": { - "description": "successful creation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SupportBundleMetadata" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/switch-ports": { - "post": { - "operationId": "uplink_ensure", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SwitchPorts" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/v2p": { - "get": { - "summary": "List v2p mappings present on sled", - "operationId": "list_v2p", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_VirtualNetworkInterfaceHost", - "type": "array", - "items": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Create a mapping from a virtual NIC to a physical host", - "operationId": "set_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a mapping from a virtual NIC to a physical host", - "operationId": "del_v2p", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VirtualNetworkInterfaceHost" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}": { - "put": { - "operationId": "vmm_register", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_unregister", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmUnregisterResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/disks/{disk_id}/snapshot": { - "post": { - "summary": "Take a snapshot of a disk that is attached to an instance", - "operationId": "vmm_issue_disk_snapshot_request", - "parameters": [ - { - "in": "path", - "name": "disk_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmIssueDiskSnapshotRequestResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/external-ip": { - "put": { - "operationId": "vmm_put_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_delete_external_ip", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceExternalIpBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/multicast-group": { - "put": { - "operationId": "vmm_join_multicast_group", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceMulticastBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "operationId": "vmm_leave_multicast_group", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/InstanceMulticastBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vmms/{propolis_id}/state": { - "get": { - "operationId": "vmm_get_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/SledVmmState" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "operationId": "vmm_put_state", - "parameters": [ - { - "in": "path", - "name": "propolis_id", - "required": true, - "schema": { - "$ref": "#/components/schemas/PropolisUuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateBody" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VmmPutStateResponse" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc/{vpc_id}/firewall/rules": { - "put": { - "operationId": "vpc_firewall_rules_put", - "parameters": [ - { - "in": "path", - "name": "vpc_id", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - } - ], - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/VpcFirewallRulesEnsureBody" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/vpc-routes": { - "get": { - "summary": "Get the current versions of VPC routing rules.", - "operationId": "list_vpc_routes", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteState", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteState" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update VPC routing rules.", - "operationId": "set_vpc_routes", - "requestBody": { - "content": { - "application/json": { - "schema": { - "title": "Array_of_ResolvedVpcRouteSet", - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRouteSet" - } - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones": { - "get": { - "summary": "List the zones that are currently managed by the sled agent.", - "operationId": "zones_list", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_String", - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup": { - "post": { - "summary": "Trigger a zone bundle cleanup.", - "operationId": "zone_bundle_cleanup", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_CleanupCount", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/CleanupCount" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/context": { - "get": { - "summary": "Return context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContext" - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "put": { - "summary": "Update context used by the zone-bundle cleanup task.", - "operationId": "zone_bundle_cleanup_context_update", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/CleanupContextUpdate" - } - } - }, - "required": true - }, - "responses": { - "204": { - "description": "resource updated" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundle-cleanup/utilization": { - "get": { - "summary": "Return utilization information about all zone bundles.", - "operationId": "zone_bundle_utilization", - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Map_of_BundleUtilization", - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/BundleUtilization" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles": { - "get": { - "summary": "List all zone bundles that exist, even for now-deleted zones.", - "operationId": "zone_bundle_list_all", - "parameters": [ - { - "in": "query", - "name": "filter", - "description": "An optional substring used to filter zone bundles.", - "schema": { - "nullable": true, - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}": { - "get": { - "summary": "List the zone bundles that are available for a running zone.", - "operationId": "zone_bundle_list", - "parameters": [ - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "successful operation", - "content": { - "application/json": { - "schema": { - "title": "Array_of_ZoneBundleMetadata", - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneBundleMetadata" - } - } - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - }, - "/zones/bundles/{zone_name}/{bundle_id}": { - "get": { - "summary": "Fetch the binary content of a single zone bundle.", - "operationId": "zone_bundle_get", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "200": { - "description": "", - "content": { - "*/*": { - "schema": {} - } - } - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - }, - "delete": { - "summary": "Delete a zone bundle.", - "operationId": "zone_bundle_delete", - "parameters": [ - { - "in": "path", - "name": "bundle_id", - "description": "The ID for this bundle itself.", - "required": true, - "schema": { - "type": "string", - "format": "uuid" - } - }, - { - "in": "path", - "name": "zone_name", - "description": "The name of the zone this bundle is derived from.", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { - "204": { - "description": "successful deletion" - }, - "4XX": { - "$ref": "#/components/responses/Error" - }, - "5XX": { - "$ref": "#/components/responses/Error" - } - } - } - } - }, - "components": { - "schemas": { - "AddSledRequest": { - "description": "A request to Add a given sled after rack initialization has occurred", - "type": "object", - "properties": { - "sled_id": { - "$ref": "#/components/schemas/BaseboardId" - }, - "start_request": { - "$ref": "#/components/schemas/StartSledAgentRequest" - } - }, - "required": [ - "sled_id", - "start_request" - ] - }, - "ArtifactConfig": { - "type": "object", - "properties": { - "artifacts": { - "type": "array", - "items": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "uniqueItems": true - }, - "generation": { - "$ref": "#/components/schemas/Generation" - } - }, - "required": [ - "artifacts", - "generation" - ] - }, - "ArtifactCopyFromDepotBody": { - "type": "object", - "properties": { - "depot_base_url": { - "type": "string" - } - }, - "required": [ - "depot_base_url" - ] - }, - "ArtifactCopyFromDepotResponse": { - "type": "object" - }, - "ArtifactListResponse": { - "type": "object", - "properties": { - "generation": { - "$ref": "#/components/schemas/Generation" - }, - "list": { - "type": "object", - "additionalProperties": { - "type": "integer", - "format": "uint", - "minimum": 0 - } - } - }, - "required": [ - "generation", - "list" - ] - }, - "ArtifactPutResponse": { - "type": "object", - "properties": { - "datasets": { - "description": "The number of valid M.2 artifact datasets we found on the sled. There is typically one of these datasets for each functional M.2.", - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "successful_writes": { - "description": "The number of valid writes to the M.2 artifact datasets. This should be less than or equal to the number of artifact datasets.", - "type": "integer", - "format": "uint", - "minimum": 0 - } - }, - "required": [ - "datasets", - "successful_writes" - ] - }, - "Baseboard": { - "description": "Describes properties that should uniquely identify a Gimlet.", - "oneOf": [ - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "revision": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "type": { - "type": "string", - "enum": [ - "gimlet" - ] - } - }, - "required": [ - "identifier", - "model", - "revision", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "unknown" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "identifier": { - "type": "string" - }, - "model": { - "type": "string" - }, - "type": { - "type": "string", - "enum": [ - "pc" - ] - } - }, - "required": [ - "identifier", - "model", - "type" - ] - } - ] - }, - "BaseboardId": { - "description": "A representation of a Baseboard ID as used in the inventory subsystem This type is essentially the same as a `Baseboard` except it doesn't have a revision or HW type (Gimlet, PC, Unknown).", - "type": "object", - "properties": { - "part_number": { - "description": "Oxide Part Number", - "type": "string" - }, - "serial_number": { - "description": "Serial number (unique for a given part number)", - "type": "string" - } - }, - "required": [ - "part_number", - "serial_number" - ] - }, - "BfdMode": { - "description": "BFD connection mode.", - "type": "string", - "enum": [ - "single_hop", - "multi_hop" - ] - }, - "BfdPeerConfig": { - "type": "object", - "properties": { - "detection_threshold": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "local": { - "nullable": true, - "type": "string", - "format": "ip" - }, - "mode": { - "$ref": "#/components/schemas/BfdMode" - }, - "remote": { - "type": "string", - "format": "ip" - }, - "required_rx": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "switch": { - "$ref": "#/components/schemas/SwitchLocation" - } - }, - "required": [ - "detection_threshold", - "mode", - "remote", - "required_rx", - "switch" - ] - }, - "BgpConfig": { - "type": "object", - "properties": { - "asn": { - "description": "The autonomous system number for the BGP configuration.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "checker": { - "nullable": true, - "description": "Checker to apply to incoming messages.", - "default": null, - "type": "string" - }, - "originate": { - "description": "The set of prefixes for the BGP router to originate.", - "type": "array", - "items": { - "$ref": "#/components/schemas/Ipv4Net" - } - }, - "shaper": { - "nullable": true, - "description": "Shaper to apply to outgoing messages.", - "default": null, - "type": "string" - } - }, - "required": [ - "asn", - "originate" - ] - }, - "BgpPeerConfig": { - "type": "object", - "properties": { - "addr": { - "description": "Address of the peer.", - "type": "string", - "format": "ipv4" - }, - "allowed_export": { - "description": "Define export policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "allowed_import": { - "description": "Define import policy for a peer.", - "default": { - "type": "no_filtering" - }, - "allOf": [ - { - "$ref": "#/components/schemas/ImportExportPolicy" - } - ] - }, - "asn": { - "description": "The autonomous system number of the router the peer belongs to.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "communities": { - "description": "Include the provided communities in updates sent to the peer.", - "default": [], - "type": "array", - "items": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "connect_retry": { - "nullable": true, - "description": "The interval in seconds between peer connection retry attempts.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "delay_open": { - "nullable": true, - "description": "How long to delay sending open messages to a peer. In seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "enforce_first_as": { - "description": "Enforce that the first AS in paths received from this peer is the peer's AS.", - "default": false, - "type": "boolean" - }, - "hold_time": { - "nullable": true, - "description": "How long to keep a session alive without a keepalive in seconds. Defaults to 6.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "idle_hold_time": { - "nullable": true, - "description": "How long to keep a peer in idle after a state machine reset in seconds.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "keepalive": { - "nullable": true, - "description": "The interval to send keepalive messages at.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "local_pref": { - "nullable": true, - "description": "Apply a local preference to routes received from this peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "md5_auth_key": { - "nullable": true, - "description": "Use the given key for TCP-MD5 authentication with the peer.", - "default": null, - "type": "string" - }, - "min_ttl": { - "nullable": true, - "description": "Require messages from a peer have a minimum IP time to live field.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "multi_exit_discriminator": { - "nullable": true, - "description": "Apply the provided multi-exit discriminator (MED) updates sent to the peer.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "port": { - "description": "Switch port the peer is reachable on.", - "type": "string" - }, - "remote_asn": { - "nullable": true, - "description": "Require that a peer has a specified ASN.", - "default": null, - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "Associate a VLAN ID with a BGP peer session.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "addr", - "asn", - "port" - ] - }, - "BlobStorageBackend": { - "description": "A storage backend for a disk whose initial contents are given explicitly by the specification.", - "type": "object", - "properties": { - "base64": { - "description": "The disk's initial contents, encoded as a base64 string.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - } - }, - "required": [ - "base64", - "readonly" - ], - "additionalProperties": false - }, - "Board": { - "description": "A VM's mainboard.", - "type": "object", - "properties": { - "chipset": { - "description": "The chipset to expose to guest software.", - "allOf": [ - { - "$ref": "#/components/schemas/Chipset" - } - ] - }, - "cpuid": { - "nullable": true, - "description": "The CPUID values to expose to the guest. If `None`, bhyve will derive default values from the host's CPUID values.", - "allOf": [ - { - "$ref": "#/components/schemas/Cpuid" - } - ] - }, - "cpus": { - "description": "The number of virtual logical processors attached to this VM.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "guest_hv_interface": { - "description": "The hypervisor platform to expose to the guest. The default is a bhyve-compatible interface with no additional features.\n\nFor compatibility with older versions of Propolis, this field is only serialized if it specifies a non-default interface.", - "allOf": [ - { - "$ref": "#/components/schemas/GuestHypervisorInterface" - } - ] - }, - "memory_mb": { - "description": "The amount of guest RAM attached to this VM.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "chipset", - "cpus", - "memory_mb" - ], - "additionalProperties": false - }, - "BootImageHeader": { - "type": "object", - "properties": { - "data_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "flags": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "image_name": { - "type": "string" - }, - "image_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "sha256": { - "type": "array", - "items": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "minItems": 32, - "maxItems": 32 - }, - "target_size": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "data_size", - "flags", - "image_name", - "image_size", - "sha256", - "target_size" - ] - }, - "BootOrderEntry": { - "description": "An entry in the boot order stored in a [`BootSettings`] component.", - "type": "object", - "properties": { - "id": { - "description": "The ID of another component in the spec that Propolis should try to boot from.\n\nCurrently, only disk device components are supported.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - } - }, - "required": [ - "id" - ] - }, - "BootPartitionContents": { - "type": "object", - "properties": { - "boot_disk": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/M2Slot" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/M2Slot" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_a": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "slot_b": { - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/BootPartitionDetails" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/BootPartitionDetails" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "boot_disk", - "slot_a", - "slot_b" - ] - }, - "BootPartitionDetails": { - "type": "object", - "properties": { - "artifact_hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "artifact_size": { - "type": "integer", - "format": "uint", - "minimum": 0 - }, - "header": { - "$ref": "#/components/schemas/BootImageHeader" - } - }, - "required": [ - "artifact_hash", - "artifact_size", - "header" - ] - }, - "BootSettings": { - "description": "Settings supplied to the guest's firmware image that specify the order in which it should consider its options when selecting a device to try to boot from.", - "type": "object", - "properties": { - "order": { - "description": "An ordered list of components to attempt to boot from.", - "type": "array", - "items": { - "$ref": "#/components/schemas/BootOrderEntry" - } - } - }, - "required": [ - "order" - ], - "additionalProperties": false - }, - "BootstoreStatus": { - "type": "object", - "properties": { - "accepted_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "established_connections": { - "type": "array", - "items": { - "$ref": "#/components/schemas/EstablishedConnection" - } - }, - "fsm_ledger_generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "fsm_state": { - "type": "string" - }, - "negotiating_connections": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - }, - "network_config_ledger_generation": { - "nullable": true, - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "peers": { - "type": "array", - "items": { - "type": "string" - }, - "uniqueItems": true - } - }, - "required": [ - "accepted_connections", - "established_connections", - "fsm_ledger_generation", - "fsm_state", - "negotiating_connections", - "peers" - ] - }, - "BundleUtilization": { - "description": "The portion of a debug dataset used for zone bundles.", - "type": "object", - "properties": { - "bytes_available": { - "description": "The total number of bytes available for zone bundles.\n\nThis is `dataset_quota` multiplied by the context's storage limit.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes_used": { - "description": "Total bundle usage, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "dataset_quota": { - "description": "The total dataset quota, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bytes_available", - "bytes_used", - "dataset_quota" - ] - }, - "ByteCount": { - "description": "Byte count to express memory or storage capacity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "Chipset": { - "description": "A kind of virtual chipset.", - "oneOf": [ - { - "description": "An Intel 440FX-compatible chipset.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "i440_fx" - ] - }, - "value": { - "$ref": "#/components/schemas/I440Fx" - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "CleanupContext": { - "description": "Context provided for the zone bundle cleanup task.", - "type": "object", - "properties": { - "period": { - "description": "The period on which automatic checks and cleanup is performed.", - "allOf": [ - { - "$ref": "#/components/schemas/CleanupPeriod" - } - ] - }, - "priority": { - "description": "The priority ordering for keeping old bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "description": "The limit on the dataset quota available for zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/StorageLimit" - } - ] - } - }, - "required": [ - "period", - "priority", - "storage_limit" - ] - }, - "CleanupContextUpdate": { - "description": "Parameters used to update the zone bundle cleanup context.", - "type": "object", - "properties": { - "period": { - "nullable": true, - "description": "The new period on which automatic cleanups are run.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "priority": { - "nullable": true, - "description": "The priority ordering for preserving old zone bundles.", - "allOf": [ - { - "$ref": "#/components/schemas/PriorityOrder" - } - ] - }, - "storage_limit": { - "nullable": true, - "description": "The new limit on the underlying dataset quota allowed for bundles.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - } - }, - "CleanupCount": { - "description": "The count of bundles / bytes removed during a cleanup operation.", - "type": "object", - "properties": { - "bundles": { - "description": "The number of bundles removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "bytes": { - "description": "The number of bytes removed.", - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "bundles", - "bytes" - ] - }, - "CleanupPeriod": { - "description": "A period on which bundles are automatically cleaned up.", - "allOf": [ - { - "$ref": "#/components/schemas/Duration" - } - ] - }, - "ComponentV0": { - "oneOf": [ - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioDisk" - }, - "type": { - "type": "string", - "enum": [ - "virtio_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/NvmeDisk" - }, - "type": { - "type": "string", - "enum": [ - "nvme_disk" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNic" - }, - "type": { - "type": "string", - "enum": [ - "virtio_nic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SerialPort" - }, - "type": { - "type": "string", - "enum": [ - "serial_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/PciPciBridge" - }, - "type": { - "type": "string", - "enum": [ - "pci_pci_bridge" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/QemuPvpanic" - }, - "type": { - "type": "string", - "enum": [ - "qemu_pvpanic" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BootSettings" - }, - "type": { - "type": "string", - "enum": [ - "boot_settings" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPciPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_pci_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuPort" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_port" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/SoftNpuP9" - }, - "type": { - "type": "string", - "enum": [ - "soft_npu_p9" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/P9fs" - }, - "type": { - "type": "string", - "enum": [ - "p9fs" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/MigrationFailureInjector" - }, - "type": { - "type": "string", - "enum": [ - "migration_failure_injector" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/CrucibleStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "crucible_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/FileStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "file_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/BlobStorageBackend" - }, - "type": { - "type": "string", - "enum": [ - "blob_storage_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/VirtioNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "virtio_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "component": { - "$ref": "#/components/schemas/DlpiNetworkBackend" - }, - "type": { - "type": "string", - "enum": [ - "dlpi_network_backend" - ] - } - }, - "required": [ - "component", - "type" - ], - "additionalProperties": false - } - ] - }, - "CompressionAlgorithm": { - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "on" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "off" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "gzip" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "level": { - "$ref": "#/components/schemas/GzipLevel" - }, - "type": { - "type": "string", - "enum": [ - "gzip_n" - ] - } - }, - "required": [ - "level", - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lz4" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "lzjb" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "zle" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "ConfigReconcilerInventory": { - "description": "Describes the last attempt made by the sled-agent-config-reconciler to reconcile the current sled config against the actual state of the sled.", - "type": "object", - "properties": { - "boot_partitions": { - "$ref": "#/components/schemas/BootPartitionContents" - }, - "datasets": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "external_disks": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - }, - "last_reconciled_config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "orphaned_datasets": { - "title": "IdOrdMap", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/OrphanedDataset" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/OrphanedDataset" - }, - "uniqueItems": true - }, - "remove_mupdate_override": { - "nullable": true, - "description": "The result of removing the mupdate override file on disk.\n\n`None` if `remove_mupdate_override` was not provided in the sled config.", - "allOf": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideInventory" - } - ] - }, - "zones": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/ConfigReconcilerInventoryResult" - } - } - }, - "required": [ - "boot_partitions", - "datasets", - "external_disks", - "last_reconciled_config", - "orphaned_datasets", - "zones" - ] - }, - "ConfigReconcilerInventoryResult": { - "oneOf": [ - { - "type": "object", - "properties": { - "result": { - "type": "string", - "enum": [ - "ok" - ] - } - }, - "required": [ - "result" - ] - }, - { - "type": "object", - "properties": { - "message": { - "type": "string" - }, - "result": { - "type": "string", - "enum": [ - "err" - ] - } - }, - "required": [ - "message", - "result" - ] - } - ] - }, - "ConfigReconcilerInventoryStatus": { - "description": "Status of the sled-agent-config-reconciler task.", - "oneOf": [ - { - "description": "The reconciler task has not yet run for the first time since sled-agent started.", - "type": "object", - "properties": { - "status": { - "type": "string", - "enum": [ - "not_yet_run" - ] - } - }, - "required": [ - "status" - ] - }, - { - "description": "The reconciler task is actively running.", - "type": "object", - "properties": { - "config": { - "$ref": "#/components/schemas/OmicronSledConfig" - }, - "running_for": { - "$ref": "#/components/schemas/Duration" - }, - "started_at": { - "type": "string", - "format": "date-time" - }, - "status": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "config", - "running_for", - "started_at", - "status" - ] - }, - { - "description": "The reconciler task is currently idle, but previously did complete a reconciliation attempt.\n\nThis variant does not include the `OmicronSledConfig` used in the last attempt, because that's always available via [`ConfigReconcilerInventory::last_reconciled_config`].", - "type": "object", - "properties": { - "completed_at": { - "type": "string", - "format": "date-time" - }, - "ran_for": { - "$ref": "#/components/schemas/Duration" - }, - "status": { - "type": "string", - "enum": [ - "idle" - ] - } - }, - "required": [ - "completed_at", - "ran_for", - "status" - ] - } - ] - }, - "Cpuid": { - "description": "A set of CPUID values to expose to a guest.", - "type": "object", - "properties": { - "entries": { - "description": "A list of CPUID leaves/subleaves and their associated values.\n\nPropolis servers require that each entry's `leaf` be unique and that it falls in either the \"standard\" (0 to 0xFFFF) or \"extended\" (0x8000_0000 to 0x8000_FFFF) function ranges, since these are the only valid input ranges currently defined by Intel and AMD. See the Intel 64 and IA-32 Architectures Software Developer's Manual (June 2024) Table 3-17 and the AMD64 Architecture Programmer's Manual (March 2024) Volume 3's documentation of the CPUID instruction.", - "type": "array", - "items": { - "$ref": "#/components/schemas/CpuidEntry" - } - }, - "vendor": { - "description": "The CPU vendor to emulate.\n\nCPUID leaves in the extended range (0x8000_0000 to 0x8000_FFFF) have vendor-defined semantics. Propolis uses this value to determine these semantics when deciding whether it needs to specialize the supplied template values for these leaves.", - "allOf": [ - { - "$ref": "#/components/schemas/CpuidVendor" - } - ] - } - }, - "required": [ - "entries", - "vendor" - ], - "additionalProperties": false - }, - "CpuidEntry": { - "description": "A full description of a CPUID leaf/subleaf and the values it produces.", - "type": "object", - "properties": { - "eax": { - "description": "The value to return in eax.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ebx": { - "description": "The value to return in ebx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "ecx": { - "description": "The value to return in ecx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "edx": { - "description": "The value to return in edx.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "leaf": { - "description": "The leaf (function) number for this entry.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "subleaf": { - "nullable": true, - "description": "The subleaf (index) number for this entry, if it uses subleaves.", - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "eax", - "ebx", - "ecx", - "edx", - "leaf" - ], - "additionalProperties": false - }, - "CpuidVendor": { - "description": "A CPU vendor to use when interpreting the meanings of CPUID leaves in the extended ID range (0x80000000 to 0x8000FFFF).", - "type": "string", - "enum": [ - "amd", - "intel" - ] - }, - "CrucibleStorageBackend": { - "description": "A Crucible storage backend.", - "type": "object", - "properties": { - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "request_json": { - "description": "A serialized `[crucible_client_types::VolumeConstructionRequest]`. This is stored in serialized form so that breaking changes to the definition of a `VolumeConstructionRequest` do not inadvertently break instance spec deserialization.\n\nWhen using a spec to initialize a new instance, the spec author must ensure this request is well-formed and can be deserialized by the version of `crucible_client_types` used by the target Propolis.", - "type": "string" - } - }, - "required": [ - "readonly", - "request_json" - ], - "additionalProperties": false - }, - "DatasetConfig": { - "description": "Configuration information necessary to request a single dataset.\n\nThese datasets are tracked directly by Nexus.", - "type": "object", - "properties": { - "compression": { - "description": "The compression mode to be used by the dataset", - "allOf": [ - { - "$ref": "#/components/schemas/CompressionAlgorithm" - } - ] - }, - "id": { - "description": "The UUID of the dataset being requested", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetUuid" - } - ] - }, - "name": { - "description": "The dataset's name", - "allOf": [ - { - "$ref": "#/components/schemas/DatasetName" - } - ] - }, - "quota": { - "nullable": true, - "description": "The upper bound on the amount of storage used by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - }, - "reservation": { - "nullable": true, - "description": "The lower bound on the amount of storage usable by this dataset", - "allOf": [ - { - "$ref": "#/components/schemas/ByteCount" - } - ] - } - }, - "required": [ - "compression", - "id", - "name" - ] - }, - "DatasetKind": { - "description": "The kind of dataset. See the `DatasetKind` enum in omicron-common for possible values.", - "type": "string" - }, - "DatasetName": { - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/DatasetKind" - }, - "pool_name": { - "$ref": "#/components/schemas/ZpoolName" - } - }, - "required": [ - "kind", - "pool_name" - ] - }, - "DatasetUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::DatasetUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "DelegatedZvol": { - "description": "Delegate a ZFS volume to a zone", - "oneOf": [ - { - "description": "Delegate a slice of the local storage dataset present on this pool into the zone.", - "type": "object", - "properties": { - "dataset_id": { - "$ref": "#/components/schemas/DatasetUuid" - }, - "type": { - "type": "string", - "enum": [ - "local_storage" - ] - }, - "zpool_id": { - "$ref": "#/components/schemas/ExternalZpoolUuid" - } - }, - "required": [ - "dataset_id", - "type", - "zpool_id" - ] - } - ] - }, - "DhcpConfig": { - "description": "DHCP configuration for a port\n\nNot present here: Hostname (DHCPv4 option 12; used in DHCPv6 option 39); we use `InstanceRuntimeState::hostname` for this value.", - "type": "object", - "properties": { - "dns_servers": { - "description": "DNS servers to send to the instance\n\n(DHCPv4 option 6; DHCPv6 option 23)", - "type": "array", - "items": { - "type": "string", - "format": "ip" - } - }, - "host_domain": { - "nullable": true, - "description": "DNS zone this instance's hostname belongs to (e.g. the `project.example` part of `instance1.project.example`)\n\n(DHCPv4 option 15; used in DHCPv6 option 39)", - "type": "string" - }, - "search_domains": { - "description": "DNS search domains\n\n(DHCPv4 option 119; DHCPv6 option 24)", - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "dns_servers", - "search_domains" - ] - }, - "DiskEnsureBody": { - "description": "Sent from to a sled agent to establish the runtime state of a Disk", - "type": "object", - "properties": { - "initial_runtime": { - "description": "Last runtime state of the Disk known to Nexus (used if the agent has never seen this Disk before).", - "allOf": [ - { - "$ref": "#/components/schemas/DiskRuntimeState" - } - ] - }, - "target": { - "description": "requested runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskStateRequested" - } - ] - } - }, - "required": [ - "initial_runtime", - "target" - ] - }, - "DiskIdentity": { - "description": "Uniquely identifies a disk.", - "type": "object", - "properties": { - "model": { - "type": "string" - }, - "serial": { - "type": "string" - }, - "vendor": { - "type": "string" - } - }, - "required": [ - "model", - "serial", - "vendor" - ] - }, - "DiskRuntimeState": { - "description": "Runtime state of the Disk, which includes its attach state and some minimal metadata", - "type": "object", - "properties": { - "disk_state": { - "description": "runtime state of the Disk", - "allOf": [ - { - "$ref": "#/components/schemas/DiskState" - } - ] - }, - "gen": { - "description": "generation number for this state", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "time_updated": { - "description": "timestamp for this information", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "disk_state", - "gen", - "time_updated" - ] - }, - "DiskState": { - "description": "State of a Disk", - "oneOf": [ - { - "description": "Disk is being initialized", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "creating" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready but detached from any Instance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is ready to receive blocks from an external source", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "import_ready" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from a URL", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_url" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is importing blocks from bulk writes", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "importing_from_bulk_writes" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being finalized to state Detached", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "finalizing" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is undergoing maintenance", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "maintenance" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is being attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is attached to the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk is being detached from the given Instance", - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "detaching" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "description": "Disk has been destroyed", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "description": "Disk is unavailable", - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskStateRequested": { - "description": "Used to request a Disk state change", - "oneOf": [ - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "detached" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "instance": { - "type": "string", - "format": "uuid" - }, - "state": { - "type": "string", - "enum": [ - "attached" - ] - } - }, - "required": [ - "instance", - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "destroyed" - ] - } - }, - "required": [ - "state" - ] - }, - { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "faulted" - ] - } - }, - "required": [ - "state" - ] - } - ] - }, - "DiskVariant": { - "type": "string", - "enum": [ - "U2", - "M2" - ] - }, - "DlpiNetworkBackend": { - "description": "A network backend associated with a DLPI VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "Duration": { - "type": "object", - "properties": { - "nanos": { - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "secs": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "nanos", - "secs" - ] - }, - "EarlyNetworkConfig": { - "description": "Network configuration required to bring up the control plane\n\nThe fields in this structure are those from [`crate::rack_init::RackInitializeRequest`] necessary for use beyond RSS. This is just for the initial rack configuration and cold boot purposes. Updates come from Nexus.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/EarlyNetworkConfigBody" - }, - "generation": { - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "EarlyNetworkConfigBody": { - "description": "This is the actual configuration of EarlyNetworking.\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "ntp_servers": { - "description": "The external NTP server addresses.", - "type": "array", - "items": { - "type": "string" - } - }, - "rack_network_config": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RackNetworkConfigV2" - } - ] - } - }, - "required": [ - "ntp_servers" - ] - }, - "Error": { - "description": "Error information from a response.", - "type": "object", - "properties": { - "error_code": { - "type": "string" - }, - "message": { - "type": "string" - }, - "request_id": { - "type": "string" - } - }, - "required": [ - "message", - "request_id" - ] - }, - "EstablishedConnection": { - "type": "object", - "properties": { - "addr": { - "type": "string" - }, - "baseboard": { - "$ref": "#/components/schemas/Baseboard" - } - }, - "required": [ - "addr", - "baseboard" - ] - }, - "ExternalIp": { - "description": "An external IP address used by a probe.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used by the address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external IP address.", - "type": "string", - "format": "ip" - }, - "kind": { - "description": "The kind of address this is.", - "allOf": [ - { - "$ref": "#/components/schemas/IpKind" - } - ] - }, - "last_port": { - "description": "The last port used by the address.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "kind", - "last_port" - ] - }, - "ExternalIpGatewayMap": { - "description": "Per-NIC mappings from external IP addresses to the Internet Gateways which can choose them as a source.", - "type": "object", - "properties": { - "mappings": { - "type": "object", - "additionalProperties": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, - "uniqueItems": true - } - } - } - }, - "required": [ - "mappings" - ] - }, - "ExternalZpoolUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ExternalZpoolUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "FileStorageBackend": { - "description": "A storage backend backed by a file in the host system's file system.", - "type": "object", - "properties": { - "block_size": { - "description": "Block size of the backend", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "path": { - "description": "A path to a file that backs a disk.", - "type": "string" - }, - "readonly": { - "description": "Indicates whether the storage is read-only.", - "type": "boolean" - }, - "workers": { - "nullable": true, - "description": "Optional worker threads for the file backend, exposed for testing only.", - "type": "integer", - "format": "uint", - "minimum": 1 - } - }, - "required": [ - "block_size", - "path", - "readonly" - ], - "additionalProperties": false - }, - "Generation": { - "description": "Generation numbers stored in the database, used for optimistic concurrency control", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "GuestHypervisorInterface": { - "description": "A hypervisor interface to expose to the guest.", - "oneOf": [ - { - "description": "Expose a bhyve-like interface (\"bhyve bhyve \" as the hypervisor ID in leaf 0x4000_0000 and no additional leaves or features).", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "bhyve" - ] - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "description": "Expose a Hyper-V-compatible hypervisor interface with the supplied features enabled.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "hyper_v" - ] - }, - "value": { - "type": "object", - "properties": { - "features": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HyperVFeatureFlag" - }, - "uniqueItems": true - } - }, - "required": [ - "features" - ], - "additionalProperties": false - } - }, - "required": [ - "type", - "value" - ], - "additionalProperties": false - } - ] - }, - "GzipLevel": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "HostIdentifier": { - "description": "A `HostIdentifier` represents either an IP host or network (v4 or v6), or an entire VPC (identified by its VNI). It is used in firewall rule host filters.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc" - ] - }, - "value": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "HostPhase2DesiredContents": { - "description": "Describes the desired contents of a host phase 2 slot (i.e., the boot partition on one of the internal M.2 drives).", - "oneOf": [ - { - "description": "Do not change the current contents.\n\nWe use this value when we've detected a sled has been mupdated (and we don't want to overwrite phase 2 images until we understand how to recover from that mupdate) and as the default value when reading an [`OmicronSledConfig`] that was ledgered before this concept existed.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "current_contents" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Set the phase 2 slot to the given artifact.\n\nThe artifact will come from an unpacked and distributed TUF repo.", - "type": "object", - "properties": { - "hash": { - "type": "string", - "format": "hex string (32 bytes)" - }, - "type": { - "type": "string", - "enum": [ - "artifact" - ] - } - }, - "required": [ - "hash", - "type" - ] - } - ] - }, - "HostPhase2DesiredSlots": { - "description": "Describes the desired contents for both host phase 2 slots.", - "type": "object", - "properties": { - "slot_a": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - }, - "slot_b": { - "$ref": "#/components/schemas/HostPhase2DesiredContents" - } - }, - "required": [ - "slot_a", - "slot_b" - ] - }, - "HostPortConfig": { - "type": "object", - "properties": { - "addrs": { - "description": "IP Address and prefix (e.g., `192.168.0.1/16`) to apply to switchport (must be in infra_ip pool). May also include an optional VLAN ID.", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "lldp": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Switchport to use for external connectivity", - "type": "string" - }, - "tx_eq": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - } - }, - "required": [ - "addrs", - "port" - ] - }, - "Hostname": { - "title": "An RFC-1035-compliant hostname", - "description": "A hostname identifies a host on a network, and is usually a dot-delimited sequence of labels, where each label contains only letters, digits, or the hyphen. See RFCs 1035 and 952 for more details.", - "type": "string", - "pattern": "^([a-zA-Z0-9]+[a-zA-Z0-9\\-]*(? for background.", - "oneOf": [ - { - "description": "Start the switch zone if a switch is present.\n\nThis is the default policy.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "start_if_switch_present" - ] - } - }, - "required": [ - "policy" - ] - }, - { - "description": "Even if a switch zone is present, stop the switch zone.", - "type": "object", - "properties": { - "policy": { - "type": "string", - "enum": [ - "stop_despite_switch_presence" - ] - } - }, - "required": [ - "policy" - ] - } - ] - }, - "OrphanedDataset": { - "type": "object", - "properties": { - "available": { - "$ref": "#/components/schemas/ByteCount" - }, - "id": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/DatasetUuid" - } - ] - }, - "mounted": { - "type": "boolean" - }, - "name": { - "$ref": "#/components/schemas/DatasetName" - }, - "reason": { - "type": "string" - }, - "used": { - "$ref": "#/components/schemas/ByteCount" - } - }, - "required": [ - "available", - "mounted", - "name", - "reason", - "used" - ] - }, - "P9fs": { - "description": "Describes a filesystem to expose through a P9 device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "chunk_size": { - "description": "The chunk size to use in the 9P protocol. Vanilla Helios images should use 8192. Falcon Helios base images and Linux can use up to 65536.", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach the guest to this P9 filesystem.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - }, - "source": { - "description": "The host source path to mount into the guest.", - "type": "string" - }, - "target": { - "description": "The 9P target filesystem tag.", - "type": "string" - } - }, - "required": [ - "chunk_size", - "pci_path", - "source", - "target" - ], - "additionalProperties": false - }, - "PciPath": { - "description": "A PCI bus/device/function tuple.", - "type": "object", - "properties": { - "bus": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "device": { - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "function": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "bus", - "device", - "function" - ] - }, - "PciPciBridge": { - "description": "A PCI-PCI bridge.", - "type": "object", - "properties": { - "downstream_bus": { - "description": "The logical bus number of this bridge's downstream bus. Other devices may use this bus number in their PCI paths to indicate they should be attached to this bridge's bus.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "pci_path": { - "description": "The PCI path at which to attach this bridge.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "downstream_bus", - "pci_path" - ], - "additionalProperties": false - }, - "PhysicalDiskUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::PhysicalDiskUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "PortConfigV2": { - "type": "object", - "properties": { - "addresses": { - "description": "This port's addresses and optional vlan IDs", - "type": "array", - "items": { - "$ref": "#/components/schemas/UplinkAddressConfig" - } - }, - "autoneg": { - "description": "Whether or not to set autonegotiation", - "default": false, - "type": "boolean" - }, - "bgp_peers": { - "description": "BGP peers on this port", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpPeerConfig" - } - }, - "lldp": { - "nullable": true, - "description": "LLDP configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/LldpPortConfig" - } - ] - }, - "port": { - "description": "Nmae of the port this config applies to.", - "type": "string" - }, - "routes": { - "description": "The set of routes associated with this port.", - "type": "array", - "items": { - "$ref": "#/components/schemas/RouteConfig" - } - }, - "switch": { - "description": "Switch the port belongs to.", - "allOf": [ - { - "$ref": "#/components/schemas/SwitchLocation" - } - ] - }, - "tx_eq": { - "nullable": true, - "description": "TX-EQ configuration for this port", - "allOf": [ - { - "$ref": "#/components/schemas/TxEqConfig" - } - ] - }, - "uplink_port_fec": { - "nullable": true, - "description": "Port forward error correction type.", - "allOf": [ - { - "$ref": "#/components/schemas/PortFec" - } - ] - }, - "uplink_port_speed": { - "description": "Port speed.", - "allOf": [ - { - "$ref": "#/components/schemas/PortSpeed" - } - ] - } - }, - "required": [ - "addresses", - "bgp_peers", - "port", - "routes", - "switch", - "uplink_port_speed" - ] - }, - "PortFec": { - "description": "Switchport FEC options", - "type": "string", - "enum": [ - "firecode", - "none", - "rs" - ] - }, - "PortSpeed": { - "description": "Switchport Speed options", - "type": "string", - "enum": [ - "speed0_g", - "speed1_g", - "speed10_g", - "speed25_g", - "speed40_g", - "speed50_g", - "speed100_g", - "speed200_g", - "speed400_g" - ] - }, - "PriorityDimension": { - "description": "A dimension along with bundles can be sorted, to determine priority.", - "oneOf": [ - { - "description": "Sorting by time, with older bundles with lower priority.", - "type": "string", - "enum": [ - "time" - ] - }, - { - "description": "Sorting by the cause for creating the bundle.", - "type": "string", - "enum": [ - "cause" - ] - } - ] - }, - "PriorityOrder": { - "description": "The priority order for bundles during cleanup.\n\nBundles are sorted along the dimensions in [`PriorityDimension`], with each dimension appearing exactly once. During cleanup, lesser-priority bundles are pruned first, to maintain the dataset quota. Note that bundles are sorted by each dimension in the order in which they appear, with each dimension having higher priority than the next.", - "type": "array", - "items": { - "$ref": "#/components/schemas/PriorityDimension" - }, - "minItems": 2, - "maxItems": 2 - }, - "ProbeCreate": { - "description": "Parameters used to create a probe.", - "type": "object", - "properties": { - "external_ips": { - "description": "The external IP addresses assigned to the probe.", - "type": "array", - "items": { - "$ref": "#/components/schemas/ExternalIp" - } - }, - "id": { - "description": "The ID for the probe.", - "allOf": [ - { - "$ref": "#/components/schemas/ProbeUuid" - } - ] - }, - "interface": { - "description": "The probe's networking interface.", - "allOf": [ - { - "$ref": "#/components/schemas/NetworkInterface" - } - ] - } - }, - "required": [ - "external_ips", - "id", - "interface" - ] - }, - "ProbeSet": { - "description": "A set of probes that the target sled should run.", - "type": "object", - "properties": { - "probes": { - "title": "IdHashMap", - "description": "The exact set of probes to run.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ProbeCreate" - } - ], - "path": "iddqd::IdHashMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ProbeCreate" - }, - "uniqueItems": true - } - }, - "required": [ - "probes" - ] - }, - "ProbeUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ProbeUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "QemuPvpanic": { - "type": "object", - "properties": { - "enable_isa": { - "description": "Enable the QEMU PVPANIC ISA bus device (I/O port 0x505).", - "type": "boolean" - } - }, - "required": [ - "enable_isa" - ], - "additionalProperties": false - }, - "RackNetworkConfigV2": { - "description": "Initial network configuration", - "type": "object", - "properties": { - "bfd": { - "description": "BFD configuration for connecting the rack to external networks", - "default": [], - "type": "array", - "items": { - "$ref": "#/components/schemas/BfdPeerConfig" - } - }, - "bgp": { - "description": "BGP configurations for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/BgpConfig" - } - }, - "infra_ip_first": { - "description": "First ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "infra_ip_last": { - "description": "Last ip address to be used for configuring network infrastructure", - "type": "string", - "format": "ipv4" - }, - "ports": { - "description": "Uplinks for connecting the rack to external networks", - "type": "array", - "items": { - "$ref": "#/components/schemas/PortConfigV2" - } - }, - "rack_subnet": { - "$ref": "#/components/schemas/Ipv6Net" - } - }, - "required": [ - "bgp", - "infra_ip_first", - "infra_ip_last", - "ports", - "rack_subnet" - ] - }, - "RemoveMupdateOverrideBootSuccessInventory": { - "description": "Status of removing the mupdate override on the boot disk.", - "oneOf": [ - { - "description": "The mupdate override was successfully removed.", - "type": "string", - "enum": [ - "removed" - ] - }, - { - "description": "No mupdate override was found.\n\nThis is considered a success for idempotency reasons.", - "type": "string", - "enum": [ - "no_override" - ] - } - ] - }, - "RemoveMupdateOverrideInventory": { - "description": "Status of removing the mupdate override in the inventory.", - "type": "object", - "properties": { - "boot_disk_result": { - "description": "The result of removing the mupdate override on the boot disk.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/RemoveMupdateOverrideBootSuccessInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_message": { - "description": "What happened on non-boot disks.\n\nWe aren't modeling this out in more detail, because we plan to not try and keep ledgered data in sync across both disks in the future.", - "type": "string" - } - }, - "required": [ - "boot_disk_result", - "non_boot_message" - ] - }, - "ResolvedVpcFirewallRule": { - "description": "VPC firewall rule after object name resolution has been performed by Nexus", - "type": "object", - "properties": { - "action": { - "$ref": "#/components/schemas/VpcFirewallRuleAction" - }, - "direction": { - "$ref": "#/components/schemas/VpcFirewallRuleDirection" - }, - "filter_hosts": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/HostIdentifier" - }, - "uniqueItems": true - }, - "filter_ports": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/L4PortRange" - } - }, - "filter_protocols": { - "nullable": true, - "type": "array", - "items": { - "$ref": "#/components/schemas/VpcFirewallRuleProtocol" - } - }, - "priority": { - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "status": { - "$ref": "#/components/schemas/VpcFirewallRuleStatus" - }, - "targets": { - "type": "array", - "items": { - "$ref": "#/components/schemas/NetworkInterface" - } - } - }, - "required": [ - "action", - "direction", - "priority", - "status", - "targets" - ] - }, - "ResolvedVpcRoute": { - "description": "A VPC route resolved into a concrete target.", - "type": "object", - "properties": { - "dest": { - "$ref": "#/components/schemas/IpNet" - }, - "target": { - "$ref": "#/components/schemas/RouterTarget" - } - }, - "required": [ - "dest", - "target" - ] - }, - "ResolvedVpcRouteSet": { - "description": "An updated set of routes for a given VPC and/or subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "routes": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcRoute" - }, - "uniqueItems": true - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id", - "routes" - ] - }, - "ResolvedVpcRouteState": { - "description": "Version information for routes on a given VPC subnet.", - "type": "object", - "properties": { - "id": { - "$ref": "#/components/schemas/RouterId" - }, - "version": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/RouterVersion" - } - ] - } - }, - "required": [ - "id" - ] - }, - "RouteConfig": { - "type": "object", - "properties": { - "destination": { - "description": "The destination of the route.", - "allOf": [ - { - "$ref": "#/components/schemas/IpNet" - } - ] - }, - "nexthop": { - "description": "The nexthop/gateway address.", - "type": "string", - "format": "ip" - }, - "rib_priority": { - "nullable": true, - "description": "The RIB priority (i.e. Admin Distance) associated with this route.", - "default": null, - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id associated with this route.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "destination", - "nexthop" - ] - }, - "RouterId": { - "description": "Identifier for a VPC and/or subnet.", - "type": "object", - "properties": { - "kind": { - "$ref": "#/components/schemas/RouterKind" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "kind", - "vni" - ] - }, - "RouterKind": { - "description": "The scope of a set of VPC router rules.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "system" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "subnet": { - "$ref": "#/components/schemas/IpNet" - }, - "type": { - "type": "string", - "enum": [ - "custom" - ] - } - }, - "required": [ - "subnet", - "type" - ] - } - ] - }, - "RouterTarget": { - "description": "The target for a given router entry.", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "drop" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "internet_gateway" - ] - }, - "value": { - "$ref": "#/components/schemas/InternetGatewayRouterTarget" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "ip" - ] - }, - "value": { - "type": "string", - "format": "ip" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "vpc_subnet" - ] - }, - "value": { - "$ref": "#/components/schemas/IpNet" - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "RouterVersion": { - "description": "Information on the current parent router (and version) of a route set according to the control plane.", - "type": "object", - "properties": { - "router_id": { - "type": "string", - "format": "uuid" - }, - "version": { - "type": "integer", - "format": "uint64", - "minimum": 0 - } - }, - "required": [ - "router_id", - "version" - ] - }, - "SerialPort": { - "description": "A serial port device.", - "type": "object", - "properties": { - "num": { - "description": "The serial port number for this port.", - "allOf": [ - { - "$ref": "#/components/schemas/SerialPortNumber" - } - ] - } - }, - "required": [ - "num" - ], - "additionalProperties": false - }, - "SerialPortNumber": { - "description": "A serial port identifier, which determines what I/O ports a guest can use to access a port.", - "type": "string", - "enum": [ - "com1", - "com2", - "com3", - "com4" - ] - }, - "SledCpuFamily": { - "description": "Identifies the kind of CPU present on a sled, determined by reading CPUID.\n\nThis is intended to broadly support the control plane answering the question \"can I run this instance on that sled?\" given an instance with either no or some CPU platform requirement. It is not enough information for more precise placement questions - for example, is a CPU a high-frequency part or many-core part? We don't include Genoa here, but in that CPU family there are high frequency parts, many-core parts, and large-cache parts. To support those questions (or satisfactorily answer #8730) we would need to collect additional information and send it along.", - "oneOf": [ - { - "description": "The CPU vendor or its family number don't correspond to any of the known family variants.", - "type": "string", - "enum": [ - "unknown" - ] - }, - { - "description": "AMD Milan processors (or very close). Could be an actual Milan in a Gimlet, a close-to-Milan client Zen 3 part, or Zen 4 (for which Milan is the greatest common denominator).", - "type": "string", - "enum": [ - "amd_milan" - ] - }, - { - "description": "AMD Turin processors (or very close). Could be an actual Turin in a Cosmo, or a close-to-Turin client Zen 5 part.", - "type": "string", - "enum": [ - "amd_turin" - ] - }, - { - "description": "AMD Turin Dense processors. There are no \"Turin Dense-like\" CPUs unlike other cases, so this means a bona fide Zen 5c Turin Dense part.", - "type": "string", - "enum": [ - "amd_turin_dense" - ] - } - ] - }, - "SledDiagnosticsQueryOutput": { - "oneOf": [ - { - "type": "object", - "properties": { - "success": { - "type": "object", - "properties": { - "command": { - "description": "The command and its arguments.", - "type": "string" - }, - "exit_code": { - "nullable": true, - "description": "The exit code if one was present when the command exited.", - "type": "integer", - "format": "int32" - }, - "exit_status": { - "description": "The exit status of the command. This will be the exit code (if any) and exit reason such as from a signal.", - "type": "string" - }, - "stdio": { - "description": "Any stdout/stderr produced by the command.", - "type": "string" - } - }, - "required": [ - "command", - "exit_status", - "stdio" - ] - } - }, - "required": [ - "success" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "failure": { - "type": "object", - "properties": { - "error": { - "description": "The reason the command failed to execute.", - "type": "string" - } - }, - "required": [ - "error" - ] - } - }, - "required": [ - "failure" - ], - "additionalProperties": false - } - ] - }, - "SledIdentifiers": { - "description": "Identifiers for a single sled.\n\nThis is intended primarily to be used in timeseries, to identify sled from which metric data originates.", - "type": "object", - "properties": { - "model": { - "description": "Model name of the sled", - "type": "string" - }, - "rack_id": { - "description": "Control plane ID of the rack this sled is a member of", - "type": "string", - "format": "uuid" - }, - "revision": { - "description": "Revision number of the sled", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "serial": { - "description": "Serial number of the sled", - "type": "string" - }, - "sled_id": { - "description": "Control plane ID for the sled itself", - "type": "string", - "format": "uuid" - } - }, - "required": [ - "model", - "rack_id", - "revision", - "serial", - "sled_id" - ] - }, - "SledRole": { - "description": "Describes the role of the sled within the rack.\n\nNote that this may change if the sled is physically moved within the rack.", - "oneOf": [ - { - "description": "The sled is a general compute sled.", - "type": "string", - "enum": [ - "gimlet" - ] - }, - { - "description": "The sled is attached to the network switch, and has additional responsibilities.", - "type": "string", - "enum": [ - "scrimlet" - ] - } - ] - }, - "SledUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::SledUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "SledVmmState": { - "description": "A wrapper type containing a sled's total knowledge of the state of a VMM.", - "type": "object", - "properties": { - "migration_in": { - "nullable": true, - "description": "The current state of any inbound migration to this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "migration_out": { - "nullable": true, - "description": "The state of any outbound migration from this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/MigrationRuntimeState" - } - ] - }, - "vmm_state": { - "description": "The most recent state of the sled's VMM process.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmRuntimeState" - } - ] - } - }, - "required": [ - "vmm_state" - ] - }, - "SoftNpuP9": { - "description": "Describes a PCI device that shares host files with the guest using the P9 protocol.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPciPort": { - "description": "Describes a SoftNPU PCI device.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "pci_path": { - "description": "The PCI path at which to attach the guest to this port.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "pci_path" - ], - "additionalProperties": false - }, - "SoftNpuPort": { - "description": "Describes a port in a SoftNPU emulated ASIC.\n\nThis is only supported by Propolis servers compiled with the `falcon` feature.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the port's associated DLPI backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "link_name": { - "description": "The data link name for this port.", - "type": "string" - } - }, - "required": [ - "backend_id", - "link_name" - ], - "additionalProperties": false - }, - "SourceNatConfig": { - "description": "An IP address and port range used for source NAT, i.e., making outbound network connections from guests or services.", - "type": "object", - "properties": { - "first_port": { - "description": "The first port used for source NAT, inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - }, - "ip": { - "description": "The external address provided to the instance or service.", - "type": "string", - "format": "ip" - }, - "last_port": { - "description": "The last port used for source NAT, also inclusive.", - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "first_port", - "ip", - "last_port" - ] - }, - "SpecKey": { - "description": "A key identifying a component in an instance spec.", - "oneOf": [ - { - "title": "uuid", - "allOf": [ - { - "type": "string", - "format": "uuid" - } - ] - }, - { - "title": "name", - "allOf": [ - { - "type": "string" - } - ] - } - ] - }, - "StartSledAgentRequest": { - "description": "Configuration information for launching a Sled Agent.", - "type": "object", - "properties": { - "body": { - "$ref": "#/components/schemas/StartSledAgentRequestBody" - }, - "generation": { - "description": "The current generation number of data as stored in CRDB.\n\nThe initial generation is set during RSS time and then only mutated by Nexus. For now, we don't actually anticipate mutating this data, but we leave open the possiblity.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "schema_version": { - "type": "integer", - "format": "uint32", - "minimum": 0 - } - }, - "required": [ - "body", - "generation", - "schema_version" - ] - }, - "StartSledAgentRequestBody": { - "description": "This is the actual app level data of `StartSledAgentRequest`\n\nWe nest it below the \"header\" of `generation` and `schema_version` so that we can perform partial deserialization of `EarlyNetworkConfig` to only read the header and defer deserialization of the body once we know the schema version. This is possible via the use of [`serde_json::value::RawValue`] in future (post-v1) deserialization paths.", - "type": "object", - "properties": { - "id": { - "description": "Uuid of the Sled Agent to be created.", - "allOf": [ - { - "$ref": "#/components/schemas/SledUuid" - } - ] - }, - "is_lrtq_learner": { - "description": "Is this node an LRTQ learner node?\n\nWe only put the node into learner mode if `use_trust_quorum` is also true.", - "type": "boolean" - }, - "rack_id": { - "description": "Uuid of the rack to which this sled agent belongs.", - "type": "string", - "format": "uuid" - }, - "subnet": { - "description": "Portion of the IP space to be managed by the Sled Agent.", - "allOf": [ - { - "$ref": "#/components/schemas/Ipv6Subnet" - } - ] - }, - "use_trust_quorum": { - "description": "Use trust quorum for key generation", - "type": "boolean" - } - }, - "required": [ - "id", - "is_lrtq_learner", - "rack_id", - "subnet", - "use_trust_quorum" - ] - }, - "StorageLimit": { - "description": "The limit on space allowed for zone bundles, as a percentage of the overall dataset's quota.", - "type": "integer", - "format": "uint8", - "minimum": 0 - }, - "SupportBundleMetadata": { - "description": "Metadata about a support bundle", - "type": "object", - "properties": { - "state": { - "$ref": "#/components/schemas/SupportBundleState" - }, - "support_bundle_id": { - "$ref": "#/components/schemas/SupportBundleUuid" - } - }, - "required": [ - "state", - "support_bundle_id" - ] - }, - "SupportBundleState": { - "type": "string", - "enum": [ - "complete", - "incomplete" - ] - }, - "SupportBundleUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::SupportBundleUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "SwitchLocation": { - "description": "Identifies switch physical location", - "oneOf": [ - { - "description": "Switch in upper slot", - "type": "string", - "enum": [ - "switch0" - ] - }, - { - "description": "Switch in lower slot", - "type": "string", - "enum": [ - "switch1" - ] - } - ] - }, - "SwitchPorts": { - "description": "A set of switch uplinks.", - "type": "object", - "properties": { - "uplinks": { - "type": "array", - "items": { - "$ref": "#/components/schemas/HostPortConfig" - } - } - }, - "required": [ - "uplinks" - ] - }, - "TxEqConfig": { - "description": "Per-port tx-eq overrides. This can be used to fine-tune the transceiver equalization settings to improve signal integrity.", - "type": "object", - "properties": { - "main": { - "nullable": true, - "description": "Main tap", - "type": "integer", - "format": "int32" - }, - "post1": { - "nullable": true, - "description": "Post-cursor tap1", - "type": "integer", - "format": "int32" - }, - "post2": { - "nullable": true, - "description": "Post-cursor tap2", - "type": "integer", - "format": "int32" - }, - "pre1": { - "nullable": true, - "description": "Pre-cursor tap1", - "type": "integer", - "format": "int32" - }, - "pre2": { - "nullable": true, - "description": "Pre-cursor tap2", - "type": "integer", - "format": "int32" - } - } - }, - "UplinkAddressConfig": { - "type": "object", - "properties": { - "address": { - "$ref": "#/components/schemas/IpNet" - }, - "vlan_id": { - "nullable": true, - "description": "The VLAN id (if any) associated with this address.", - "default": null, - "type": "integer", - "format": "uint16", - "minimum": 0 - } - }, - "required": [ - "address" - ] - }, - "VirtioDisk": { - "description": "A disk that presents a virtio-block interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the disk's backend component.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "pci_path": { - "description": "The PCI bus/device/function at which this disk should be attached.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtioNetworkBackend": { - "description": "A network backend associated with a virtio-net (viona) VNIC on the host.", - "type": "object", - "properties": { - "vnic_name": { - "description": "The name of the viona VNIC to use as a backend.", - "type": "string" - } - }, - "required": [ - "vnic_name" - ], - "additionalProperties": false - }, - "VirtioNic": { - "description": "A network card that presents a virtio-net interface to the guest.", - "type": "object", - "properties": { - "backend_id": { - "description": "The name of the device's backend.", - "allOf": [ - { - "$ref": "#/components/schemas/SpecKey" - } - ] - }, - "interface_id": { - "description": "A caller-defined correlation identifier for this interface. If Propolis is configured to collect network interface kstats in its Oximeter metrics, the metric series for this interface will be associated with this identifier.", - "type": "string", - "format": "uuid" - }, - "pci_path": { - "description": "The PCI path at which to attach this device.", - "allOf": [ - { - "$ref": "#/components/schemas/PciPath" - } - ] - } - }, - "required": [ - "backend_id", - "interface_id", - "pci_path" - ], - "additionalProperties": false - }, - "VirtualNetworkInterfaceHost": { - "description": "A mapping from a virtual NIC to a physical host", - "type": "object", - "properties": { - "physical_host_ip": { - "type": "string", - "format": "ipv6" - }, - "virtual_ip": { - "type": "string", - "format": "ip" - }, - "virtual_mac": { - "$ref": "#/components/schemas/MacAddr" - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "physical_host_ip", - "virtual_ip", - "virtual_mac", - "vni" - ] - }, - "VmmIssueDiskSnapshotRequestBody": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmIssueDiskSnapshotRequestResponse": { - "type": "object", - "properties": { - "snapshot_id": { - "type": "string", - "format": "uuid" - } - }, - "required": [ - "snapshot_id" - ] - }, - "VmmPutStateBody": { - "description": "The body of a request to move a previously-ensured instance into a specific runtime state.", - "type": "object", - "properties": { - "state": { - "description": "The state into which the instance should be driven.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmStateRequested" - } - ] - } - }, - "required": [ - "state" - ] - }, - "VmmPutStateResponse": { - "description": "The response sent from a request to move an instance into a specific runtime state.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current runtime state of the instance after handling the request to change its state. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "VmmRuntimeState": { - "description": "The dynamic runtime properties of an individual VMM process.", - "type": "object", - "properties": { - "gen": { - "description": "The generation number for this VMM's state.", - "allOf": [ - { - "$ref": "#/components/schemas/Generation" - } - ] - }, - "state": { - "description": "The last state reported by this VMM.", - "allOf": [ - { - "$ref": "#/components/schemas/VmmState" - } - ] - }, - "time_updated": { - "description": "Timestamp for the VMM's state.", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "gen", - "state", - "time_updated" - ] - }, - "VmmSpec": { - "description": "Specifies the virtual hardware configuration of a new Propolis VMM in the form of a Propolis instance specification.\n\nSled-agent expects that when an instance spec is provided alongside an `InstanceSledLocalConfig` to initialize a new instance, the NIC IDs in that config's network interface list will match the IDs of the virtio network backends in the instance spec.", - "allOf": [ - { - "$ref": "#/components/schemas/InstanceSpecV0" - } - ] - }, - "VmmState": { - "description": "One of the states that a VMM can be in.", - "oneOf": [ - { - "description": "The VMM is initializing and has not started running guest CPUs yet.", - "type": "string", - "enum": [ - "starting" - ] - }, - { - "description": "The VMM has finished initializing and may be running guest CPUs.", - "type": "string", - "enum": [ - "running" - ] - }, - { - "description": "The VMM is shutting down.", - "type": "string", - "enum": [ - "stopping" - ] - }, - { - "description": "The VMM's guest has stopped, and the guest will not run again, but the VMM process may not have released all of its resources yet.", - "type": "string", - "enum": [ - "stopped" - ] - }, - { - "description": "The VMM is being restarted or its guest OS is rebooting.", - "type": "string", - "enum": [ - "rebooting" - ] - }, - { - "description": "The VMM is part of a live migration.", - "type": "string", - "enum": [ - "migrating" - ] - }, - { - "description": "The VMM process reported an internal failure.", - "type": "string", - "enum": [ - "failed" - ] - }, - { - "description": "The VMM process has been destroyed and its resources have been released.", - "type": "string", - "enum": [ - "destroyed" - ] - } - ] - }, - "VmmStateRequested": { - "description": "Requestable running state of an Instance.\n\nA subset of [`omicron_common::api::external::InstanceState`].", - "oneOf": [ - { - "description": "Run this instance by migrating in from a previous running incarnation of the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "migration_target" - ] - }, - "value": { - "$ref": "#/components/schemas/InstanceMigrationTargetParams" - } - }, - "required": [ - "type", - "value" - ] - }, - { - "description": "Start the instance if it is not already running.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "running" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Stop the instance.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "stopped" - ] - } - }, - "required": [ - "type" - ] - }, - { - "description": "Immediately reset the instance, as though it had stopped and immediately began to run again.", - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "reboot" - ] - } - }, - "required": [ - "type" - ] - } - ] - }, - "VmmUnregisterResponse": { - "description": "The response sent from a request to unregister an instance.", - "type": "object", - "properties": { - "updated_runtime": { - "nullable": true, - "description": "The current state of the instance after handling the request to unregister it. If the instance's state did not change, this field is `None`.", - "allOf": [ - { - "$ref": "#/components/schemas/SledVmmState" - } - ] - } - } - }, - "Vni": { - "description": "A Geneve Virtual Network Identifier", - "type": "integer", - "format": "uint32", - "minimum": 0 - }, - "VpcFirewallIcmpFilter": { - "type": "object", - "properties": { - "code": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/IcmpParamRange" - } - ] - }, - "icmp_type": { - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "icmp_type" - ] - }, - "VpcFirewallRuleAction": { - "type": "string", - "enum": [ - "allow", - "deny" - ] - }, - "VpcFirewallRuleDirection": { - "type": "string", - "enum": [ - "inbound", - "outbound" - ] - }, - "VpcFirewallRuleProtocol": { - "description": "The protocols that may be specified in a firewall rule's filter", - "oneOf": [ - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "tcp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "udp" - ] - } - }, - "required": [ - "type" - ] - }, - { - "type": "object", - "properties": { - "type": { - "type": "string", - "enum": [ - "icmp" - ] - }, - "value": { - "nullable": true, - "allOf": [ - { - "$ref": "#/components/schemas/VpcFirewallIcmpFilter" - } - ] - } - }, - "required": [ - "type", - "value" - ] - } - ] - }, - "VpcFirewallRuleStatus": { - "type": "string", - "enum": [ - "disabled", - "enabled" - ] - }, - "VpcFirewallRulesEnsureBody": { - "description": "Update firewall rules for a VPC", - "type": "object", - "properties": { - "rules": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ResolvedVpcFirewallRule" - } - }, - "vni": { - "$ref": "#/components/schemas/Vni" - } - }, - "required": [ - "rules", - "vni" - ] - }, - "ZoneArtifactInventory": { - "description": "Inventory representation of a single zone artifact on a boot disk.\n\nPart of [`ZoneManifestBootInventory`].", - "type": "object", - "properties": { - "expected_hash": { - "description": "The expected digest of the file's contents.", - "type": "string", - "format": "hex string (32 bytes)" - }, - "expected_size": { - "description": "The expected size of the file, in bytes.", - "type": "integer", - "format": "uint64", - "minimum": 0 - }, - "file_name": { - "description": "The name of the zone file on disk, for example `nexus.tar.gz`. Zone files are always \".tar.gz\".", - "type": "string" - }, - "path": { - "description": "The full path to the zone file.", - "type": "string", - "format": "Utf8PathBuf" - }, - "status": { - "description": "The status of the artifact.\n\nThis is `Ok(())` if the artifact is present and matches the expected size and digest, or an error message if it is missing or does not match.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "type": "null" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "type": "string", - "enum": [ - null - ] - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - } - }, - "required": [ - "expected_hash", - "expected_size", - "file_name", - "path", - "status" - ] - }, - "ZoneBundleCause": { - "description": "The reason or cause for a zone bundle, i.e., why it was created.", - "oneOf": [ - { - "description": "Some other, unspecified reason.", - "type": "string", - "enum": [ - "other" - ] - }, - { - "description": "A zone bundle taken when a sled agent finds a zone that it does not expect to be running.", - "type": "string", - "enum": [ - "unexpected_zone" - ] - }, - { - "description": "An instance zone was terminated.", - "type": "string", - "enum": [ - "terminated_instance" - ] - } - ] - }, - "ZoneBundleId": { - "description": "An identifier for a zone bundle.", - "type": "object", - "properties": { - "bundle_id": { - "description": "The ID for this bundle itself.", - "type": "string", - "format": "uuid" - }, - "zone_name": { - "description": "The name of the zone this bundle is derived from.", - "type": "string" - } - }, - "required": [ - "bundle_id", - "zone_name" - ] - }, - "ZoneBundleMetadata": { - "description": "Metadata about a zone bundle.", - "type": "object", - "properties": { - "cause": { - "description": "The reason or cause a bundle was created.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleCause" - } - ] - }, - "id": { - "description": "Identifier for this zone bundle", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneBundleId" - } - ] - }, - "time_created": { - "description": "The time at which this zone bundle was created.", - "type": "string", - "format": "date-time" - }, - "version": { - "description": "A version number for this zone bundle.", - "type": "integer", - "format": "uint8", - "minimum": 0 - } - }, - "required": [ - "cause", - "id", - "time_created", - "version" - ] - }, - "ZoneImageResolverInventory": { - "description": "Inventory representation of zone image resolver status and health.", - "type": "object", - "properties": { - "mupdate_override": { - "description": "The mupdate override status.", - "allOf": [ - { - "$ref": "#/components/schemas/MupdateOverrideInventory" - } - ] - }, - "zone_manifest": { - "description": "The zone manifest status.", - "allOf": [ - { - "$ref": "#/components/schemas/ZoneManifestInventory" - } - ] - } - }, - "required": [ - "mupdate_override", - "zone_manifest" - ] - }, - "ZoneManifestBootInventory": { - "description": "Inventory representation of zone artifacts on the boot disk.\n\nPart of [`ZoneManifestInventory`].", - "type": "object", - "properties": { - "artifacts": { - "title": "IdOrdMap", - "description": "The artifacts on disk.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneArtifactInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneArtifactInventory" - }, - "uniqueItems": true - }, - "source": { - "description": "The manifest source.\n\nIn production this is [`OmicronZoneManifestSource::Installinator`], but in some development and testing flows Sled Agent synthesizes zone manifests. In those cases, the source is [`OmicronZoneManifestSource::SledAgent`].", - "allOf": [ - { - "$ref": "#/components/schemas/OmicronZoneManifestSource" - } - ] - } - }, - "required": [ - "artifacts", - "source" - ] - }, - "ZoneManifestInventory": { - "description": "Inventory representation of a zone manifest.\n\nPart of [`ZoneImageResolverInventory`].\n\nA zone manifest is a listing of all the zones present in a system's install dataset. This struct contains information about the install dataset gathered from a system.", - "type": "object", - "properties": { - "boot_disk_path": { - "description": "The full path to the zone manifest file on the boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "boot_inventory": { - "description": "The manifest read from the boot disk, and whether the manifest is valid.", - "x-rust-type": { - "crate": "std", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - }, - { - "type": "string" - } - ], - "path": "::std::result::Result", - "version": "*" - }, - "oneOf": [ - { - "type": "object", - "properties": { - "ok": { - "$ref": "#/components/schemas/ZoneManifestBootInventory" - } - }, - "required": [ - "ok" - ] - }, - { - "type": "object", - "properties": { - "err": { - "type": "string" - } - }, - "required": [ - "err" - ] - } - ] - }, - "non_boot_status": { - "title": "IdOrdMap", - "description": "Information about the install dataset on non-boot disks.", - "x-rust-type": { - "crate": "iddqd", - "parameters": [ - { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - } - ], - "path": "iddqd::IdOrdMap", - "version": "*" - }, - "type": "array", - "items": { - "$ref": "#/components/schemas/ZoneManifestNonBootInventory" - }, - "uniqueItems": true - } - }, - "required": [ - "boot_disk_path", - "boot_inventory", - "non_boot_status" - ] - }, - "ZoneManifestNonBootInventory": { - "description": "Inventory representation of a zone manifest on a non-boot disk.\n\nUnlike [`ZoneManifestBootInventory`] which is structured since Reconfigurator makes decisions based on it, information about non-boot disks is purely advisory. For simplicity, we store information in an unstructured format.", - "type": "object", - "properties": { - "is_valid": { - "description": "Whether the status is valid.", - "type": "boolean" - }, - "message": { - "description": "A message describing the status.\n\nIf `is_valid` is true, then the message describes the list of artifacts found and their hashes.\n\nIf `is_valid` is false, then this message describes the reason for the invalid status. This could include errors reading the zone manifest, or zone file mismatches.", - "type": "string" - }, - "path": { - "description": "The full path to the zone manifest JSON on the non-boot disk.", - "type": "string", - "format": "Utf8PathBuf" - }, - "zpool_id": { - "description": "The ID of the non-boot zpool.", - "allOf": [ - { - "$ref": "#/components/schemas/InternalZpoolUuid" - } - ] - } - }, - "required": [ - "is_valid", - "message", - "path", - "zpool_id" - ] - }, - "ZpoolName": { - "title": "The name of a Zpool", - "description": "Zpool names are of the format ox{i,p}_. They are either Internal or External, and should be unique", - "type": "string", - "pattern": "^ox[ip]_[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" - }, - "ZpoolUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::ZpoolUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - }, - "PropolisUuid": { - "x-rust-type": { - "crate": "omicron-uuid-kinds", - "path": "omicron_uuid_kinds::PropolisUuid", - "version": "*" - }, - "type": "string", - "format": "uuid" - } - }, - "responses": { - "Error": { - "description": "Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Error" - } - } - } - } - } - } -} diff --git a/openapi/sled-agent/sled-agent-9.0.0-12ab86.json.gitref b/openapi/sled-agent/sled-agent-9.0.0-12ab86.json.gitref new file mode 100644 index 00000000000..5a9fbded275 --- /dev/null +++ b/openapi/sled-agent/sled-agent-9.0.0-12ab86.json.gitref @@ -0,0 +1 @@ +f493515c1a1545cb71d6578d12055668a4198cb0:openapi/sled-agent/sled-agent-9.0.0-12ab86.json \ No newline at end of file