Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 9 additions & 8 deletions nexus/external-api/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ api_versions!([
// | date-based version should be at the top of the list.
// v
// (next_yyyy_mm_dd_nn, IDENT),
(2026_08_28_00, SILO_USER_DOCS),
(2026_08_19_01, BGP_PEER_SRC_ADDR),
(2026_08_17_00, SUPPORT_BUNDLES_STABLE),
(2026_08_14_00, ALERT_LIST),
Expand Down Expand Up @@ -739,7 +740,7 @@ pub trait NexusExternalApi {

// Silo-specific user endpoints

/// List built-in (system) users in silo
/// List users in silo
#[endpoint {
method = GET,
path = "/v1/system/users",
Expand All @@ -751,7 +752,7 @@ pub trait NexusExternalApi {
query_params: Query<PaginatedById<latest::silo::SiloSelector>>,
) -> Result<HttpResponseOk<ResultsPage<latest::user::User>>, HttpError>;

/// List built-in (system) users in silo
/// List users in silo
#[endpoint {
operation_id = "silo_user_list",
method = GET,
Expand All @@ -776,7 +777,7 @@ pub trait NexusExternalApi {
)
}

/// Fetch built-in (system) user
/// Fetch user in silo
#[endpoint {
method = GET,
path = "/v1/system/users/{user_id}",
Expand All @@ -789,7 +790,7 @@ pub trait NexusExternalApi {
query_params: Query<latest::silo::SiloSelector>,
) -> Result<HttpResponseOk<latest::user::User>, HttpError>;

/// Fetch built-in (system) user
/// Fetch user in silo
#[endpoint {
operation_id = "silo_user_view",
method = GET,
Expand Down Expand Up @@ -8985,10 +8986,10 @@ pub trait NexusExternalApi {
///
/// Audit 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.
/// ordered and filtered 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.
#[endpoint {
method = GET,
path = "/v1/system/audit-log",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ use serde::{Deserialize, Serialize};
pub struct SystemNetworkingSettings {
/// When true, end users may opt in to jumbo frames (8500 byte MTU) on the
/// primary interface of an instance. When false, instance-level opt-in is
/// ignored and OPTE ports are created with the default MTU.
/// ignored and the primary interface uses the default MTU.
pub external_jumbo_frames_opt_in_enabled: bool,
}

Expand Down
10 changes: 6 additions & 4 deletions nexus/types/versions/src/initial/affinity.rs
Original file line number Diff line number Diff line change
Expand Up @@ -106,12 +106,14 @@ pub struct AntiAffinityInstanceGroupMemberPath {
)]
#[serde(rename_all = "snake_case")]
pub enum AffinityPolicy {
/// If the affinity request cannot be satisfied, allow it anyway.
///
/// This enables a "best-effort" attempt to satisfy the affinity policy.
/// Best-effort: instances can start even when the group's constraints
/// cannot be satisfied.
Allow,

/// If the affinity request cannot be satisfied, fail explicitly.
/// When the group's constraints cannot be satisfied, an instance start
/// request will fail and the instance will remain stopped. Starting the
/// instance may succeed later if conditions change, e.g., other instances
/// stop.
Fail,
}

Expand Down
5 changes: 3 additions & 2 deletions nexus/types/versions/src/initial/audit.rs
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,9 @@ pub struct AuditLogEntry {
/// Audit log has its own pagination scheme because it paginates by timestamp.
#[derive(Deserialize, JsonSchema, Serialize, PartialEq, Debug, Clone)]
pub struct AuditLogParams {
/// Required, inclusive
/// Start of time range (inclusive). Filters on `time_completed`.
pub start_time: DateTime<Utc>,
/// Exclusive
/// End of time range (exclusive). Filters on `time_completed`. If
/// omitted, the range extends to the present.
pub end_time: Option<DateTime<Utc>>,
}
6 changes: 4 additions & 2 deletions nexus/types/versions/src/initial/silo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ pub struct Silo {
#[serde(flatten)]
pub identity: IdentityMetadata,

/// A silo where discoverable is false can be retrieved only by its id - it
/// will not be part of the "list all silos" output.
/// A non-discoverable silo can only be retrieved by ID - it will not be
/// part of the "list all silos" output.
pub discoverable: bool,

/// How users and groups are managed in this Silo
Expand Down Expand Up @@ -184,6 +184,8 @@ pub struct SiloCreate {
#[serde(flatten)]
pub identity: IdentityMetadataCreateParams,

/// A non-discoverable silo can only be retrieved by ID - it will not be
/// part of the "list all silos" output.
pub discoverable: bool,

pub identity_mode: SiloIdentityMode,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@ pub struct InstanceCreate {
/// it is initially placed on.
#[serde(default)]
pub cpu_platform: Option<InstanceCpuPlatform>,
/// Enable jumbo frames (8500 byte MTU) on the instance's primary OPTE
/// Enable jumbo frames (8500 byte MTU) on the instance's primary network
/// interface. Requires the fleet-wide jumbo-frames opt-in to be enabled
/// by an operator; otherwise this field must be `false`. Changes only take
/// effect on the next instance restart.
Expand Down
1 change: 1 addition & 0 deletions openapi/nexus/nexus-2026081901.0.0-e5e4f5.json.gitstub
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
6b1ca22b4066024f8ac2c04bd678d6e09bf50a6f:openapi/nexus/nexus-2026081901.0.0-e5e4f5.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"url": "https://oxide.computer",
"email": "api@oxide.computer"
},
"version": "2026081901.0.0"
"version": "2026082800.0.0"
},
"paths": {
"/device/auth": {
Expand Down Expand Up @@ -7342,13 +7342,13 @@
"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.",
"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 and filtered 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",
"description": "End of time range (exclusive). Filters on `time_completed`. If omitted, the range extends to the present.",
"schema": {
"nullable": true,
"type": "string",
Expand Down Expand Up @@ -7385,7 +7385,7 @@
{
"in": "query",
"name": "start_time",
"description": "Required, inclusive",
"description": "Start of time range (inclusive). Filters on `time_completed`.",
"schema": {
"type": "string",
"format": "date-time"
Expand Down Expand Up @@ -13465,7 +13465,7 @@
"tags": [
"system/silos"
],
"summary": "List built-in (system) users in silo",
"summary": "List users in silo",
"operationId": "silo_user_list",
"parameters": [
{
Expand Down Expand Up @@ -13534,7 +13534,7 @@
"tags": [
"system/silos"
],
"summary": "Fetch built-in (system) user",
"summary": "Fetch user in silo",
"operationId": "silo_user_view",
"parameters": [
{
Expand Down Expand Up @@ -16208,14 +16208,14 @@
"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.",
"description": "Best-effort: instances can start even when the group's constraints cannot be satisfied.",
"type": "string",
"enum": [
"allow"
]
},
{
"description": "If the affinity request cannot be satisfied, fail explicitly.",
"description": "When the group's constraints cannot be satisfied, an instance start request will fail and the instance will remain stopped. Starting the instance may succeed later if conditions change, e.g., other instances stop.",
"type": "string",
"enum": [
"fail"
Expand Down Expand Up @@ -23111,7 +23111,7 @@
}
},
"enable_jumbo_frames": {
"description": "Enable jumbo frames (8500 byte MTU) on the instance's primary OPTE interface. Requires the fleet-wide jumbo-frames opt-in to be enabled by an operator; otherwise this field must be `false`. Changes only take effect on the next instance restart.",
"description": "Enable jumbo frames (8500 byte MTU) on the instance's primary network interface. Requires the fleet-wide jumbo-frames opt-in to be enabled by an operator; otherwise this field must be `false`. Changes only take effect on the next instance restart.",
"default": false,
"type": "boolean"
},
Expand Down Expand Up @@ -27594,7 +27594,7 @@
"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.",
"description": "A non-discoverable silo can only be retrieved by ID - it will not be part of the \"list all silos\" output.",
"type": "boolean"
},
"id": {
Expand Down Expand Up @@ -27700,6 +27700,7 @@
"type": "string"
},
"discoverable": {
"description": "A non-discoverable silo can only be retrieved by ID - it will not be part of the \"list all silos\" output.",
"type": "boolean"
},
"identity_mode": {
Expand Down Expand Up @@ -29943,7 +29944,7 @@
"type": "object",
"properties": {
"external_jumbo_frames_opt_in_enabled": {
"description": "When true, end users may opt in to jumbo frames (8500 byte MTU) on the primary interface of an instance. When false, instance-level opt-in is ignored and OPTE ports are created with the default MTU.",
"description": "When true, end users may opt in to jumbo frames (8500 byte MTU) on the primary interface of an instance. When false, instance-level opt-in is ignored and the primary interface uses the default MTU.",
"type": "boolean"
}
},
Expand Down
2 changes: 1 addition & 1 deletion openapi/nexus/nexus-latest.json
6 changes: 2 additions & 4 deletions workspace-hack/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,7 @@ idna = { version = "1.1.0" }
indexmap = { version = "2.14.0", features = ["serde"] }
ipnet = { version = "2.12.0", features = ["serde"] }
ipnetwork = { version = "0.21.1", features = ["schemars", "serde"] }
itertools-3575ec1268b04181 = { package = "itertools", version = "0.15.0" }
itertools-594e8ee84c453af0 = { package = "itertools", version = "0.13.0" }
itertools = { version = "0.13.0" }
jiff = { version = "0.2.34", features = ["serde"] }
lalrpop-util = { version = "0.19.12" }
lazy_static = { version = "1.5.0", default-features = false, features = ["spin_no_std"] }
Expand Down Expand Up @@ -237,8 +236,7 @@ idna = { version = "1.1.0" }
indexmap = { version = "2.14.0", features = ["serde"] }
ipnet = { version = "2.12.0", features = ["serde"] }
ipnetwork = { version = "0.21.1", features = ["schemars", "serde"] }
itertools-3575ec1268b04181 = { package = "itertools", version = "0.15.0" }
itertools-594e8ee84c453af0 = { package = "itertools", version = "0.13.0" }
itertools = { version = "0.13.0" }
jiff = { version = "0.2.34", features = ["serde"] }
lalrpop-util = { version = "0.19.12" }
lazy_static = { version = "1.5.0", default-features = false, features = ["spin_no_std"] }
Expand Down
Loading