diff --git a/dev-tools/reconfigurator-cli/tests/output/cmds-mupdate-update-flow-stdout b/dev-tools/reconfigurator-cli/tests/output/cmds-mupdate-update-flow-stdout index 1a89e3d3aec..b68793ee0da 100644 --- a/dev-tools/reconfigurator-cli/tests/output/cmds-mupdate-update-flow-stdout +++ b/dev-tools/reconfigurator-cli/tests/output/cmds-mupdate-update-flow-stdout @@ -2186,6 +2186,7 @@ planning report for blueprint 61a93ea3-c872-48e0-aace-e86b0c52b839: * noop converting host phase 2 slot B to Artifact on sled 98e6b7c2-2efa-41ca-b20a-0a4d61102fe6 * noop converting host phase 2 slot B to Artifact on sled d81c6a84-79b8-4958-ae41-ea46c9b19763 * only placed 0/1 desired nexus zones +* zone updates waiting on zone propagation to inventory * waiting to update top-level nexus_generation: some non-Nexus zone are not yet updated diff --git a/dev-tools/reconfigurator-cli/tests/output/cmds-target-release-stdout b/dev-tools/reconfigurator-cli/tests/output/cmds-target-release-stdout index 313caa94393..d1e7df253c0 100644 --- a/dev-tools/reconfigurator-cli/tests/output/cmds-target-release-stdout +++ b/dev-tools/reconfigurator-cli/tests/output/cmds-target-release-stdout @@ -3236,6 +3236,7 @@ planning report for blueprint 24b6e243-100c-428d-8ea6-35b504226f55: * waiting for NTP zones to appear in inventory on sleds: 2b8f0cb3-0295-4b3c-bc58-4fe88b57112c * sleds getting NTP zones and which have other services already, making them eligible for discretionary zones: 2b8f0cb3-0295-4b3c-bc58-4fe88b57112c * missing NTP zone on sled 2b8f0cb3-0295-4b3c-bc58-4fe88b57112c +* zone updates waiting on zone propagation to inventory * waiting to update top-level nexus_generation: some non-Nexus zone are not yet updated @@ -5326,6 +5327,7 @@ planning report for blueprint e7a01ffc-6b0e-408b-917b-b1efe18b3110: * waiting for NTP zones to appear in inventory on sleds: 98e6b7c2-2efa-41ca-b20a-0a4d61102fe6 * sleds getting NTP zones and which have other services already, making them eligible for discretionary zones: 98e6b7c2-2efa-41ca-b20a-0a4d61102fe6 * missing NTP zone on sled 98e6b7c2-2efa-41ca-b20a-0a4d61102fe6 +* zone updates waiting on zone propagation to inventory * waiting to update top-level nexus_generation: some non-Nexus zone are not yet updated @@ -7091,6 +7093,7 @@ planning report for blueprint e8b088a8-7da0-480b-a2dc-75ffef068ece: * waiting for NTP zones to appear in inventory on sleds: d81c6a84-79b8-4958-ae41-ea46c9b19763 * sleds getting NTP zones and which have other services already, making them eligible for discretionary zones: d81c6a84-79b8-4958-ae41-ea46c9b19763 * missing NTP zone on sled d81c6a84-79b8-4958-ae41-ea46c9b19763 +* zone updates waiting on zone propagation to inventory * waiting to update top-level nexus_generation: some non-Nexus zone are not yet updated diff --git a/nexus/reconfigurator/planning/src/planner.rs b/nexus/reconfigurator/planning/src/planner.rs index 305eb0aac24..9f2171eb003 100644 --- a/nexus/reconfigurator/planning/src/planner.rs +++ b/nexus/reconfigurator/planning/src/planner.rs @@ -1546,8 +1546,6 @@ impl<'a> Planner<'a> { &mut self, mgs_updates: &PlanningMgsUpdatesStepReport, ) -> Result { - let mut report = PlanningZoneUpdatesStepReport::new(); - let zones_currently_updating = self.get_zones_not_yet_propagated_to_inventory(); if !zones_currently_updating.is_empty() { @@ -1555,9 +1553,13 @@ impl<'a> Planner<'a> { self.log, "some zones not yet up-to-date"; "zones_currently_updating" => ?zones_currently_updating, ); - return Ok(report); + return Ok(PlanningZoneUpdatesStepReport::waiting_on( + ZoneUpdatesWaitingOn::InventoryPropagation, + )); } + let mut report = PlanningZoneUpdatesStepReport::new(); + // Find the zones with out-of-date images let out_of_date_zones = self.get_out_of_date_zones(); for (sled_id, zone, desired_image) in out_of_date_zones.iter() { diff --git a/nexus/types/src/deployment/planning_report.rs b/nexus/types/src/deployment/planning_report.rs index 8880fd65847..6b334958da1 100644 --- a/nexus/types/src/deployment/planning_report.rs +++ b/nexus/types/src/deployment/planning_report.rs @@ -1021,6 +1021,9 @@ pub enum ZoneUpdatesWaitingOn { /// Waiting on discretionary zone placement. DiscretionaryZones, + /// Waiting on zones to propagate to inventory. + InventoryPropagation, + /// Waiting on updates to RoT / SP / Host OS / etc. PendingMgsUpdates, @@ -1032,6 +1035,7 @@ impl ZoneUpdatesWaitingOn { pub fn as_str(&self) -> &'static str { match self { Self::DiscretionaryZones => "discretionary zones", + Self::InventoryPropagation => "zone propagation to inventory", Self::PendingMgsUpdates => { "pending MGS updates (RoT / SP / Host OS / etc.)" } diff --git a/openapi/nexus-internal.json b/openapi/nexus-internal.json index 8c8f8957d77..08e477a5f99 100644 --- a/openapi/nexus-internal.json +++ b/openapi/nexus-internal.json @@ -9955,6 +9955,21 @@ "type" ] }, + { + "description": "Waiting on zones to propagate to inventory.", + "type": "object", + "properties": { + "type": { + "type": "string", + "enum": [ + "inventory_propagation" + ] + } + }, + "required": [ + "type" + ] + }, { "description": "Waiting on updates to RoT / SP / Host OS / etc.", "type": "object",