From f4febb1ca81b760d3f0fb3ffaf378c911665ec37 Mon Sep 17 00:00:00 2001 From: Alan Hanson Date: Tue, 10 Mar 2026 00:10:08 +0000 Subject: [PATCH 1/4] Test fix for missing metrics --- Cargo.lock | 87 +++++++++++++++---- Cargo.toml | 9 +- package-manifest.toml | 4 +- sled-agent/src/instance.rs | 12 ++- sled-agent/src/sim/instance.rs | 2 +- sled-agent/types/versions/Cargo.toml | 1 + .../types/versions/src/impls/instance.rs | 8 +- .../types/versions/src/initial/instance.rs | 2 +- 8 files changed, 91 insertions(+), 34 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 31e144f33ec..bc8fa7a19ba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -617,7 +617,7 @@ dependencies = [ [[package]] name = "bhyve_api" version = "0.0.0" -source = "git+https://github.com/oxidecomputer/propolis?rev=36f20be9bb4c3b362029237f5feb6377c982395f#36f20be9bb4c3b362029237f5feb6377c982395f" +source = "git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0#8a0026763144cb18f1a23fadecd4527602503df0" dependencies = [ "bhyve_api_sys", "libc", @@ -627,7 +627,7 @@ dependencies = [ [[package]] name = "bhyve_api_sys" version = "0.0.0" -source = "git+https://github.com/oxidecomputer/propolis?rev=36f20be9bb4c3b362029237f5feb6377c982395f#36f20be9bb4c3b362029237f5feb6377c982395f" +source = "git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0#8a0026763144cb18f1a23fadecd4527602503df0" dependencies = [ "libc", "strum 0.26.3", @@ -5942,7 +5942,7 @@ dependencies = [ "libnet", "oxnet", "prettyplease", - "propolis-client", + "propolis-client 0.1.0 (git+https://github.com/oxidecomputer/propolis?rev=36f20be9bb4c3b362029237f5feb6377c982395f)", "quote", "rand 0.8.5", "regex", @@ -8581,7 +8581,7 @@ dependencies = [ "pretty_assertions", "progenitor-client 0.13.0", "progenitor-extras", - "propolis-client", + "propolis-client 0.1.0 (git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0)", "qorb", "rand 0.9.2", "range-requests", @@ -9025,9 +9025,9 @@ dependencies = [ "oxnet", "pretty_assertions", "progenitor 0.13.0", - "propolis-client", + "propolis-client 0.1.0 (git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0)", "propolis-mock-server", - "propolis_api_types", + "propolis_api_types 0.0.0 (git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0)", "rand 0.9.2", "range-requests", "rcgen", @@ -11126,6 +11126,19 @@ dependencies = [ "syn 2.0.117", ] +[[package]] +name = "propolis-api-types-versions" +version = "0.0.0" +source = "git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0#8a0026763144cb18f1a23fadecd4527602503df0" +dependencies = [ + "crucible-client-types", + "propolis_types 0.0.0 (git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0)", + "schemars 0.8.22", + "serde", + "thiserror 1.0.69", + "uuid", +] + [[package]] name = "propolis-client" version = "0.1.0" @@ -11137,7 +11150,7 @@ dependencies = [ "futures", "progenitor 0.10.0", "progenitor-client 0.10.0", - "propolis_api_types", + "propolis_api_types 0.0.0 (git+https://github.com/oxidecomputer/propolis?rev=36f20be9bb4c3b362029237f5feb6377c982395f)", "rand 0.9.2", "reqwest 0.12.28", "schemars 0.8.22", @@ -11150,10 +11163,34 @@ dependencies = [ "uuid", ] +[[package]] +name = "propolis-client" +version = "0.1.0" +source = "git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0#8a0026763144cb18f1a23fadecd4527602503df0" +dependencies = [ + "async-trait", + "base64 0.21.7", + "crucible-client-types", + "futures", + "progenitor 0.13.0", + "progenitor-client 0.13.0", + "propolis-api-types-versions", + "rand 0.9.2", + "reqwest 0.13.2", + "schemars 0.8.22", + "serde", + "serde_json", + "slog", + "thiserror 1.0.69", + "tokio", + "tokio-tungstenite 0.21.0", + "uuid", +] + [[package]] name = "propolis-mock-server" version = "0.0.0" -source = "git+https://github.com/oxidecomputer/propolis?rev=36f20be9bb4c3b362029237f5feb6377c982395f#36f20be9bb4c3b362029237f5feb6377c982395f" +source = "git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0#8a0026763144cb18f1a23fadecd4527602503df0" dependencies = [ "anyhow", "atty", @@ -11162,11 +11199,12 @@ dependencies = [ "dropshot", "futures", "hyper", - "progenitor 0.10.0", - "propolis_api_types", - "propolis_types", + "progenitor 0.13.0", + "propolis-api-types-versions", + "propolis_api_types 0.0.0 (git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0)", + "propolis_types 0.0.0 (git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0)", "rand 0.9.2", - "reqwest 0.12.28", + "reqwest 0.13.2", "schemars 0.8.22", "semver 1.0.27", "serde", @@ -11188,13 +11226,22 @@ version = "0.0.0" source = "git+https://github.com/oxidecomputer/propolis?rev=36f20be9bb4c3b362029237f5feb6377c982395f#36f20be9bb4c3b362029237f5feb6377c982395f" dependencies = [ "crucible-client-types", - "propolis_types", + "propolis_types 0.0.0 (git+https://github.com/oxidecomputer/propolis?rev=36f20be9bb4c3b362029237f5feb6377c982395f)", "schemars 0.8.22", "serde", "thiserror 1.0.69", "uuid", ] +[[package]] +name = "propolis_api_types" +version = "0.0.0" +source = "git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0#8a0026763144cb18f1a23fadecd4527602503df0" +dependencies = [ + "crucible-client-types", + "propolis-api-types-versions", +] + [[package]] name = "propolis_types" version = "0.0.0" @@ -11204,6 +11251,15 @@ dependencies = [ "serde", ] +[[package]] +name = "propolis_types" +version = "0.0.0" +source = "git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0#8a0026763144cb18f1a23fadecd4527602503df0" +dependencies = [ + "schemars 0.8.22", + "serde", +] + [[package]] name = "proptest" version = "1.10.0" @@ -13241,7 +13297,7 @@ dependencies = [ "omicron-workspace-hack", "oxnet", "progenitor 0.13.0", - "propolis-client", + "propolis-client 0.1.0 (git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0)", "regress", "reqwest 0.13.2", "schemars 0.8.22", @@ -13455,7 +13511,8 @@ dependencies = [ "omicron-uuid-kinds", "omicron-workspace-hack", "oxnet", - "propolis_api_types", + "propolis-api-types-versions", + "propolis_api_types 0.0.0 (git+https://github.com/oxidecomputer/propolis?rev=8a0026763144cb18f1a23fadecd4527602503df0)", "proptest", "schemars 0.8.22", "serde", diff --git a/Cargo.toml b/Cargo.toml index 17e9dd6acf4..c2c64830f80 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -698,10 +698,11 @@ progenitor-client010 = { package = "progenitor-client", version = "0.10.0" } # NOTE: if you change the pinned revision of the `bhyve_api` and propolis # dependencies, you must also update the references in package-manifest.toml to # match the new revision. -bhyve_api = { git = "https://github.com/oxidecomputer/propolis", rev = "36f20be9bb4c3b362029237f5feb6377c982395f" } -propolis_api_types = { git = "https://github.com/oxidecomputer/propolis", rev = "36f20be9bb4c3b362029237f5feb6377c982395f" } -propolis-client = { git = "https://github.com/oxidecomputer/propolis", rev = "36f20be9bb4c3b362029237f5feb6377c982395f" } -propolis-mock-server = { git = "https://github.com/oxidecomputer/propolis", rev = "36f20be9bb4c3b362029237f5feb6377c982395f" } +bhyve_api = { git = "https://github.com/oxidecomputer/propolis", rev = "8a0026763144cb18f1a23fadecd4527602503df0" } +propolis_api_types = { git = "https://github.com/oxidecomputer/propolis", rev = "8a0026763144cb18f1a23fadecd4527602503df0" } +propolis-api-types-versions = { git = "https://github.com/oxidecomputer/propolis", rev = "8a0026763144cb18f1a23fadecd4527602503df0" } +propolis-client = { git = "https://github.com/oxidecomputer/propolis", rev = "8a0026763144cb18f1a23fadecd4527602503df0" } +propolis-mock-server = { git = "https://github.com/oxidecomputer/propolis", rev = "8a0026763144cb18f1a23fadecd4527602503df0" } # NOTE: see above! proptest = "1.7.0" qorb = "0.4.1" diff --git a/package-manifest.toml b/package-manifest.toml index 7a911a23824..9c977a09216 100644 --- a/package-manifest.toml +++ b/package-manifest.toml @@ -650,10 +650,10 @@ service_name = "propolis-server" only_for_targets.image = "standard" source.type = "prebuilt" source.repo = "propolis" -source.commit = "36f20be9bb4c3b362029237f5feb6377c982395f" +source.commit = "8a0026763144cb18f1a23fadecd4527602503df0" # The SHA256 digest is automatically posted to: # https://buildomat.eng.oxide.computer/public/file/oxidecomputer/propolis/image//propolis-server.sha256.txt -source.sha256 = "18f244ef765ae26bc7852e3af9b61016a6ea5a59a8eafbe36780a92e5fc75b46" +source.sha256 = "88cd4c102ebe1eb6f486708a788aff610886ef4de1a68b0bd27609809409245e" output.type = "zone" [package.mg-ddm-gz] diff --git a/sled-agent/src/instance.rs b/sled-agent/src/instance.rs index 68e4a4d325d..ff167edc9a6 100644 --- a/sled-agent/src/instance.rs +++ b/sled-agent/src/instance.rs @@ -40,7 +40,7 @@ use omicron_uuid_kinds::{ GenericUuid, InstanceUuid, OmicronZoneUuid, PropolisUuid, }; use oxnet::IpNet; -use propolis_api_types::ErrorCode as PropolisErrorCode; +use propolis_api_types::instance::ErrorCode as PropolisErrorCode; use propolis_client::Client as PropolisClient; use propolis_client::instance_spec::{ ComponentV0, InstanceSpec, InstanceSpecV0, SpecKey, @@ -417,7 +417,7 @@ impl InstanceMonitorRunner { // Update the state generation for the next poll. if let InstanceMonitorUpdate::State(ref state) = update { - generation = state.r#gen + 1; + generation = state.gen_ + 1; } // Now that we have the response from Propolis' HTTP server, we @@ -444,7 +444,7 @@ impl InstanceMonitorRunner { .client .instance_state_monitor() .body(propolis_client::types::InstanceStateMonitorRequest { - r#gen: generation, + gen_: generation, }) .send() .await; @@ -2626,9 +2626,7 @@ impl InstanceRunner { // We use a custom client builder here because the default progenitor // one has a timeout of 15s but we want to be able to wait indefinitely. - // Use reqwest012 because the rev-pinned propolis-client is still on - // reqwest 0.12. - let reqwest_client = reqwest012::ClientBuilder::new().build().unwrap(); + let reqwest_client = reqwest::ClientBuilder::new().build().unwrap(); let client = Arc::new(PropolisClient::new_with_client( &format!("http://{}", &self.propolis_addr), reqwest_client, @@ -3885,7 +3883,7 @@ mod tests { .send(InstanceMonitorMessage { update: InstanceMonitorUpdate::State( InstanceStateMonitorResponse { - r#gen: 5, + gen_: 5, migration: InstanceMigrateStatusResponse { migration_in: None, migration_out: None, diff --git a/sled-agent/src/sim/instance.rs b/sled-agent/src/sim/instance.rs index 67f45ede666..16832b79110 100644 --- a/sled-agent/src/sim/instance.rs +++ b/sled-agent/src/sim/instance.rs @@ -457,7 +457,7 @@ impl Simulatable for SimInstance { current.migration_in.map(|m| m.migration_id), ), last_response: InstanceStateMonitorResponse { - r#gen: 1, + gen_: 1, state: PropolisInstanceState::Starting, migration: PropolisMigrateResponse { migration_in: None, diff --git a/sled-agent/types/versions/Cargo.toml b/sled-agent/types/versions/Cargo.toml index 3eea9c61266..88396e74f69 100644 --- a/sled-agent/types/versions/Cargo.toml +++ b/sled-agent/types/versions/Cargo.toml @@ -24,6 +24,7 @@ omicron-workspace-hack.workspace = true oxnet.workspace = true slog.workspace = true propolis_api_types.workspace = true +propolis-api-types-versions.workspace = true proptest = { workspace = true, optional = true } schemars.workspace = true serde.workspace = true diff --git a/sled-agent/types/versions/src/impls/instance.rs b/sled-agent/types/versions/src/impls/instance.rs index 3596b561789..e9cb0d93871 100644 --- a/sled-agent/types/versions/src/impls/instance.rs +++ b/sled-agent/types/versions/src/impls/instance.rs @@ -4,11 +4,11 @@ use crate::latest::instance::{VmmSpec, VmmStateRequested}; use propolis_api_types::instance_spec::{ + Component, SpecKey, components::backends::{ CrucibleStorageBackend, FileStorageBackend, VirtioNetworkBackend, }, - v0::ComponentV0, }; impl std::fmt::Display for VmmStateRequested { @@ -34,7 +34,7 @@ impl VmmSpec { ) -> impl Iterator { self.0.components.iter().filter_map( |(key, component)| match component { - ComponentV0::CrucibleStorageBackend(be) => Some((key, be)), + Component::CrucibleStorageBackend(be) => Some((key, be)), _ => None, }, ) @@ -45,7 +45,7 @@ impl VmmSpec { ) -> impl Iterator { self.0.components.iter().filter_map( |(key, component)| match component { - ComponentV0::VirtioNetworkBackend(be) => Some((key, be)), + Component::VirtioNetworkBackend(be) => Some((key, be)), _ => None, }, ) @@ -56,7 +56,7 @@ impl VmmSpec { ) -> impl Iterator { self.0.components.iter().filter_map( |(key, component)| match component { - ComponentV0::FileStorageBackend(be) => Some((key, be)), + Component::FileStorageBackend(be) => Some((key, be)), _ => None, }, ) diff --git a/sled-agent/types/versions/src/initial/instance.rs b/sled-agent/types/versions/src/initial/instance.rs index f1a597076f8..fafb77a2d32 100644 --- a/sled-agent/types/versions/src/initial/instance.rs +++ b/sled-agent/types/versions/src/initial/instance.rs @@ -14,7 +14,7 @@ use omicron_common::api::internal::shared::DhcpConfig; use omicron_common::api::internal::shared::external_ip::v1::SourceNatConfig; use omicron_common::api::internal::shared::network_interface::v1::NetworkInterface; use omicron_uuid_kinds::{InstanceUuid, PropolisUuid}; -use propolis_api_types::instance_spec::v0::InstanceSpecV0; +use propolis_api_types_versions::v1::instance_spec::InstanceSpec as InstanceSpecV0; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use uuid::Uuid; From e6aea24baeb6915100e369feea24285231be44a1 Mon Sep 17 00:00:00 2001 From: Alan Hanson Date: Tue, 10 Mar 2026 16:43:26 +0000 Subject: [PATCH 2/4] Fix test --- sled-agent/src/instance.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/sled-agent/src/instance.rs b/sled-agent/src/instance.rs index ff167edc9a6..27c3efc1376 100644 --- a/sled-agent/src/instance.rs +++ b/sled-agent/src/instance.rs @@ -2933,6 +2933,7 @@ mod tests { use camino_tempfile::Utf8TempDir; use dns_server::TransientServer; use dropshot::HttpServer; + use gateway_client::ClientInfo; use internal_dns_resolver::Resolver; use omicron_common::FileKv; use omicron_common::api::external::{Generation, Hostname}; From 98d3269a8f66dee384dcaf315b729c2ce4dbe5c4 Mon Sep 17 00:00:00 2001 From: Alan Hanson Date: Tue, 10 Mar 2026 17:27:43 +0000 Subject: [PATCH 3/4] cargo fmt --- sled-agent/types/versions/src/impls/instance.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sled-agent/types/versions/src/impls/instance.rs b/sled-agent/types/versions/src/impls/instance.rs index e9cb0d93871..3f94e91e043 100644 --- a/sled-agent/types/versions/src/impls/instance.rs +++ b/sled-agent/types/versions/src/impls/instance.rs @@ -4,8 +4,7 @@ use crate::latest::instance::{VmmSpec, VmmStateRequested}; use propolis_api_types::instance_spec::{ - Component, - SpecKey, + Component, SpecKey, components::backends::{ CrucibleStorageBackend, FileStorageBackend, VirtioNetworkBackend, }, From c1b514da82f27c57b8ea415a61a4bc71b9181f9a Mon Sep 17 00:00:00 2001 From: Alan Hanson Date: Tue, 10 Mar 2026 11:21:41 -0700 Subject: [PATCH 4/4] Finish openapi update to versioned --- nexus/src/app/instance_platform/mod.rs | 4 ++-- openapi/sled-agent/sled-agent-26.0.0-294fb6.json.gitstub | 1 + ...ent-26.0.0-294fb6.json => sled-agent-27.0.0-242895.json} | 6 +++--- openapi/sled-agent/sled-agent-latest.json | 2 +- sled-agent/api/src/lib.rs | 1 + 5 files changed, 8 insertions(+), 6 deletions(-) create mode 100644 openapi/sled-agent/sled-agent-26.0.0-294fb6.json.gitstub rename openapi/sled-agent/{sled-agent-26.0.0-294fb6.json => sled-agent-27.0.0-242895.json} (99%) diff --git a/nexus/src/app/instance_platform/mod.rs b/nexus/src/app/instance_platform/mod.rs index fdd4b85ce4d..8901f91b69c 100644 --- a/nexus/src/app/instance_platform/mod.rs +++ b/nexus/src/app/instance_platform/mod.rs @@ -85,7 +85,7 @@ use omicron_common::api::internal::shared::NetworkInterface; use sled_agent_client::types::{ BlobStorageBackend, Board, BootOrderEntry, BootSettings, Chipset, ComponentV0, Cpuid, CpuidVendor, CrucibleStorageBackend, - FileStorageBackend, I440Fx, InstanceSpecV0, NvmeDisk, PciPath, QemuPvpanic, + FileStorageBackend, I440Fx, InstanceSpec, NvmeDisk, PciPath, QemuPvpanic, SerialPort, SerialPortNumber, SpecKey, VirtioDisk, VirtioNetworkBackend, VirtioNic, VmmSpec, }; @@ -548,7 +548,7 @@ impl super::Nexus { components.add_nics(nics)?; components.add_cloud_init(instance, ssh_keys)?; - let spec = InstanceSpecV0 { + let spec = InstanceSpec { board: Board { chipset: Chipset::I440Fx(I440Fx { enable_pcie: false }), cpuid: cpuid_from_vmm_cpu_platform(vmm.cpu_platform), diff --git a/openapi/sled-agent/sled-agent-26.0.0-294fb6.json.gitstub b/openapi/sled-agent/sled-agent-26.0.0-294fb6.json.gitstub new file mode 100644 index 00000000000..72668d0f895 --- /dev/null +++ b/openapi/sled-agent/sled-agent-26.0.0-294fb6.json.gitstub @@ -0,0 +1 @@ +78f8995096b912f90220a1e36ba58a9a2abb4f1e:openapi/sled-agent/sled-agent-26.0.0-294fb6.json diff --git a/openapi/sled-agent/sled-agent-26.0.0-294fb6.json b/openapi/sled-agent/sled-agent-27.0.0-242895.json similarity index 99% rename from openapi/sled-agent/sled-agent-26.0.0-294fb6.json rename to openapi/sled-agent/sled-agent-27.0.0-242895.json index a77298c1bb7..d58b8236637 100644 --- a/openapi/sled-agent/sled-agent-26.0.0-294fb6.json +++ b/openapi/sled-agent/sled-agent-27.0.0-242895.json @@ -7,7 +7,7 @@ "url": "https://oxide.computer", "email": "api@oxide.computer" }, - "version": "26.0.0" + "version": "27.0.0" }, "paths": { "/artifacts": { @@ -5939,7 +5939,7 @@ "nics" ] }, - "InstanceSpecV0": { + "InstanceSpec": { "type": "object", "properties": { "board": { @@ -9841,7 +9841,7 @@ "description": "Specifies the virtual hardware configuration of a new Propolis VMM in the form of a Propolis instance specification.", "allOf": [ { - "$ref": "#/components/schemas/InstanceSpecV0" + "$ref": "#/components/schemas/InstanceSpec" } ] }, diff --git a/openapi/sled-agent/sled-agent-latest.json b/openapi/sled-agent/sled-agent-latest.json index 20e6ac9b880..698b3f10374 120000 --- a/openapi/sled-agent/sled-agent-latest.json +++ b/openapi/sled-agent/sled-agent-latest.json @@ -1 +1 @@ -sled-agent-26.0.0-294fb6.json \ No newline at end of file +sled-agent-27.0.0-242895.json \ No newline at end of file diff --git a/sled-agent/api/src/lib.rs b/sled-agent/api/src/lib.rs index 9bdbdf643b4..cee885fe88f 100644 --- a/sled-agent/api/src/lib.rs +++ b/sled-agent/api/src/lib.rs @@ -37,6 +37,7 @@ api_versions!([ // | example for the next person. // v // (next_int, IDENT), + (27, RENAME_INSTANCE_SPEC), (26, RACK_NETWORK_CONFIG_NOT_OPTIONAL), (25, BOOTSTORE_VERSIONING), (24, ADD_ZPOOL_HEALTH_TO_INVENTORY),