diff --git a/common/src/address.rs b/common/src/address.rs index b246f8f392..44942a9854 100644 --- a/common/src/address.rs +++ b/common/src/address.rs @@ -31,6 +31,12 @@ pub const MIN_PORT: u16 = u16::MIN; /// Reconfigurator (to know whether to add new Nexus zones) pub const NEXUS_REDUNDANCY: usize = 3; +/// The amount of redundancy for CockroachDb services. +/// +/// This is used by both RSS (to distribute the initial set of services) and the +/// Reconfigurator (to know whether to add new crdb zones) +pub const COCKROACHDB_REDUNDANCY: usize = 5; + /// The amount of redundancy for internal DNS servers. /// /// Must be less than or equal to MAX_DNS_REDUNDANCY. diff --git a/dev-tools/reconfigurator-cli/src/main.rs b/dev-tools/reconfigurator-cli/src/main.rs index b5e65249ce..bc212281b2 100644 --- a/dev-tools/reconfigurator-cli/src/main.rs +++ b/dev-tools/reconfigurator-cli/src/main.rs @@ -24,6 +24,7 @@ use nexus_types::deployment::BlueprintZoneFilter; use nexus_types::deployment::OmicronZoneNic; use nexus_types::deployment::PlanningInput; use nexus_types::deployment::SledFilter; +use nexus_types::deployment::ZoneKind; use nexus_types::deployment::{Blueprint, UnstableReconfiguratorState}; use nexus_types::internal_api::params::DnsConfigParams; use nexus_types::inventory::Collection; @@ -744,7 +745,8 @@ fn cmd_blueprint_edit( let label = match args.edit_command { BlueprintEditCommands::AddNexus { sled_id } => { - let current = builder.sled_num_nexus_zones(sled_id); + let current = + builder.sled_num_zones_of_kind(sled_id, ZoneKind::Nexus); let added = builder .sled_ensure_zone_multiple_nexus(sled_id, current + 1) .context("failed to add Nexus zone")?; diff --git a/nexus/reconfigurator/execution/src/dns.rs b/nexus/reconfigurator/execution/src/dns.rs index 7272062293..ef4996db54 100644 --- a/nexus/reconfigurator/execution/src/dns.rs +++ b/nexus/reconfigurator/execution/src/dns.rs @@ -493,6 +493,7 @@ mod test { use omicron_common::address::get_switch_zone_address; use omicron_common::address::IpRange; use omicron_common::address::Ipv6Subnet; + use omicron_common::address::COCKROACHDB_REDUNDANCY; use omicron_common::address::NEXUS_REDUNDANCY; use omicron_common::address::RACK_PREFIX; use omicron_common::address::SLED_PREFIX; @@ -501,6 +502,7 @@ mod test { use omicron_test_utils::dev::test_setup_log; use omicron_uuid_kinds::ExternalIpUuid; use omicron_uuid_kinds::OmicronZoneUuid; + use sled_agent_client::ZoneKind; use std::collections::BTreeMap; use std::collections::BTreeSet; use std::collections::HashMap; @@ -1235,6 +1237,7 @@ mod test { external_ip_rows: &[], service_nic_rows: &[], target_nexus_zone_count: NEXUS_REDUNDANCY, + target_cockroachdb_zone_count: COCKROACHDB_REDUNDANCY, target_cockroachdb_cluster_version: CockroachDbClusterVersion::POLICY, log, @@ -1260,7 +1263,7 @@ mod test { .unwrap(); let sled_id = blueprint.sleds().next().expect("expected at least one sled"); - let nalready = builder.sled_num_nexus_zones(sled_id); + let nalready = builder.sled_num_zones_of_kind(sled_id, ZoneKind::Nexus); let rv = builder .sled_ensure_zone_multiple_nexus(sled_id, nalready + 1) .unwrap(); diff --git a/nexus/reconfigurator/planning/src/blueprint_builder/builder.rs b/nexus/reconfigurator/planning/src/blueprint_builder/builder.rs index c6b912a683..9d7c542eda 100644 --- a/nexus/reconfigurator/planning/src/blueprint_builder/builder.rs +++ b/nexus/reconfigurator/planning/src/blueprint_builder/builder.rs @@ -6,6 +6,7 @@ use crate::ip_allocator::IpAllocator; use crate::planner::zone_needs_expungement; +use crate::planner::DiscretionaryOmicronZone; use crate::planner::ZoneExpungeReason; use anyhow::anyhow; use internal_dns::config::Host; @@ -29,6 +30,7 @@ use nexus_types::deployment::PlanningInput; use nexus_types::deployment::SledDetails; use nexus_types::deployment::SledFilter; use nexus_types::deployment::SledResources; +use nexus_types::deployment::ZpoolFilter; use nexus_types::deployment::ZpoolName; use nexus_types::external_api::views::SledState; use omicron_common::address::get_internal_dns_server_addresses; @@ -50,6 +52,7 @@ use omicron_uuid_kinds::SledUuid; use omicron_uuid_kinds::ZpoolUuid; use rand::rngs::StdRng; use rand::SeedableRng; +use sled_agent_client::ZoneKind; use slog::debug; use slog::error; use slog::info; @@ -78,6 +81,10 @@ use super::zones::BuilderZonesConfig; pub enum Error { #[error("sled {sled_id}: ran out of available addresses for sled")] OutOfAddresses { sled_id: SledUuid }, + #[error( + "sled {sled_id}: no available zpools for additional {kind:?} zones" + )] + NoAvailableZpool { sled_id: SledUuid, kind: ZoneKind }, #[error("no Nexus zones exist in parent blueprint")] NoNexusZonesInParentBlueprint, #[error("no external service IP addresses are available")] @@ -722,15 +729,19 @@ impl<'a> BlueprintBuilder<'a> { Ok(Ensure::Added) } - /// Return the number of Nexus zones that would be configured to run on the - /// given sled if this builder generated a blueprint + /// Return the number of zones of a given kind that would be configured to + /// run on the given sled if this builder generated a blueprint. /// /// This value may change before a blueprint is actually generated if /// further changes are made to the builder. - pub fn sled_num_nexus_zones(&self, sled_id: SledUuid) -> usize { + pub fn sled_num_zones_of_kind( + &self, + sled_id: SledUuid, + kind: ZoneKind, + ) -> usize { self.zones .current_sled_zones(sled_id) - .filter(|(z, _)| z.zone_type.is_nexus()) + .filter(|(z, _)| z.zone_type.kind() == kind) .count() } @@ -777,7 +788,7 @@ impl<'a> BlueprintBuilder<'a> { external_dns_servers: Vec, ) -> Result { // How many Nexus zones do we need to add? - let nexus_count = self.sled_num_nexus_zones(sled_id); + let nexus_count = self.sled_num_zones_of_kind(sled_id, ZoneKind::Nexus); let num_nexus_to_add = match desired_zone_count.checked_sub(nexus_count) { Some(0) => return Ok(EnsureMultiple::NotNeeded), @@ -850,6 +861,51 @@ impl<'a> BlueprintBuilder<'a> { self.cockroachdb_setting_preserve_downgrade = version; } + pub fn sled_ensure_zone_multiple_cockroachdb( + &mut self, + sled_id: SledUuid, + desired_zone_count: usize, + ) -> Result { + // How many CRDB zones do we need to add? + let crdb_count = + self.sled_num_zones_of_kind(sled_id, ZoneKind::CockroachDb); + let num_crdb_to_add = match desired_zone_count.checked_sub(crdb_count) { + Some(0) => return Ok(EnsureMultiple::NotNeeded), + Some(n) => n, + None => { + return Err(Error::Planner(anyhow!( + "removing a CockroachDb zone not yet supported \ + (sled {sled_id} has {crdb_count}; \ + planner wants {desired_zone_count})" + ))); + } + }; + for _ in 0..num_crdb_to_add { + let zone_id = self.rng.zone_rng.next(); + let underlay_ip = self.sled_alloc_ip(sled_id)?; + let pool_name = self.sled_alloc_zpool( + sled_id, + DiscretionaryOmicronZone::CockroachDb, + )?; + let port = omicron_common::address::COCKROACH_PORT; + let address = SocketAddrV6::new(underlay_ip, port, 0, 0); + let zone = BlueprintZoneConfig { + disposition: BlueprintZoneDisposition::InService, + id: zone_id, + underlay_address: underlay_ip, + zone_type: BlueprintZoneType::CockroachDb( + blueprint_zone_type::CockroachDb { + address, + dataset: OmicronZoneDataset { pool_name }, + }, + ), + }; + self.sled_add_zone(sled_id, zone)?; + } + + Ok(EnsureMultiple::Changed { added: num_crdb_to_add, removed: 0 }) + } + fn sled_add_zone( &mut self, sled_id: SledUuid, @@ -906,6 +962,46 @@ impl<'a> BlueprintBuilder<'a> { allocator.alloc().ok_or(Error::OutOfAddresses { sled_id }) } + fn sled_alloc_zpool( + &mut self, + sled_id: SledUuid, + kind: DiscretionaryOmicronZone, + ) -> Result { + let resources = self.sled_resources(sled_id)?; + + // We refuse to choose a zpool for a zone of a given `kind` if this + // sled already has a zone of that kind on the same zpool. Build up a + // set of invalid zpools for this sled/kind pair. + let mut skip_zpools = BTreeSet::new(); + for zone_config in self.current_sled_zones(sled_id) { + match (kind, &zone_config.zone_type) { + ( + DiscretionaryOmicronZone::Nexus, + BlueprintZoneType::Nexus(_), + ) => { + // TODO handle this case once we track transient datasets + } + ( + DiscretionaryOmicronZone::CockroachDb, + BlueprintZoneType::CockroachDb(crdb), + ) => { + skip_zpools.insert(&crdb.dataset.pool_name); + } + (DiscretionaryOmicronZone::Nexus, _) + | (DiscretionaryOmicronZone::CockroachDb, _) => (), + } + } + + for &zpool_id in resources.all_zpools(ZpoolFilter::InService) { + let zpool_name = ZpoolName::new_external(zpool_id); + if !skip_zpools.contains(&zpool_name) { + return Ok(zpool_name); + } + } + + Err(Error::NoAvailableZpool { sled_id, kind: kind.into() }) + } + fn sled_resources( &self, sled_id: SledUuid, @@ -1179,6 +1275,7 @@ pub mod test { /// Checks various conditions that should be true for all blueprints pub fn verify_blueprint(blueprint: &Blueprint) { + // There should be no duplicate underlay IPs. let mut underlay_ips: BTreeMap = BTreeMap::new(); for (_, zone) in blueprint.all_omicron_zones(BlueprintZoneFilter::All) { @@ -1196,6 +1293,33 @@ pub mod test { ); } } + + // On any given zpool, we should have at most one zone of any given + // kind. + let mut kinds_by_zpool: BTreeMap< + ZpoolUuid, + BTreeMap, + > = BTreeMap::new(); + for (_, zone) in blueprint.all_omicron_zones(BlueprintZoneFilter::All) { + if let Some(dataset) = zone.zone_type.dataset() { + let kind = zone.zone_type.kind(); + if let Some(previous) = kinds_by_zpool + .entry(dataset.pool_name.id()) + .or_default() + .insert(kind, zone.id) + { + panic!( + "zpool {} has two zones of kind {kind:?}: {} and {}\ + \n\n\ + blueprint: {}", + dataset.pool_name, + zone.id, + previous, + blueprint.display(), + ); + } + } + } } #[test] @@ -1881,4 +2005,96 @@ pub mod test { logctx.cleanup_successful(); } + + #[test] + fn test_ensure_cockroachdb() { + static TEST_NAME: &str = "blueprint_builder_test_ensure_cockroachdb"; + let logctx = test_setup_log(TEST_NAME); + + // Discard the example blueprint and start with an empty one. + let (_, input, _) = example(&logctx.log, TEST_NAME, DEFAULT_N_SLEDS); + let input = { + // Clear out the external networking records from `input`, since + // we're building an empty blueprint. + let mut builder = input.into_builder(); + *builder.network_resources_mut() = + OmicronZoneNetworkResources::new(); + builder.build() + }; + let parent = BlueprintBuilder::build_empty_with_sleds_seeded( + input.all_sled_ids(SledFilter::Commissioned), + "test", + TEST_NAME, + ); + + // Pick an arbitrary sled. + let (target_sled_id, sled_resources) = input + .all_sled_resources(SledFilter::InService) + .next() + .expect("at least one sled"); + + // It should have multiple zpools. + let num_sled_zpools = sled_resources.zpools.len(); + assert!( + num_sled_zpools > 1, + "expected more than 1 zpool, got {num_sled_zpools}" + ); + + // We should be able to ask for a CRDB zone per zpool. + let mut builder = BlueprintBuilder::new_based_on( + &logctx.log, + &parent, + &input, + "test", + ) + .expect("constructed builder"); + let ensure_result = builder + .sled_ensure_zone_multiple_cockroachdb( + target_sled_id, + num_sled_zpools, + ) + .expect("ensured multiple CRDB zones"); + assert_eq!( + ensure_result, + EnsureMultiple::Changed { added: num_sled_zpools, removed: 0 } + ); + + let blueprint = builder.build(); + verify_blueprint(&blueprint); + assert_eq!( + blueprint + .all_omicron_zones(BlueprintZoneFilter::ShouldBeRunning) + .filter(|(sled_id, z)| { + *sled_id == target_sled_id + && z.zone_type.kind() == ZoneKind::CockroachDb + }) + .count(), + num_sled_zpools + ); + + // If we instead ask for one more zone than there are zpools, we should + // get a zpool allocation error. + let mut builder = BlueprintBuilder::new_based_on( + &logctx.log, + &parent, + &input, + "test", + ) + .expect("constructed builder"); + let ensure_error = builder + .sled_ensure_zone_multiple_cockroachdb( + target_sled_id, + num_sled_zpools + 1, + ) + .expect_err("failed to create too many CRDB zones"); + match ensure_error { + Error::NoAvailableZpool { sled_id, kind } => { + assert_eq!(target_sled_id, sled_id); + assert_eq!(kind, ZoneKind::CockroachDb); + } + _ => panic!("unexpected error {ensure_error}"), + } + + logctx.cleanup_successful(); + } } diff --git a/nexus/reconfigurator/planning/src/planner.rs b/nexus/reconfigurator/planning/src/planner.rs index 39a57bbbb3..4e288e8d8a 100644 --- a/nexus/reconfigurator/planning/src/planner.rs +++ b/nexus/reconfigurator/planning/src/planner.rs @@ -34,7 +34,7 @@ use std::collections::BTreeSet; use std::hash::Hash; use std::str::FromStr; -use self::omicron_zone_placement::DiscretionaryOmicronZone; +pub(crate) use self::omicron_zone_placement::DiscretionaryOmicronZone; use self::omicron_zone_placement::OmicronZonePlacement; use self::omicron_zone_placement::OmicronZonePlacementSledState; @@ -305,7 +305,8 @@ impl<'a> Planner<'a> { continue; } - // Every provisionable zpool on the sled should have a Crucible zone on it. + // Every provisionable zpool on the sled should have a Crucible zone + // on it. let mut ncrucibles_added = 0; for zpool_id in sled_resources.all_zpools(ZpoolFilter::InService) { if self @@ -338,70 +339,132 @@ impl<'a> Planner<'a> { } } - self.ensure_correct_number_of_nexus_zones(&sleds_waiting_for_ntp_zone)?; - - Ok(()) + self.do_plan_add_discretionary_zones(&sleds_waiting_for_ntp_zone) } - fn ensure_correct_number_of_nexus_zones( + fn do_plan_add_discretionary_zones( &mut self, sleds_waiting_for_ntp_zone: &BTreeSet, ) -> Result<(), Error> { - // Count the number of Nexus zones on all in-service sleds. This will - // include sleds that are in service but not eligible for new services, - // but will not include sleds that have been expunged or decommissioned. - let mut num_total_nexus = 0; + // We usually don't need to construct an `OmicronZonePlacement` to add + // discretionary zones, so defer its creation until it's needed. + let mut zone_placement = None; + + for zone_kind in [ + DiscretionaryOmicronZone::Nexus, + DiscretionaryOmicronZone::CockroachDb, + ] { + let num_zones_to_add = self.num_additional_zones_needed(zone_kind); + if num_zones_to_add == 0 { + continue; + } + // We need to add at least one zone; construct our `zone_placement` + // (or reuse the existing one if a previous loop iteration already + // created it). + let zone_placement = match zone_placement.as_mut() { + Some(zone_placement) => zone_placement, + None => { + // This constructs a picture of the sleds as we currently + // understand them, as far as which sleds have discretionary + // zones. This will remain valid as we loop through the + // `zone_kind`s in this function, as any zone additions will + // update the `zone_placement` heap in-place. + let current_discretionary_zones = self + .input + .all_sled_resources(SledFilter::Discretionary) + .filter(|(sled_id, _)| { + !sleds_waiting_for_ntp_zone.contains(&sled_id) + }) + .map(|(sled_id, sled_resources)| { + OmicronZonePlacementSledState { + sled_id, + num_zpools: sled_resources + .all_zpools(ZpoolFilter::InService) + .count(), + discretionary_zones: self + .blueprint + .current_sled_zones(sled_id) + .filter_map(|zone| { + DiscretionaryOmicronZone::from_zone_type( + &zone.zone_type, + ) + }) + .collect(), + } + }); + zone_placement.insert(OmicronZonePlacement::new( + current_discretionary_zones, + )) + } + }; + self.add_discretionary_zones( + zone_placement, + zone_kind, + num_zones_to_add, + )?; + } + + Ok(()) + } + + // Given the current blueprint state and policy, returns the number of + // additional zones needed of the given `zone_kind` to satisfy the policy. + fn num_additional_zones_needed( + &mut self, + zone_kind: DiscretionaryOmicronZone, + ) -> usize { + // Count the number of `kind` zones on all in-service sleds. This + // will include sleds that are in service but not eligible for new + // services, but will not include sleds that have been expunged or + // decommissioned. + let mut num_existing_kind_zones = 0; for sled_id in self.input.all_sled_ids(SledFilter::InService) { - let num_nexus = self.blueprint.sled_num_nexus_zones(sled_id); - num_total_nexus += num_nexus; + let num_zones_of_kind = self + .blueprint + .sled_num_zones_of_kind(sled_id, zone_kind.into()); + num_existing_kind_zones += num_zones_of_kind; } - // TODO-correctness What should we do if we have _too many_ Nexus - // instances? For now, just log it the number of zones any time we have - // at least the minimum number. - let mut nexus_to_add = self - .input - .target_nexus_zone_count() - .saturating_sub(num_total_nexus); - if nexus_to_add == 0 { + let target_count = match zone_kind { + DiscretionaryOmicronZone::Nexus => { + self.input.target_nexus_zone_count() + } + DiscretionaryOmicronZone::CockroachDb => { + self.input.target_cockroachdb_zone_count() + } + }; + + // TODO-correctness What should we do if we have _too many_ + // `zone_kind` zones? For now, just log it the number of zones any + // time we have at least the minimum number. + let num_zones_to_add = + target_count.saturating_sub(num_existing_kind_zones); + if num_zones_to_add == 0 { info!( - self.log, "sufficient Nexus zones exist in plan"; - "desired_count" => self.input.target_nexus_zone_count(), - "current_count" => num_total_nexus, + self.log, "sufficient {zone_kind:?} zones exist in plan"; + "desired_count" => target_count, + "current_count" => num_existing_kind_zones, ); - return Ok(()); } + num_zones_to_add + } - let mut zone_placement = OmicronZonePlacement::new( - self.input - .all_sled_resources(SledFilter::Discretionary) - .filter(|(sled_id, _)| { - !sleds_waiting_for_ntp_zone.contains(&sled_id) - }) - .map(|(sled_id, sled_resources)| { - OmicronZonePlacementSledState { - sled_id, - num_zpools: sled_resources - .all_zpools(ZpoolFilter::InService) - .count(), - discretionary_zones: self - .blueprint - .current_sled_zones(sled_id) - .filter_map(|zone| { - DiscretionaryOmicronZone::from_zone_type( - &zone.zone_type, - ) - }) - .collect(), - } - }), - ); - - // Build a map of sled -> new nexus zones to add. + // Attempts to place `num_zones_to_add` new zones of `kind`. + // + // It is not an error if there are too few eligible sleds to start a + // sufficient number of zones; instead, we'll log a warning and start as + // many as we can (up to `num_zones_to_add`). + fn add_discretionary_zones( + &mut self, + zone_placement: &mut OmicronZonePlacement, + kind: DiscretionaryOmicronZone, + mut num_zones_to_add: usize, + ) -> Result<(), Error> { + // Build a map of sled -> new zones to add. let mut sleds_to_change: BTreeMap = BTreeMap::new(); - for i in 0..nexus_to_add { - match zone_placement.place_zone(DiscretionaryOmicronZone::Nexus) { + for i in 0..num_zones_to_add { + match zone_placement.place_zone(kind) { Ok(sled_id) => { *sleds_to_change.entry(sled_id).or_default() += 1; } @@ -412,14 +475,14 @@ impl<'a> Planner<'a> { // able to produce blueprints to achieve that status. warn!( self.log, - "failed to place all new desired Nexus instances"; + "failed to place all new desired {kind:?} zones"; "placed" => i, - "wanted_to_place" => nexus_to_add, + "wanted_to_place" => num_zones_to_add, ); - // Adjust `nexus_to_add` downward so it's consistent with - // the number of Nexuses we're actually adding. - nexus_to_add = i; + // Adjust `num_zones_to_add` downward so it's consistent + // with the number of zones we're actually adding. + num_zones_to_add = i; break; } @@ -427,30 +490,43 @@ impl<'a> Planner<'a> { } // For each sled we need to change, actually do so. - let mut total_added = 0; - for (sled_id, additional_nexus_count) in sleds_to_change { + let mut new_zones_added = 0; + for (sled_id, additional_zone_count) in sleds_to_change { // TODO-cleanup This is awkward: the builder wants to know how many - // total Nexus zones go on a given sled, but we have a count of how - // many we want to add. Construct a new target count. Maybe the - // builder should provide a different interface here? - let new_nexus_count = self.blueprint.sled_num_nexus_zones(sled_id) - + additional_nexus_count; - match self - .blueprint - .sled_ensure_zone_multiple_nexus(sled_id, new_nexus_count)? - { + // total zones go on a given sled, but we have a count of how many + // we want to add. Construct a new target count. Maybe the builder + // should provide a different interface here? + let new_total_zone_count = + self.blueprint.sled_num_zones_of_kind(sled_id, kind.into()) + + additional_zone_count; + + let result = match kind { + DiscretionaryOmicronZone::Nexus => { + self.blueprint.sled_ensure_zone_multiple_nexus( + sled_id, + new_total_zone_count, + )? + } + DiscretionaryOmicronZone::CockroachDb => { + self.blueprint.sled_ensure_zone_multiple_cockroachdb( + sled_id, + new_total_zone_count, + )? + } + }; + match result { EnsureMultiple::Changed { added, removed: _ } => { info!( self.log, "will add {added} Nexus zone(s) to sled"; "sled_id" => %sled_id, ); - total_added += added; + new_zones_added += added; } // This is only possible if we asked the sled to ensure the same // number of zones it already has, but that's impossible based // on the way we built up `sleds_to_change`. EnsureMultiple::NotNeeded => unreachable!( - "sled on which we added Nexus zones did not add any" + "sled on which we added {kind:?} zones did not add any" ), } } @@ -459,8 +535,8 @@ impl<'a> Planner<'a> { // arrived here, we think we've added the number of Nexus zones we // needed to. assert_eq!( - total_added, nexus_to_add, - "internal error counting Nexus zones" + new_zones_added, num_zones_to_add, + "internal error counting {kind:?} zones" ); Ok(()) @@ -928,7 +1004,7 @@ mod test { 1 ); - // Now run the planner. It should add additional Nexus instances to the + // Now run the planner. It should add additional Nexus zones to the // one sled we have. let mut builder = input.into_builder(); builder.policy_mut().target_nexus_zone_count = 5; diff --git a/nexus/reconfigurator/planning/src/planner/omicron_zone_placement.rs b/nexus/reconfigurator/planning/src/planner/omicron_zone_placement.rs index 26e72db434..08eccb0468 100644 --- a/nexus/reconfigurator/planning/src/planner/omicron_zone_placement.rs +++ b/nexus/reconfigurator/planning/src/planner/omicron_zone_placement.rs @@ -13,8 +13,9 @@ use std::mem; #[derive(Debug, Clone, Copy, PartialEq, Eq)] #[cfg_attr(test, derive(test_strategy::Arbitrary))] -pub(super) enum DiscretionaryOmicronZone { +pub(crate) enum DiscretionaryOmicronZone { Nexus, + CockroachDb, // TODO expand this enum as we start to place more services } @@ -24,11 +25,11 @@ impl DiscretionaryOmicronZone { ) -> Option { match zone_type { BlueprintZoneType::Nexus(_) => Some(Self::Nexus), + BlueprintZoneType::CockroachDb(_) => Some(Self::CockroachDb), // Zones that we should place but don't yet. BlueprintZoneType::BoundaryNtp(_) | BlueprintZoneType::Clickhouse(_) | BlueprintZoneType::ClickhouseKeeper(_) - | BlueprintZoneType::CockroachDb(_) | BlueprintZoneType::CruciblePantry(_) | BlueprintZoneType::ExternalDns(_) | BlueprintZoneType::InternalDns(_) @@ -46,6 +47,7 @@ impl From for ZoneKind { fn from(zone: DiscretionaryOmicronZone) -> Self { match zone { DiscretionaryOmicronZone::Nexus => Self::Nexus, + DiscretionaryOmicronZone::CockroachDb => Self::CockroachDb, } } } diff --git a/nexus/reconfigurator/planning/src/system.rs b/nexus/reconfigurator/planning/src/system.rs index f2a979cb4a..0499e0ef5b 100644 --- a/nexus/reconfigurator/planning/src/system.rs +++ b/nexus/reconfigurator/planning/src/system.rs @@ -76,6 +76,7 @@ pub struct SystemDescription { available_non_scrimlet_slots: BTreeSet, available_scrimlet_slots: BTreeSet, target_nexus_zone_count: usize, + target_cockroachdb_zone_count: usize, target_cockroachdb_cluster_version: CockroachDbClusterVersion, service_ip_pool_ranges: Vec, internal_dns_version: Generation, @@ -124,8 +125,15 @@ impl SystemDescription { // Policy defaults let target_nexus_zone_count = NEXUS_REDUNDANCY; + + // TODO-cleanup This is wrong, but we don't currently set up any CRDB + // nodes in our fake system, so this prevents downstream test issues + // with the planner thinking our system is out of date from the gate. + let target_cockroachdb_zone_count = 0; + let target_cockroachdb_cluster_version = CockroachDbClusterVersion::POLICY; + // IPs from TEST-NET-1 (RFC 5737) let service_ip_pool_ranges = vec![IpRange::try_from(( "192.0.2.2".parse::().unwrap(), @@ -140,6 +148,7 @@ impl SystemDescription { available_non_scrimlet_slots, available_scrimlet_slots, target_nexus_zone_count, + target_cockroachdb_zone_count, target_cockroachdb_cluster_version, service_ip_pool_ranges, internal_dns_version: Generation::new(), @@ -307,6 +316,7 @@ impl SystemDescription { let policy = Policy { service_ip_pool_ranges: self.service_ip_pool_ranges.clone(), target_nexus_zone_count: self.target_nexus_zone_count, + target_cockroachdb_zone_count: self.target_cockroachdb_zone_count, target_cockroachdb_cluster_version: self .target_cockroachdb_cluster_version, }; @@ -454,8 +464,10 @@ impl Sled { let model = format!("model{}", unique); let serial = format!("serial{}", unique); let revision = 0; - let mut zpool_rng = - TypedUuidRng::from_seed("SystemSimultatedSled", "ZpoolUuid"); + let mut zpool_rng = TypedUuidRng::from_seed( + "SystemSimultatedSled", + (sled_id, "ZpoolUuid"), + ); let zpools: BTreeMap<_, _> = (0..nzpools) .map(|_| { let zpool = ZpoolUuid::from(zpool_rng.next()); diff --git a/nexus/reconfigurator/planning/tests/output/blueprint_builder_initial_diff.txt b/nexus/reconfigurator/planning/tests/output/blueprint_builder_initial_diff.txt index 03e76422e9..01b7ceb46b 100644 --- a/nexus/reconfigurator/planning/tests/output/blueprint_builder_initial_diff.txt +++ b/nexus/reconfigurator/planning/tests/output/blueprint_builder_initial_diff.txt @@ -8,16 +8,16 @@ to: blueprint e4aeb3b3-272f-4967-be34-2d34daa46aa1 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-3fb05590-2632-413e-989f-aaaabaf01fab + fake-vendor fake-model serial-4711ce46-43f6-4732-9769-a69ea519b62d + fake-vendor fake-model serial-4a2cc08d-8e18-4f0e-8fc6-443cb2016858 + fake-vendor fake-model serial-7032a67e-2ff6-45cc-af34-8b3502965cc9 + fake-vendor fake-model serial-908218e9-26ea-4d75-86f9-4b99ff72dcb5 + fake-vendor fake-model serial-9bc4e63d-b8fe-4ac6-ac3a-cf097d06cc6d + fake-vendor fake-model serial-9f343299-ef7a-46aa-9904-061be15abfeb + fake-vendor fake-model serial-c8523dd7-4e87-4e4b-8e46-04b806f0763c + fake-vendor fake-model serial-e02245bc-ca0d-4f08-ac1e-870c4fa2a17c + fake-vendor fake-model serial-f9bcdb70-6846-4330-9d37-bfdd5583aea6 omicron zones at generation 2: @@ -44,16 +44,16 @@ to: blueprint e4aeb3b3-272f-4967-be34-2d34daa46aa1 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-092eaf94-328b-45b6-99da-c850a06e8592 + fake-vendor fake-model serial-3195b46a-d32d-458e-ad7f-b0b2f91af483 + fake-vendor fake-model serial-327bdbbb-c40e-4784-888e-18492a753708 + fake-vendor fake-model serial-4f067c20-2860-49b1-8a03-6715a3c12c0e + fake-vendor fake-model serial-564460fe-7357-4883-a3af-1c931f473e83 + fake-vendor fake-model serial-66f85be6-1143-48a1-a898-504c6b540035 + fake-vendor fake-model serial-97b3f199-b488-4ce0-bd34-484d4d3bd194 + fake-vendor fake-model serial-a38f8150-2efd-4b55-9ffb-3c98e2939e13 + fake-vendor fake-model serial-d788bf53-35dd-4fa7-a820-c1233e859d03 + fake-vendor fake-model serial-ff66a45c-38a8-4b62-825e-e7c9470bc8bc omicron zones at generation 2: @@ -80,16 +80,16 @@ to: blueprint e4aeb3b3-272f-4967-be34-2d34daa46aa1 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-29867b4d-f12b-40ea-b59e-5169d0b2a831 + fake-vendor fake-model serial-54b3613b-a80e-4eda-aa1c-0d92050de367 + fake-vendor fake-model serial-75939bd0-28f6-428b-8ce2-e55241d201ce + fake-vendor fake-model serial-7bcb41c3-6fc7-4cab-ac5f-b2e09f62567d + fake-vendor fake-model serial-92aeebc3-4154-4147-b721-0ccf5e337d8d + fake-vendor fake-model serial-960229b6-dbb2-4df0-ad93-83ddb28484bc + fake-vendor fake-model serial-9e1428de-ad48-4655-8ccc-bbf4cb1badda + fake-vendor fake-model serial-e03fee18-20c9-4c61-8927-bf80525f9b78 + fake-vendor fake-model serial-e25482d4-7111-4acf-b621-4aab851ffda5 + fake-vendor fake-model serial-e90056a4-dd19-4ebb-b484-c677aea31d80 omicron zones at generation 2: diff --git a/nexus/reconfigurator/planning/tests/output/planner_basic_add_sled_2_3.txt b/nexus/reconfigurator/planning/tests/output/planner_basic_add_sled_2_3.txt index 0253baa9f8..3b14db49c7 100644 --- a/nexus/reconfigurator/planning/tests/output/planner_basic_add_sled_2_3.txt +++ b/nexus/reconfigurator/planning/tests/output/planner_basic_add_sled_2_3.txt @@ -9,16 +9,16 @@ to: blueprint 4171ad05-89dd-474b-846b-b007e4346366 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-014eb1e9-04fe-4f36-8339-0a090b053ada + fake-vendor fake-model serial-31a3bc64-7a3b-496d-b644-785dc44b6e37 + fake-vendor fake-model serial-7bb40bd6-9c43-4b63-8337-18313c72aea2 + fake-vendor fake-model serial-988aa8c2-cb5e-406b-9289-425dc2e5bc3a + fake-vendor fake-model serial-ad574c09-2ae0-4534-a2a4-f923ce20ae87 + fake-vendor fake-model serial-ad91e238-4901-4ff4-a91b-75233c936426 + fake-vendor fake-model serial-ce58d463-d442-4c97-a6b4-f7d98c3fd902 + fake-vendor fake-model serial-f18f7689-0059-4b79-880e-34faf7a0fe0e + fake-vendor fake-model serial-f1d6cea4-640f-415e-89fe-2b1784ce3db8 + fake-vendor fake-model serial-f4a96860-bdeb-4435-bdf5-2a10beb3d44a omicron zones at generation 2: @@ -45,16 +45,16 @@ to: blueprint 4171ad05-89dd-474b-846b-b007e4346366 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-12057b4a-0b06-4f70-ba22-336de2385bfe + fake-vendor fake-model serial-29758363-6c77-40c3-8740-9c0c64f6e14a + fake-vendor fake-model serial-3f331c10-7882-48ab-85d9-05108490b55b + fake-vendor fake-model serial-5152d1aa-9045-4e06-9ef6-6eadac3696e4 + fake-vendor fake-model serial-5c0dd424-d905-4fc5-a73c-36254fdd470c + fake-vendor fake-model serial-794df76f-bca0-4635-9eb6-773ad0108f7e + fake-vendor fake-model serial-9024d350-38a7-459b-8550-3b2c4a88b5c1 + fake-vendor fake-model serial-95e86080-e162-4980-a589-db6bb1a95ca7 + fake-vendor fake-model serial-d55d36d7-df92-4615-944d-440a1f8b5001 + fake-vendor fake-model serial-db6686c8-2dd9-4032-8444-2a06b43baa68 omicron zones at generation 2: @@ -81,16 +81,16 @@ to: blueprint 4171ad05-89dd-474b-846b-b007e4346366 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-2a94863d-16e2-4535-973b-e98dd47fd18d + fake-vendor fake-model serial-32456d15-f5b6-4efc-90c8-dbba979b69cb + fake-vendor fake-model serial-416fe9f9-5161-4b0f-9e11-c9d81563ded5 + fake-vendor fake-model serial-4c68800e-23f8-485b-b251-628fd151e445 + fake-vendor fake-model serial-9dd87c4d-5fb4-475a-86fa-c0da81a3e00a + fake-vendor fake-model serial-be93a517-445e-46c2-aa21-3dc526d4a413 + fake-vendor fake-model serial-d9344e2b-84d2-4392-84ab-41b86ed02237 + fake-vendor fake-model serial-eab188d0-b34a-4673-b254-12e705597654 + fake-vendor fake-model serial-f1e0386f-11b6-4cdf-8250-826d256db6b5 + fake-vendor fake-model serial-f8c9c9a9-d73e-4cdf-a9af-03cfbbbce12b omicron zones at generation 2: @@ -119,16 +119,16 @@ to: blueprint 4171ad05-89dd-474b-846b-b007e4346366 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- -+ fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 -+ fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 -+ fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 -+ fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 -+ fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 -+ fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 -+ fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 -+ fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c -+ fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b -+ fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 ++ fake-vendor fake-model serial-1bb5ee5d-c2c6-4eaa-86c4-817d89cf10cf ++ fake-vendor fake-model serial-298d1eec-0313-4a42-8af9-0e51299a14ef ++ fake-vendor fake-model serial-2eed666f-a10b-42d0-b626-68335d3270b8 ++ fake-vendor fake-model serial-6cc4d7a7-2a89-4f2f-aa55-5e7a10d0fc08 ++ fake-vendor fake-model serial-7aad6fd9-b698-4c77-af6b-947be10ba953 ++ fake-vendor fake-model serial-a5a15e51-c48a-40e4-a2d8-1c7198c1d46b ++ fake-vendor fake-model serial-b81d4993-ea5b-4720-b8c8-2360c1121d6e ++ fake-vendor fake-model serial-d0064c4d-f5f7-4c89-9f37-0ca475048e79 ++ fake-vendor fake-model serial-dba739c1-76e4-4b6a-a173-89c938fa13ef ++ fake-vendor fake-model serial-e6f289fe-142e-4778-8629-dc87adb53f06 omicron zones at generation 2: diff --git a/nexus/reconfigurator/planning/tests/output/planner_basic_add_sled_3_5.txt b/nexus/reconfigurator/planning/tests/output/planner_basic_add_sled_3_5.txt index 5a824edf84..b252a21d7d 100644 --- a/nexus/reconfigurator/planning/tests/output/planner_basic_add_sled_3_5.txt +++ b/nexus/reconfigurator/planning/tests/output/planner_basic_add_sled_3_5.txt @@ -9,16 +9,16 @@ to: blueprint f432fcd5-1284-4058-8b4a-9286a3de6163 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-014eb1e9-04fe-4f36-8339-0a090b053ada + fake-vendor fake-model serial-31a3bc64-7a3b-496d-b644-785dc44b6e37 + fake-vendor fake-model serial-7bb40bd6-9c43-4b63-8337-18313c72aea2 + fake-vendor fake-model serial-988aa8c2-cb5e-406b-9289-425dc2e5bc3a + fake-vendor fake-model serial-ad574c09-2ae0-4534-a2a4-f923ce20ae87 + fake-vendor fake-model serial-ad91e238-4901-4ff4-a91b-75233c936426 + fake-vendor fake-model serial-ce58d463-d442-4c97-a6b4-f7d98c3fd902 + fake-vendor fake-model serial-f18f7689-0059-4b79-880e-34faf7a0fe0e + fake-vendor fake-model serial-f1d6cea4-640f-415e-89fe-2b1784ce3db8 + fake-vendor fake-model serial-f4a96860-bdeb-4435-bdf5-2a10beb3d44a omicron zones at generation 2: @@ -45,16 +45,16 @@ to: blueprint f432fcd5-1284-4058-8b4a-9286a3de6163 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-12057b4a-0b06-4f70-ba22-336de2385bfe + fake-vendor fake-model serial-29758363-6c77-40c3-8740-9c0c64f6e14a + fake-vendor fake-model serial-3f331c10-7882-48ab-85d9-05108490b55b + fake-vendor fake-model serial-5152d1aa-9045-4e06-9ef6-6eadac3696e4 + fake-vendor fake-model serial-5c0dd424-d905-4fc5-a73c-36254fdd470c + fake-vendor fake-model serial-794df76f-bca0-4635-9eb6-773ad0108f7e + fake-vendor fake-model serial-9024d350-38a7-459b-8550-3b2c4a88b5c1 + fake-vendor fake-model serial-95e86080-e162-4980-a589-db6bb1a95ca7 + fake-vendor fake-model serial-d55d36d7-df92-4615-944d-440a1f8b5001 + fake-vendor fake-model serial-db6686c8-2dd9-4032-8444-2a06b43baa68 omicron zones at generation 2: @@ -81,16 +81,16 @@ to: blueprint f432fcd5-1284-4058-8b4a-9286a3de6163 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-2a94863d-16e2-4535-973b-e98dd47fd18d + fake-vendor fake-model serial-32456d15-f5b6-4efc-90c8-dbba979b69cb + fake-vendor fake-model serial-416fe9f9-5161-4b0f-9e11-c9d81563ded5 + fake-vendor fake-model serial-4c68800e-23f8-485b-b251-628fd151e445 + fake-vendor fake-model serial-9dd87c4d-5fb4-475a-86fa-c0da81a3e00a + fake-vendor fake-model serial-be93a517-445e-46c2-aa21-3dc526d4a413 + fake-vendor fake-model serial-d9344e2b-84d2-4392-84ab-41b86ed02237 + fake-vendor fake-model serial-eab188d0-b34a-4673-b254-12e705597654 + fake-vendor fake-model serial-f1e0386f-11b6-4cdf-8250-826d256db6b5 + fake-vendor fake-model serial-f8c9c9a9-d73e-4cdf-a9af-03cfbbbce12b omicron zones at generation 2: @@ -119,16 +119,16 @@ to: blueprint f432fcd5-1284-4058-8b4a-9286a3de6163 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-1bb5ee5d-c2c6-4eaa-86c4-817d89cf10cf + fake-vendor fake-model serial-298d1eec-0313-4a42-8af9-0e51299a14ef + fake-vendor fake-model serial-2eed666f-a10b-42d0-b626-68335d3270b8 + fake-vendor fake-model serial-6cc4d7a7-2a89-4f2f-aa55-5e7a10d0fc08 + fake-vendor fake-model serial-7aad6fd9-b698-4c77-af6b-947be10ba953 + fake-vendor fake-model serial-a5a15e51-c48a-40e4-a2d8-1c7198c1d46b + fake-vendor fake-model serial-b81d4993-ea5b-4720-b8c8-2360c1121d6e + fake-vendor fake-model serial-d0064c4d-f5f7-4c89-9f37-0ca475048e79 + fake-vendor fake-model serial-dba739c1-76e4-4b6a-a173-89c938fa13ef + fake-vendor fake-model serial-e6f289fe-142e-4778-8629-dc87adb53f06 omicron zones generation 2 -> 3: diff --git a/nexus/reconfigurator/planning/tests/output/planner_decommissions_sleds_1_2.txt b/nexus/reconfigurator/planning/tests/output/planner_decommissions_sleds_1_2.txt index 7219c300b7..556ca094e1 100644 --- a/nexus/reconfigurator/planning/tests/output/planner_decommissions_sleds_1_2.txt +++ b/nexus/reconfigurator/planning/tests/output/planner_decommissions_sleds_1_2.txt @@ -9,16 +9,16 @@ to: blueprint 1ac2d88f-27dd-4506-8585-6b2be832528e ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-1e2ec79e-9c11-4133-ac77-e0b994a507d5 + fake-vendor fake-model serial-440ae69d-5e2e-4539-91d0-e2930bdd7203 + fake-vendor fake-model serial-4e91d4a3-bb6c-44bb-bd4e-bf8913c1ba2b + fake-vendor fake-model serial-67de3a80-29cb-4066-b743-e285a2ca1f4e + fake-vendor fake-model serial-9139b70f-c1d3-475d-8f02-7c9acba52b2b + fake-vendor fake-model serial-95fbb110-5272-4646-ab50-21b31b7cde23 + fake-vendor fake-model serial-9bf35cd7-4938-4c34-8189-288b3195cb64 + fake-vendor fake-model serial-9d833141-18a1-4f24-8a34-6076c026aa87 + fake-vendor fake-model serial-a279461f-a7b9-413f-a79f-cb4dab4c3fce + fake-vendor fake-model serial-ff7e002b-3ad8-4d45-b03a-c46ef0ac8e59 omicron zones at generation 2: @@ -47,16 +47,16 @@ to: blueprint 1ac2d88f-27dd-4506-8585-6b2be832528e ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- -- fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 -- fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 -- fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 -- fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 -- fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 -- fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 -- fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 -- fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c -- fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b -- fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 +- fake-vendor fake-model serial-069446b4-7881-49dc-838a-63a782d4896d +- fake-vendor fake-model serial-20eba316-dffe-4516-9703-af561da19b0b +- fake-vendor fake-model serial-426f4b6d-4a82-4106-bf4b-64ee86a2a5a4 +- fake-vendor fake-model serial-82daeef2-8641-4bf5-ac66-f7b5f62c48b6 +- fake-vendor fake-model serial-8e5feeb2-14f1-440f-a909-3c34aa8e129b +- fake-vendor fake-model serial-942e2123-7c4e-4f6b-9317-1341fe212647 +- fake-vendor fake-model serial-97a5ce17-df5b-47e7-baf8-80ae710ce18e +- fake-vendor fake-model serial-debc9fb6-bd58-4e4f-b8b8-6a9a07fcf25d +- fake-vendor fake-model serial-f63a32a9-0659-43cf-8efc-8f34e7af9d45 +- fake-vendor fake-model serial-ffea118f-7715-4e21-8fc5-bb23cd0f59e8 omicron zones generation 2 -> 3: @@ -95,16 +95,16 @@ to: blueprint 1ac2d88f-27dd-4506-8585-6b2be832528e ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-07068f19-1ff2-48da-8e72-874780df2339 + fake-vendor fake-model serial-0f12e6ee-41d2-4eb0-813f-ba5240900ded + fake-vendor fake-model serial-0fdb4a39-3cd5-47a0-9064-e7f3c285af61 + fake-vendor fake-model serial-13572832-83ad-40d6-896a-751f7e53f4f6 + fake-vendor fake-model serial-3602bdd9-f7bb-4490-87a6-8f061f7712f5 + fake-vendor fake-model serial-65707837-95a4-45d7-84e6-8b9a4da215f1 + fake-vendor fake-model serial-7a43b2b0-3846-401c-8317-d555715a00f7 + fake-vendor fake-model serial-855e3ef1-6929-4e21-8451-0e62bd93c7c9 + fake-vendor fake-model serial-8adcf329-4cee-4075-b798-28b5add1edf5 + fake-vendor fake-model serial-99e926d6-bd42-4cde-9f63-5ecc7ea14322 omicron zones generation 2 -> 3: diff --git a/nexus/reconfigurator/planning/tests/output/planner_decommissions_sleds_bp2.txt b/nexus/reconfigurator/planning/tests/output/planner_decommissions_sleds_bp2.txt index 1e1f834d6c..6954d4e12b 100644 --- a/nexus/reconfigurator/planning/tests/output/planner_decommissions_sleds_bp2.txt +++ b/nexus/reconfigurator/planning/tests/output/planner_decommissions_sleds_bp2.txt @@ -7,16 +7,16 @@ parent: 516e80a3-b362-4fac-bd3c-4559717120dd ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-1e2ec79e-9c11-4133-ac77-e0b994a507d5 + fake-vendor fake-model serial-440ae69d-5e2e-4539-91d0-e2930bdd7203 + fake-vendor fake-model serial-4e91d4a3-bb6c-44bb-bd4e-bf8913c1ba2b + fake-vendor fake-model serial-67de3a80-29cb-4066-b743-e285a2ca1f4e + fake-vendor fake-model serial-9139b70f-c1d3-475d-8f02-7c9acba52b2b + fake-vendor fake-model serial-95fbb110-5272-4646-ab50-21b31b7cde23 + fake-vendor fake-model serial-9bf35cd7-4938-4c34-8189-288b3195cb64 + fake-vendor fake-model serial-9d833141-18a1-4f24-8a34-6076c026aa87 + fake-vendor fake-model serial-a279461f-a7b9-413f-a79f-cb4dab4c3fce + fake-vendor fake-model serial-ff7e002b-3ad8-4d45-b03a-c46ef0ac8e59 omicron zones at generation 2: @@ -44,16 +44,16 @@ parent: 516e80a3-b362-4fac-bd3c-4559717120dd ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-07068f19-1ff2-48da-8e72-874780df2339 + fake-vendor fake-model serial-0f12e6ee-41d2-4eb0-813f-ba5240900ded + fake-vendor fake-model serial-0fdb4a39-3cd5-47a0-9064-e7f3c285af61 + fake-vendor fake-model serial-13572832-83ad-40d6-896a-751f7e53f4f6 + fake-vendor fake-model serial-3602bdd9-f7bb-4490-87a6-8f061f7712f5 + fake-vendor fake-model serial-65707837-95a4-45d7-84e6-8b9a4da215f1 + fake-vendor fake-model serial-7a43b2b0-3846-401c-8317-d555715a00f7 + fake-vendor fake-model serial-855e3ef1-6929-4e21-8451-0e62bd93c7c9 + fake-vendor fake-model serial-8adcf329-4cee-4075-b798-28b5add1edf5 + fake-vendor fake-model serial-99e926d6-bd42-4cde-9f63-5ecc7ea14322 omicron zones at generation 3: diff --git a/nexus/reconfigurator/planning/tests/output/planner_nonprovisionable_1_2.txt b/nexus/reconfigurator/planning/tests/output/planner_nonprovisionable_1_2.txt index be2bf3c248..d3f667170c 100644 --- a/nexus/reconfigurator/planning/tests/output/planner_nonprovisionable_1_2.txt +++ b/nexus/reconfigurator/planning/tests/output/planner_nonprovisionable_1_2.txt @@ -9,16 +9,16 @@ to: blueprint 9f71f5d3-a272-4382-9154-6ea2e171a6c6 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-13e6503b-5300-4ccd-abc4-c1512b435929 + fake-vendor fake-model serial-44cdb6f2-fa6c-4b69-bab2-3ae4e1ec4b34 + fake-vendor fake-model serial-4de5fc8e-0e41-4ab9-ba12-2dc63882c96a + fake-vendor fake-model serial-51564e7a-d69f-4942-bcfe-330224633ca6 + fake-vendor fake-model serial-5ca23cb3-cc90-41c5-a474-01898cdd0796 + fake-vendor fake-model serial-6a23a532-0712-4a8d-be9b-e8c17e97aa4b + fake-vendor fake-model serial-6f1a330e-e8d4-4c09-97fc-8918b69b2a3c + fake-vendor fake-model serial-7113d104-fb55-4299-bf53-b3c59d258e44 + fake-vendor fake-model serial-8c10be49-3a66-40d4-a082-64d09d916f14 + fake-vendor fake-model serial-d1ebfd7b-3842-4ad7-be31-2b9c031209a9 omicron zones at generation 2: @@ -47,16 +47,16 @@ to: blueprint 9f71f5d3-a272-4382-9154-6ea2e171a6c6 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- -- fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 -- fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 -- fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 -- fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 -- fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 -- fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 -- fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 -- fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c -- fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b -- fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 +- fake-vendor fake-model serial-22930645-144a-415c-bceb-2dbfafb9c29e +- fake-vendor fake-model serial-24155070-8a43-4244-a3ba-853d8c71972d +- fake-vendor fake-model serial-494782c7-3821-4f49-918b-ce42cc4d18ad +- fake-vendor fake-model serial-6ea8a67f-d27d-472b-844c-6c8245b00e2b +- fake-vendor fake-model serial-77565d57-c235-4905-b3c7-32d1c2ca2c44 +- fake-vendor fake-model serial-8746874c-dc3b-4454-93cd-2a8fc13720fe +- fake-vendor fake-model serial-a42c5a67-6e10-4586-a56e-48bb8260e75f +- fake-vendor fake-model serial-ca89b120-7bcd-4eeb-baa7-71031fbd103b +- fake-vendor fake-model serial-ef61aa97-c862-428c-82f3-0a69a50d6155 +- fake-vendor fake-model serial-ef64ff6d-250d-47ac-8686-e696cfb46966 omicron zones generation 2 -> 3: @@ -95,16 +95,16 @@ to: blueprint 9f71f5d3-a272-4382-9154-6ea2e171a6c6 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- -- fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 -- fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 -- fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 -- fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 -- fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 -- fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 -- fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 -- fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c -- fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b -- fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 +- fake-vendor fake-model serial-09a5de95-c15f-486e-b776-fca62bf5e179 +- fake-vendor fake-model serial-11b8eccf-7c78-4bde-8639-b35a83082a95 +- fake-vendor fake-model serial-1931c422-4c6a-4597-8ae7-ecb44718462c +- fake-vendor fake-model serial-21a8a87e-73a4-42d4-a426-f6eec94004e3 +- fake-vendor fake-model serial-222c0b55-2966-46b6-816c-9063a7587806 +- fake-vendor fake-model serial-3676f688-f41c-4f89-936a-6b04c3011b2a +- fake-vendor fake-model serial-5e9e14c4-d60d-4b5c-a11c-bba54eb24c9f +- fake-vendor fake-model serial-74f7b89e-88f5-4336-ba8b-22283a6966c5 +- fake-vendor fake-model serial-a787cac8-b5e3-49e3-aaab-20d8eadd8a63 +- fake-vendor fake-model serial-d56b0c9f-0e57-43d8-a1ac-8b4d2c303c29 omicron zones at generation 2: @@ -131,16 +131,16 @@ to: blueprint 9f71f5d3-a272-4382-9154-6ea2e171a6c6 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-4069c804-c51a-4adc-8822-3cbbab56ed3f + fake-vendor fake-model serial-5248a306-4a03-449e-a8a3-6f86d26da755 + fake-vendor fake-model serial-55196665-ed61-4b23-9a74-0711bf2eaf90 + fake-vendor fake-model serial-6b2a719a-35eb-469f-aa54-114a1f21f37d + fake-vendor fake-model serial-7ed4296a-66d1-4fb2-bc56-9b23b8f27d7e + fake-vendor fake-model serial-984e2389-e7fd-4af9-ab02-e3caf77f95b5 + fake-vendor fake-model serial-a5f75431-3795-426c-8f80-176f658281a5 + fake-vendor fake-model serial-cf32a1ce-2c9e-49f5-b1cf-4af7f2a28901 + fake-vendor fake-model serial-e405da11-cb6b-4ebc-bac1-9bc997352e10 + fake-vendor fake-model serial-f4d7f914-ec73-4b65-8696-5068591d9065 omicron zones generation 2 -> 3: @@ -170,16 +170,16 @@ to: blueprint 9f71f5d3-a272-4382-9154-6ea2e171a6c6 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-33d48d85-751e-4982-b738-eae4d9a05f01 + fake-vendor fake-model serial-39ca2e23-4c38-4743-afe0-26b0380b27db + fake-vendor fake-model serial-4fbd2fe0-2eac-41b8-8e8d-4fa46c3e8b6c + fake-vendor fake-model serial-60131a33-1f12-4dbb-9435-bdd368db1f51 + fake-vendor fake-model serial-77e45b5b-869f-4e78-8ce3-28bbe8cf37e9 + fake-vendor fake-model serial-789d607d-d196-428e-a988-f7886a327859 + fake-vendor fake-model serial-b104b94c-2197-4e76-bfbd-6f966bd5af66 + fake-vendor fake-model serial-cd62306a-aedf-47e8-93d5-92a358d64c7b + fake-vendor fake-model serial-f1693454-aac1-4265-b8a0-4e9f3f41c7b3 + fake-vendor fake-model serial-fe4fdfba-3b6d-47d3-8612-1fb2390b650a omicron zones generation 2 -> 3: diff --git a/nexus/reconfigurator/planning/tests/output/planner_nonprovisionable_2_2a.txt b/nexus/reconfigurator/planning/tests/output/planner_nonprovisionable_2_2a.txt index 262bd14811..4d366f849c 100644 --- a/nexus/reconfigurator/planning/tests/output/planner_nonprovisionable_2_2a.txt +++ b/nexus/reconfigurator/planning/tests/output/planner_nonprovisionable_2_2a.txt @@ -9,16 +9,16 @@ to: blueprint 9f71f5d3-a272-4382-9154-6ea2e171a6c6 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-4069c804-c51a-4adc-8822-3cbbab56ed3f + fake-vendor fake-model serial-5248a306-4a03-449e-a8a3-6f86d26da755 + fake-vendor fake-model serial-55196665-ed61-4b23-9a74-0711bf2eaf90 + fake-vendor fake-model serial-6b2a719a-35eb-469f-aa54-114a1f21f37d + fake-vendor fake-model serial-7ed4296a-66d1-4fb2-bc56-9b23b8f27d7e + fake-vendor fake-model serial-984e2389-e7fd-4af9-ab02-e3caf77f95b5 + fake-vendor fake-model serial-a5f75431-3795-426c-8f80-176f658281a5 + fake-vendor fake-model serial-cf32a1ce-2c9e-49f5-b1cf-4af7f2a28901 + fake-vendor fake-model serial-e405da11-cb6b-4ebc-bac1-9bc997352e10 + fake-vendor fake-model serial-f4d7f914-ec73-4b65-8696-5068591d9065 omicron zones at generation 3: @@ -48,16 +48,16 @@ to: blueprint 9f71f5d3-a272-4382-9154-6ea2e171a6c6 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-33d48d85-751e-4982-b738-eae4d9a05f01 + fake-vendor fake-model serial-39ca2e23-4c38-4743-afe0-26b0380b27db + fake-vendor fake-model serial-4fbd2fe0-2eac-41b8-8e8d-4fa46c3e8b6c + fake-vendor fake-model serial-60131a33-1f12-4dbb-9435-bdd368db1f51 + fake-vendor fake-model serial-77e45b5b-869f-4e78-8ce3-28bbe8cf37e9 + fake-vendor fake-model serial-789d607d-d196-428e-a988-f7886a327859 + fake-vendor fake-model serial-b104b94c-2197-4e76-bfbd-6f966bd5af66 + fake-vendor fake-model serial-cd62306a-aedf-47e8-93d5-92a358d64c7b + fake-vendor fake-model serial-f1693454-aac1-4265-b8a0-4e9f3f41c7b3 + fake-vendor fake-model serial-fe4fdfba-3b6d-47d3-8612-1fb2390b650a omicron zones at generation 3: @@ -111,16 +111,16 @@ to: blueprint 9f71f5d3-a272-4382-9154-6ea2e171a6c6 ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-13e6503b-5300-4ccd-abc4-c1512b435929 + fake-vendor fake-model serial-44cdb6f2-fa6c-4b69-bab2-3ae4e1ec4b34 + fake-vendor fake-model serial-4de5fc8e-0e41-4ab9-ba12-2dc63882c96a + fake-vendor fake-model serial-51564e7a-d69f-4942-bcfe-330224633ca6 + fake-vendor fake-model serial-5ca23cb3-cc90-41c5-a474-01898cdd0796 + fake-vendor fake-model serial-6a23a532-0712-4a8d-be9b-e8c17e97aa4b + fake-vendor fake-model serial-6f1a330e-e8d4-4c09-97fc-8918b69b2a3c + fake-vendor fake-model serial-7113d104-fb55-4299-bf53-b3c59d258e44 + fake-vendor fake-model serial-8c10be49-3a66-40d4-a082-64d09d916f14 + fake-vendor fake-model serial-d1ebfd7b-3842-4ad7-be31-2b9c031209a9 omicron zones at generation 2: diff --git a/nexus/reconfigurator/planning/tests/output/planner_nonprovisionable_bp2.txt b/nexus/reconfigurator/planning/tests/output/planner_nonprovisionable_bp2.txt index 07bf7673c0..5a2ed5a28a 100644 --- a/nexus/reconfigurator/planning/tests/output/planner_nonprovisionable_bp2.txt +++ b/nexus/reconfigurator/planning/tests/output/planner_nonprovisionable_bp2.txt @@ -7,16 +7,16 @@ parent: 4d4e6c38-cd95-4c4e-8f45-6af4d686964b ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-13e6503b-5300-4ccd-abc4-c1512b435929 + fake-vendor fake-model serial-44cdb6f2-fa6c-4b69-bab2-3ae4e1ec4b34 + fake-vendor fake-model serial-4de5fc8e-0e41-4ab9-ba12-2dc63882c96a + fake-vendor fake-model serial-51564e7a-d69f-4942-bcfe-330224633ca6 + fake-vendor fake-model serial-5ca23cb3-cc90-41c5-a474-01898cdd0796 + fake-vendor fake-model serial-6a23a532-0712-4a8d-be9b-e8c17e97aa4b + fake-vendor fake-model serial-6f1a330e-e8d4-4c09-97fc-8918b69b2a3c + fake-vendor fake-model serial-7113d104-fb55-4299-bf53-b3c59d258e44 + fake-vendor fake-model serial-8c10be49-3a66-40d4-a082-64d09d916f14 + fake-vendor fake-model serial-d1ebfd7b-3842-4ad7-be31-2b9c031209a9 omicron zones at generation 2: @@ -44,16 +44,16 @@ parent: 4d4e6c38-cd95-4c4e-8f45-6af4d686964b ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-4069c804-c51a-4adc-8822-3cbbab56ed3f + fake-vendor fake-model serial-5248a306-4a03-449e-a8a3-6f86d26da755 + fake-vendor fake-model serial-55196665-ed61-4b23-9a74-0711bf2eaf90 + fake-vendor fake-model serial-6b2a719a-35eb-469f-aa54-114a1f21f37d + fake-vendor fake-model serial-7ed4296a-66d1-4fb2-bc56-9b23b8f27d7e + fake-vendor fake-model serial-984e2389-e7fd-4af9-ab02-e3caf77f95b5 + fake-vendor fake-model serial-a5f75431-3795-426c-8f80-176f658281a5 + fake-vendor fake-model serial-cf32a1ce-2c9e-49f5-b1cf-4af7f2a28901 + fake-vendor fake-model serial-e405da11-cb6b-4ebc-bac1-9bc997352e10 + fake-vendor fake-model serial-f4d7f914-ec73-4b65-8696-5068591d9065 omicron zones at generation 3: @@ -84,16 +84,16 @@ parent: 4d4e6c38-cd95-4c4e-8f45-6af4d686964b ---------------------------------------------------------------------- vendor model serial ---------------------------------------------------------------------- - fake-vendor fake-model serial-088f76ef-e985-41fd-8630-c321ed8cca37 - fake-vendor fake-model serial-30d0e693-dec4-402f-baa0-d6d9a93c98a7 - fake-vendor fake-model serial-32e90a17-7080-4c33-a94d-05f4bfb5d368 - fake-vendor fake-model serial-44473266-e28a-43fa-9314-c3416b8b3c14 - fake-vendor fake-model serial-53372ece-d666-4f5b-8f25-286e36242088 - fake-vendor fake-model serial-795061c9-db7b-404a-a2a3-0dad5fdfceb1 - fake-vendor fake-model serial-7b8bc126-4ff8-434f-a949-e98eda2709a5 - fake-vendor fake-model serial-b644318e-da11-46e1-b650-47a067e6024c - fake-vendor fake-model serial-bb2b397b-a3f5-4142-a433-4f2ab5fe284b - fake-vendor fake-model serial-bdbf1352-725d-4b17-98d5-4d7105726721 + fake-vendor fake-model serial-33d48d85-751e-4982-b738-eae4d9a05f01 + fake-vendor fake-model serial-39ca2e23-4c38-4743-afe0-26b0380b27db + fake-vendor fake-model serial-4fbd2fe0-2eac-41b8-8e8d-4fa46c3e8b6c + fake-vendor fake-model serial-60131a33-1f12-4dbb-9435-bdd368db1f51 + fake-vendor fake-model serial-77e45b5b-869f-4e78-8ce3-28bbe8cf37e9 + fake-vendor fake-model serial-789d607d-d196-428e-a988-f7886a327859 + fake-vendor fake-model serial-b104b94c-2197-4e76-bfbd-6f966bd5af66 + fake-vendor fake-model serial-cd62306a-aedf-47e8-93d5-92a358d64c7b + fake-vendor fake-model serial-f1693454-aac1-4265-b8a0-4e9f3f41c7b3 + fake-vendor fake-model serial-fe4fdfba-3b6d-47d3-8612-1fb2390b650a omicron zones at generation 3: diff --git a/nexus/reconfigurator/preparation/src/lib.rs b/nexus/reconfigurator/preparation/src/lib.rs index 24e9afddf8..68971ec3e1 100644 --- a/nexus/reconfigurator/preparation/src/lib.rs +++ b/nexus/reconfigurator/preparation/src/lib.rs @@ -33,6 +33,7 @@ use nexus_types::identity::Resource; use nexus_types::inventory::Collection; use omicron_common::address::IpRange; use omicron_common::address::Ipv6Subnet; +use omicron_common::address::COCKROACHDB_REDUNDANCY; use omicron_common::address::NEXUS_REDUNDANCY; use omicron_common::address::SLED_PREFIX; use omicron_common::api::external::Error; @@ -60,6 +61,7 @@ pub struct PlanningInputFromDb<'a> { pub external_ip_rows: &'a [nexus_db_model::ExternalIp], pub service_nic_rows: &'a [nexus_db_model::ServiceNetworkInterface], pub target_nexus_zone_count: usize, + pub target_cockroachdb_zone_count: usize, pub target_cockroachdb_cluster_version: CockroachDbClusterVersion, pub internal_dns_version: nexus_db_model::Generation, pub external_dns_version: nexus_db_model::Generation, @@ -74,6 +76,7 @@ impl PlanningInputFromDb<'_> { let policy = Policy { service_ip_pool_ranges, target_nexus_zone_count: self.target_nexus_zone_count, + target_cockroachdb_zone_count: self.target_cockroachdb_zone_count, target_cockroachdb_cluster_version: self .target_cockroachdb_cluster_version, }; @@ -234,6 +237,7 @@ pub async fn reconfigurator_state_load( zpool_rows: &zpool_rows, ip_pool_range_rows: &ip_pool_range_rows, target_nexus_zone_count: NEXUS_REDUNDANCY, + target_cockroachdb_zone_count: COCKROACHDB_REDUNDANCY, target_cockroachdb_cluster_version: CockroachDbClusterVersion::POLICY, external_ip_rows: &external_ip_rows, service_nic_rows: &service_nic_rows, diff --git a/nexus/src/app/deployment.rs b/nexus/src/app/deployment.rs index 280f4306c7..ca4635b13e 100644 --- a/nexus/src/app/deployment.rs +++ b/nexus/src/app/deployment.rs @@ -17,6 +17,7 @@ use nexus_types::deployment::CockroachDbClusterVersion; use nexus_types::deployment::PlanningInput; use nexus_types::deployment::SledFilter; use nexus_types::inventory::Collection; +use omicron_common::address::COCKROACHDB_REDUNDANCY; use omicron_common::address::NEXUS_REDUNDANCY; use omicron_common::api::external::CreateResult; use omicron_common::api::external::DataPageParams; @@ -175,6 +176,7 @@ impl super::Nexus { external_ip_rows: &external_ip_rows, service_nic_rows: &service_nic_rows, target_nexus_zone_count: NEXUS_REDUNDANCY, + target_cockroachdb_zone_count: COCKROACHDB_REDUNDANCY, target_cockroachdb_cluster_version: CockroachDbClusterVersion::POLICY, log: &opctx.log, diff --git a/nexus/types/src/deployment.rs b/nexus/types/src/deployment.rs index 4fcd49a254..d64cde2d06 100644 --- a/nexus/types/src/deployment.rs +++ b/nexus/types/src/deployment.rs @@ -33,7 +33,6 @@ use schemars::JsonSchema; use serde::Deserialize; use serde::Serialize; use sled_agent_client::types::OmicronPhysicalDisksConfig; -use sled_agent_client::ZoneKind; use slog_error_chain::SlogInlineError; use std::collections::BTreeMap; use std::collections::BTreeSet; @@ -75,6 +74,7 @@ pub use planning_input::SledDisk; pub use planning_input::SledFilter; pub use planning_input::SledResources; pub use planning_input::ZpoolFilter; +pub use sled_agent_client::ZoneKind; pub use zone_type::blueprint_zone_type; pub use zone_type::BlueprintZoneType; diff --git a/nexus/types/src/deployment/planning_input.rs b/nexus/types/src/deployment/planning_input.rs index bb74c3655e..10d528bbfd 100644 --- a/nexus/types/src/deployment/planning_input.rs +++ b/nexus/types/src/deployment/planning_input.rs @@ -91,6 +91,10 @@ impl PlanningInput { self.policy.target_nexus_zone_count } + pub fn target_cockroachdb_zone_count(&self) -> usize { + self.policy.target_cockroachdb_zone_count + } + pub fn target_cockroachdb_cluster_version( &self, ) -> CockroachDbClusterVersion { @@ -632,6 +636,9 @@ pub struct Policy { /// desired total number of deployed Nexus zones pub target_nexus_zone_count: usize, + /// desired total number of deployed CockroachDB zones + pub target_cockroachdb_zone_count: usize, + /// desired CockroachDB `cluster.preserve_downgrade_option` setting. /// at present this is hardcoded based on the version of CockroachDB we /// presently ship and the tick-tock pattern described in RFD 469. @@ -684,6 +691,7 @@ impl PlanningInputBuilder { policy: Policy { service_ip_pool_ranges: Vec::new(), target_nexus_zone_count: 0, + target_cockroachdb_zone_count: 0, target_cockroachdb_cluster_version: CockroachDbClusterVersion::POLICY, }, diff --git a/nexus/types/src/deployment/zone_type.rs b/nexus/types/src/deployment/zone_type.rs index 5b14f1ee3c..dc0fd98129 100644 --- a/nexus/types/src/deployment/zone_type.rs +++ b/nexus/types/src/deployment/zone_type.rs @@ -13,6 +13,7 @@ use omicron_common::api::internal::shared::NetworkInterface; use schemars::JsonSchema; use serde::Deserialize; use serde::Serialize; +use sled_agent_client::types::OmicronZoneDataset; use sled_agent_client::types::OmicronZoneType; use sled_agent_client::ZoneKind; @@ -139,6 +140,41 @@ impl BlueprintZoneType { | BlueprintZoneType::Oximeter(_) => false, } } + + // Returns the dataset associated with this zone. + // + // TODO-cleanup This currently returns `None` for zones that only have + // transient datasets. This should change to a non-optional value once Nexus + // is aware of them. + pub fn dataset(&self) -> Option<&OmicronZoneDataset> { + match self { + BlueprintZoneType::Clickhouse( + blueprint_zone_type::Clickhouse { dataset, .. }, + ) + | BlueprintZoneType::ClickhouseKeeper( + blueprint_zone_type::ClickhouseKeeper { dataset, .. }, + ) + | BlueprintZoneType::CockroachDb( + blueprint_zone_type::CockroachDb { dataset, .. }, + ) + | BlueprintZoneType::Crucible(blueprint_zone_type::Crucible { + dataset, + .. + }) + | BlueprintZoneType::ExternalDns( + blueprint_zone_type::ExternalDns { dataset, .. }, + ) + | BlueprintZoneType::InternalDns( + blueprint_zone_type::InternalDns { dataset, .. }, + ) => Some(dataset), + // Transient-dataset-only zones + BlueprintZoneType::BoundaryNtp(_) + | BlueprintZoneType::CruciblePantry(_) + | BlueprintZoneType::InternalNtp(_) + | BlueprintZoneType::Nexus(_) + | BlueprintZoneType::Oximeter(_) => None, + } + } } impl From for OmicronZoneType { diff --git a/sled-agent/src/rack_setup/plan/service.rs b/sled-agent/src/rack_setup/plan/service.rs index b48e4f18b8..8499a0000c 100644 --- a/sled-agent/src/rack_setup/plan/service.rs +++ b/sled-agent/src/rack_setup/plan/service.rs @@ -17,9 +17,9 @@ use internal_dns::config::{Host, Zone}; use internal_dns::ServiceName; use omicron_common::address::{ get_sled_address, get_switch_zone_address, Ipv6Subnet, ReservedRackSubnet, - DENDRITE_PORT, DNS_HTTP_PORT, DNS_PORT, DNS_REDUNDANCY, MAX_DNS_REDUNDANCY, - MGD_PORT, MGS_PORT, NEXUS_REDUNDANCY, NTP_PORT, NUM_SOURCE_NAT_PORTS, - RSS_RESERVED_ADDRESSES, SLED_PREFIX, + COCKROACHDB_REDUNDANCY, DENDRITE_PORT, DNS_HTTP_PORT, DNS_PORT, + DNS_REDUNDANCY, MAX_DNS_REDUNDANCY, MGD_PORT, MGS_PORT, NEXUS_REDUNDANCY, + NTP_PORT, NUM_SOURCE_NAT_PORTS, RSS_RESERVED_ADDRESSES, SLED_PREFIX, }; use omicron_common::api::external::{Generation, MacAddr, Vni}; use omicron_common::api::internal::shared::{ @@ -48,9 +48,6 @@ use uuid::Uuid; // The number of boundary NTP servers to create from RSS. const BOUNDARY_NTP_COUNT: usize = 2; -// The number of CRDB instances to create from RSS. -const CRDB_COUNT: usize = 5; - // TODO(https://github.com/oxidecomputer/omicron/issues/732): Remove // when Nexus provisions Oximeter. const OXIMETER_COUNT: usize = 1; @@ -426,7 +423,7 @@ impl Plan { } // Provision CockroachDB zones, continuing to stripe across Sleds. - for _ in 0..CRDB_COUNT { + for _ in 0..COCKROACHDB_REDUNDANCY { let sled = { let which_sled = sled_allocator.next().ok_or(PlanError::NotEnoughSleds)?;