Skip to content
Open
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
13 changes: 10 additions & 3 deletions nexus/db-queries/src/db/datastore/physical_disk.rs
Original file line number Diff line number Diff line change
Expand Up @@ -774,9 +774,10 @@ mod test {
use sled_agent_types::disk::DiskIdentity;
use sled_agent_types::disk::DiskVariant;
use sled_agent_types::inventory::{
ConfigReconcilerInventoryStatus, FmdInventory, Inventory,
InventoryDisk, OmicronFileSourceResolverInventory, SledCpuFamily,
SledRole, SvcsEnabledNotOnlineResult,
ConfigReconcilerInventoryStatus, CurrentUpdateDisposition,
FmdInventory, InstanceManagerStatus, Inventory, InventoryDisk,
OmicronFileSourceResolverInventory, OmicronSledUpdateDisposition,
SledCpuFamily, SledRole, SvcsEnabledNotOnlineResult,
};
use sled_hardware_types::BaseboardId;
use std::num::NonZeroU32;
Expand Down Expand Up @@ -1133,6 +1134,12 @@ mod test {
reconciler_status:
ConfigReconcilerInventoryStatus::NotYetRun,
last_reconciliation: None,
instance_manager_status: InstanceManagerStatus {
update_disposition: CurrentUpdateDisposition::Known(
OmicronSledUpdateDisposition::Available,
),
num_registered_vmms: 0,
},
file_source_resolver:
OmicronFileSourceResolverInventory::new_fake(),
smf_services_enabled_not_online:
Expand Down
10 changes: 10 additions & 0 deletions nexus/inventory/src/examples.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,10 @@ use sled_agent_types::inventory::BootPartitionDetails;
use sled_agent_types::inventory::ConfigReconcilerInventory;
use sled_agent_types::inventory::ConfigReconcilerInventoryResult;
use sled_agent_types::inventory::ConfigReconcilerInventoryStatus;
use sled_agent_types::inventory::CurrentUpdateDisposition;
use sled_agent_types::inventory::FmdInventory;
use sled_agent_types::inventory::HostPhase2DesiredSlots;
use sled_agent_types::inventory::InstanceManagerStatus;
use sled_agent_types::inventory::Inventory;
use sled_agent_types::inventory::InventoryDataset;
use sled_agent_types::inventory::InventoryDisk;
Expand Down Expand Up @@ -1131,6 +1133,13 @@ pub fn sled_agent(
});
let fmd = Ok(FmdInventory { cases: fmd_cases, resources: fmd_resources });

let instance_manager_status = InstanceManagerStatus {
update_disposition: CurrentUpdateDisposition::Known(
OmicronSledUpdateDisposition::Available,
),
num_registered_vmms: 3,
};

Inventory {
baseboard_id,
reservoir_size: ByteCount::from(1024),
Expand All @@ -1146,6 +1155,7 @@ pub fn sled_agent(
ledgered_sled_config,
reconciler_status,
last_reconciliation,
instance_manager_status,
file_source_resolver,
smf_services_enabled_not_online,
reference_measurements,
Expand Down
8 changes: 8 additions & 0 deletions nexus/mgs-updates/src/test_util/host_phase_2_test_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -242,9 +242,11 @@ mod api_impl {
use sled_agent_types::inventory::BootPartitionDetails;
use sled_agent_types::inventory::ConfigReconcilerInventory;
use sled_agent_types::inventory::ConfigReconcilerInventoryStatus;
use sled_agent_types::inventory::CurrentUpdateDisposition;
use sled_agent_types::inventory::FmdInventory;
use sled_agent_types::inventory::HostPhase2DesiredContents;
use sled_agent_types::inventory::HostPhase2DesiredSlots;
use sled_agent_types::inventory::InstanceManagerStatus;
use sled_agent_types::inventory::Inventory;
use sled_agent_types::inventory::ManifestInventory;
use sled_agent_types::inventory::MupdateOverrideInventory;
Expand Down Expand Up @@ -385,6 +387,12 @@ mod api_impl {
remove_mupdate_override: None,
boot_partitions,
}),
instance_manager_status: InstanceManagerStatus {
update_disposition: CurrentUpdateDisposition::Known(
OmicronSledUpdateDisposition::Available,
),
num_registered_vmms: 0,
},
fmd: Ok(FmdInventory::default()),
file_source_resolver: OmicronFileSourceResolverInventory {
zone_manifest: ManifestInventory {
Expand Down
9 changes: 9 additions & 0 deletions nexus/reconfigurator/planning/src/mgs_updates/test_helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,10 @@ use sled_agent_types::inventory::BootPartitionContents;
use sled_agent_types::inventory::BootPartitionDetails;
use sled_agent_types::inventory::ConfigReconcilerInventory;
use sled_agent_types::inventory::ConfigReconcilerInventoryStatus;
use sled_agent_types::inventory::CurrentUpdateDisposition;
use sled_agent_types::inventory::FmdInventory;
use sled_agent_types::inventory::HostPhase2DesiredSlots;
use sled_agent_types::inventory::InstanceManagerStatus;
use sled_agent_types::inventory::Inventory;
use sled_agent_types::inventory::OmicronFileSourceResolverInventory;
use sled_agent_types::inventory::OmicronSledConfig;
Expand Down Expand Up @@ -1321,6 +1323,13 @@ impl<'a> TestBoardCollectionBuilder<'a> {
ledgered_sled_config: Some(fake_sled_config),
reconciler_status:
ConfigReconcilerInventoryStatus::NotYetRun,
instance_manager_status: InstanceManagerStatus {
update_disposition:
CurrentUpdateDisposition::Known(
OmicronSledUpdateDisposition::Available,
),
num_registered_vmms: 0,
},
file_source_resolver:
OmicronFileSourceResolverInventory::new_fake(),
smf_services_enabled_not_online:
Expand Down
15 changes: 15 additions & 0 deletions nexus/reconfigurator/planning/src/system.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ use sled_agent_types::disk::DiskVariant;
use sled_agent_types::disk::M2Slot;
use sled_agent_types::inventory::ConfigReconcilerInventory;
use sled_agent_types::inventory::ConfigReconcilerInventoryStatus;
use sled_agent_types::inventory::CurrentUpdateDisposition;
use sled_agent_types::inventory::FmdInventory;
use sled_agent_types::inventory::InstanceManagerStatus;
use sled_agent_types::inventory::Inventory;
use sled_agent_types::inventory::InventoryDataset;
use sled_agent_types::inventory::InventoryDisk;
Expand All @@ -71,6 +73,7 @@ use sled_agent_types::inventory::ManifestBootInventory;
use sled_agent_types::inventory::MupdateOverrideBootInventory;
use sled_agent_types::inventory::OmicronFileSourceResolverInventory;
use sled_agent_types::inventory::OmicronSledConfig;
use sled_agent_types::inventory::OmicronSledUpdateDisposition;
use sled_agent_types::inventory::SledCpuFamily;
use sled_agent_types::inventory::SledRole;
use sled_agent_types::inventory::SvcsEnabledNotOnlineResult;
Expand Down Expand Up @@ -1518,6 +1521,12 @@ impl Sled {
sled_config,
),
),
instance_manager_status: InstanceManagerStatus {
update_disposition: CurrentUpdateDisposition::Known(
OmicronSledUpdateDisposition::Available,
),
num_registered_vmms: 0,
},
// XXX: return something more reasonable here?
file_source_resolver:
OmicronFileSourceResolverInventory::new_fake(),
Expand Down Expand Up @@ -1704,6 +1713,12 @@ impl Sled {
ledgered_sled_config: inv_sled_agent.ledgered_sled_config.clone(),
reconciler_status: inv_sled_agent.reconciler_status.clone(),
last_reconciliation: inv_sled_agent.last_reconciliation.clone(),
instance_manager_status: InstanceManagerStatus {
update_disposition: CurrentUpdateDisposition::Known(
OmicronSledUpdateDisposition::Available,
),
num_registered_vmms: 0,
},
file_source_resolver: inv_sled_agent.file_source_resolver.clone(),
smf_services_enabled_not_online: inv_sled_agent
.smf_services_enabled_not_online
Expand Down
9 changes: 9 additions & 0 deletions nexus/src/app/update.rs
Original file line number Diff line number Diff line change
Expand Up @@ -919,10 +919,13 @@ mod test {
use omicron_uuid_kinds::ZpoolUuid;
use sled_agent_types::disk::M2Slot;
use sled_agent_types::inventory::ConfigReconcilerInventoryStatus;
use sled_agent_types::inventory::CurrentUpdateDisposition;
use sled_agent_types::inventory::FmdInventory;
use sled_agent_types::inventory::InstanceManagerStatus;
use sled_agent_types::inventory::Inventory;
use sled_agent_types::inventory::InventoryZpool;
use sled_agent_types::inventory::OmicronFileSourceResolverInventory;
use sled_agent_types::inventory::OmicronSledUpdateDisposition;
use sled_agent_types::inventory::SledCpuFamily;
use sled_agent_types::inventory::SledRole;
use sled_agent_types::inventory::SvcEnabledNotOnline;
Expand Down Expand Up @@ -962,6 +965,12 @@ mod test {
ledgered_sled_config: None,
reconciler_status: ConfigReconcilerInventoryStatus::NotYetRun,
last_reconciliation: None,
instance_manager_status: InstanceManagerStatus {
update_disposition: CurrentUpdateDisposition::Known(
OmicronSledUpdateDisposition::Available,
),
num_registered_vmms: 0,
},
file_source_resolver: OmicronFileSourceResolverInventory::new_fake(
),
smf_services_enabled_not_online: smf_services,
Expand Down
1 change: 1 addition & 0 deletions openapi/sled-agent/sled-agent-51.0.0-9a12e4.json.gitstub
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
cb538d50fc99c594c0eecb8e8a577b874dac37d1:openapi/sled-agent/sled-agent-51.0.0-9a12e4.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": "51.0.0"
"version": "52.0.0"
},
"paths": {
"/artifacts": {
Expand Down Expand Up @@ -4857,6 +4857,42 @@
],
"additionalProperties": false
},
"CurrentUpdateDisposition": {
"oneOf": [
{
"type": "object",
"properties": {
"disposition": {
"type": "string",
"enum": [
"config_not_available"
]
}
},
"required": [
"disposition"
]
},
{
"type": "object",
"properties": {
"disposition": {
"type": "string",
"enum": [
"known"
]
},
"value": {
"$ref": "#/components/schemas/OmicronSledUpdateDisposition"
}
},
"required": [
"disposition",
"value"
]
}
]
},
"DatasetConfig": {
"description": "Configuration information necessary to request a single dataset.\n\nThese datasets are tracked directly by Nexus.",
"type": "object",
Expand Down Expand Up @@ -5907,6 +5943,23 @@
}
]
},
"InstanceManagerStatus": {
"type": "object",
"properties": {
"num_registered_vmms": {
"type": "integer",
"format": "uint",
"minimum": 0
},
"update_disposition": {
"$ref": "#/components/schemas/CurrentUpdateDisposition"
}
},
"required": [
"num_registered_vmms",
"update_disposition"
]
},
"InstanceMetadata": {
"description": "Metadata used to track statistics about an instance.",
"type": "object",
Expand Down Expand Up @@ -6205,6 +6258,9 @@
}
]
},
"instance_manager_status": {
"$ref": "#/components/schemas/InstanceManagerStatus"
},
"last_reconciliation": {
"nullable": true,
"allOf": [
Expand Down Expand Up @@ -6279,6 +6335,7 @@
"disks",
"file_source_resolver",
"fmd",
"instance_manager_status",
"reconciler_status",
"reference_measurements",
"reservoir_size",
Expand Down
2 changes: 1 addition & 1 deletion openapi/sled-agent/sled-agent-latest.json
23 changes: 20 additions & 3 deletions sled-agent/api/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ use omicron_common::api::internal::{
use sled_agent_types_versions::{
latest, v1, v4, v6, v7, v9, v10, v11, v12, v14, v16, v17, v18, v20, v22,
v24, v25, v26, v28, v29, v30, v31, v32, v33, v34, v37, v39, v40, v41, v42,
v43, v46, v47, v48, v49, v50,
v43, v46, v47, v48, v49, v50, v51,
};
use sled_diagnostics::SledDiagnosticsQueryOutput;
use slog_error_chain::InlineErrorChain;
Expand All @@ -39,6 +39,7 @@ api_versions!([
// | example for the next person.
// v
// (next_int, IDENT),
(52, ADD_INSTANCE_MANAGER_STATUS_TO_INVENTORY),
(51, MULTIPLE_ZONE_EXTERNAL_IPS),
(50, TYPED_SLED_CONFIG_GENERATION),
(49, ADD_UPDATE_DISPOSITION),
Expand Down Expand Up @@ -1200,22 +1201,38 @@ pub trait SledAgentApi {
#[endpoint {
method = GET,
path = "/inventory",
versions = VERSION_MULTIPLE_ZONE_EXTERNAL_IPS..,
versions = VERSION_ADD_INSTANCE_MANAGER_STATUS_TO_INVENTORY..,
}]
async fn inventory(
rqctx: RequestContext<Self::Context>,
) -> Result<HttpResponseOk<latest::inventory::Inventory>, HttpError>;

/// Fetch basic information about this sled
#[endpoint {
operation_id = "inventory",
method = GET,
path = "/inventory",
versions = VERSION_MULTIPLE_ZONE_EXTERNAL_IPS..VERSION_ADD_INSTANCE_MANAGER_STATUS_TO_INVENTORY,
}]
async fn inventory_v51(
rqctx: RequestContext<Self::Context>,
) -> Result<HttpResponseOk<v51::inventory::Inventory>, HttpError> {
Self::inventory(rqctx).await.map(|HttpResponseOk(inv)| {
HttpResponseOk(v51::inventory::Inventory::from(inv))
})
}

/// Fetch basic information about this sled
#[endpoint {
operation_id = "inventory",
method = GET,
path = "/inventory",
versions = VERSION_TYPED_SLED_CONFIG_GENERATION..VERSION_MULTIPLE_ZONE_EXTERNAL_IPS,
}]
async fn inventory_v50(
rqctx: RequestContext<Self::Context>,
) -> Result<HttpResponseOk<v50::inventory::Inventory>, HttpError> {
let HttpResponseOk(inv) = Self::inventory(rqctx).await?;
let HttpResponseOk(inv) = Self::inventory_v51(rqctx).await?;
v50::inventory::Inventory::try_from(inv)
.map(HttpResponseOk)
.map_err(HttpError::from)
Expand Down
11 changes: 2 additions & 9 deletions sled-agent/config-reconciler/src/handle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@ use omicron_common::disk::DatasetName;
use sled_agent_types::artifact::ArtifactConfig;
use sled_agent_types::inventory::ConfigReconcilerInventory;
use sled_agent_types::inventory::ConfigReconcilerInventoryStatus;
use sled_agent_types::inventory::CurrentUpdateDisposition;
use sled_agent_types::inventory::InventoryDataset;
use sled_agent_types::inventory::InventoryDisk;
use sled_agent_types::inventory::InventoryZpool;
use sled_agent_types::inventory::OmicronSledConfig;
use sled_agent_types::inventory::OmicronSledUpdateDisposition;
use sled_storage::config::MountConfig;
use sled_storage::disk::Disk;
use sled_storage::nested_dataset::NestedDatasetConfig;
Expand Down Expand Up @@ -116,13 +116,6 @@ impl ConfigReconcilerSpawnToken {
}
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(any(test, feature = "testing"), derive(test_strategy::Arbitrary))]
pub enum CurrentUpdateDisposition {
ConfigNotAvailable,
Known(OmicronSledUpdateDisposition),
}

#[derive(Debug, Clone)]
pub struct UpdateDispositionReceiver {
// We act as a forwarding watch receiver for the ledger channel that reports
Expand Down Expand Up @@ -175,7 +168,7 @@ impl UpdateDispositionReceiver {
/// never change.
#[cfg(any(test, feature = "testing"))]
pub fn fake_static(
update_disposition: OmicronSledUpdateDisposition,
update_disposition: sled_agent_types::inventory::OmicronSledUpdateDisposition,
) -> Self {
let (receiver, sender) = Self::fake_dynamic(
CurrentUpdateDisposition::Known(update_disposition),
Expand Down
1 change: 0 additions & 1 deletion sled-agent/config-reconciler/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,6 @@ pub use dataset_serialization_task::NestedDatasetMountError;
pub use handle::AvailableDatasetsReceiver;
pub use handle::ConfigReconcilerHandle;
pub use handle::ConfigReconcilerSpawnToken;
pub use handle::CurrentUpdateDisposition;
pub use handle::InventoryError;
pub use handle::ReconcilerInventory;
pub use handle::TimeSyncConfig;
Expand Down
Loading
Loading