From 85150a7436bb6dfa12f98bf843956e1a4fb9ddab Mon Sep 17 00:00:00 2001 From: John Gallagher Date: Tue, 12 Mar 2024 20:07:00 -0400 Subject: [PATCH] Split out a `sled-hardware-types` crate (#5245) On main as of #5158, we unexpectedly get some binaries depending on `libnvme` that shouldn't. In release builds: ``` installinator omicron-dev omicron-package services-ledger-check-migrate sled-agent sled-agent-sim wicketd ``` and in debug builds, all of the above plus `omdb`. We don't really care about this for binaries that don't run on the rack, so stripping the list down to binaries we do care about: ``` installinator omdb (debug only) sled-agent wicketd ``` It's correct and expected that installinator and sled-agent depend on libnvme, but omdb shouldn't (and doesn't in release), and wicketd _must not_, as libnvme isn't available in the switch zone. This PR fixes that incorrect dependency by splitting the parts of the `sled-hardware` crate that wicketd and omdb depended on (directly or transitively) into a new `sled-hardware-types` crate. On this PR, we are left with only the following needing libnvme, in both debug and release: ``` installinator omicron-dev omicron-package services-ledger-check-migrate sled-agent sled-agent-sim ``` I assume with a bit more work we could trim out everything but `installinator` and `sled-agent`, and that might be worth doing, but we'd like to land this ASAP so as to not break any updates performed off of `main`. Separately, we could also imagine a CI check that we don't have unexpected library dependencies present in the final binaries; @papertigers is going to work on that. --- Cargo.lock | 24 ++++- Cargo.toml | 3 + bootstore/Cargo.toml | 2 +- bootstore/src/schemes/v0/fsm.rs | 2 +- bootstore/src/schemes/v0/messages.rs | 2 +- bootstore/src/schemes/v0/peer.rs | 2 +- bootstore/src/schemes/v0/peer_networking.rs | 2 +- bootstore/src/schemes/v0/request_manager.rs | 2 +- bootstore/src/schemes/v0/share_pkg.rs | 2 +- bootstore/src/schemes/v0/storage.rs | 2 +- bootstore/tests/common/generators.rs | 2 +- bootstore/tests/common/mod.rs | 2 +- bootstore/tests/v0-fsm-proptest-learner.rs | 2 +- .../tests/v0-fsm-proptest-rack-coordinator.rs | 2 +- clients/bootstrap-agent-client/Cargo.toml | 2 +- clients/bootstrap-agent-client/src/lib.rs | 22 +++-- clients/ddm-admin-client/Cargo.toml | 2 +- clients/ddm-admin-client/src/lib.rs | 6 +- clients/mg-admin-client/Cargo.toml | 1 - dev-tools/omdb/Cargo.toml | 2 +- dev-tools/omdb/src/bin/omdb/db.rs | 2 +- installinator/Cargo.toml | 1 + installinator/src/bootstrap.rs | 2 +- installinator/src/peers.rs | 2 +- sled-agent/Cargo.toml | 1 + sled-agent/src/bin/sled-agent-sim.rs | 2 +- sled-agent/src/bootstrap/bootstore_setup.rs | 4 +- sled-agent/src/bootstrap/http_entrypoints.rs | 2 +- sled-agent/src/bootstrap/params.rs | 2 +- sled-agent/src/bootstrap/pre_server.rs | 5 +- sled-agent/src/hardware_monitor.rs | 3 +- sled-agent/src/metrics.rs | 2 +- sled-agent/src/nexus.rs | 6 +- sled-agent/src/params.rs | 2 +- sled-agent/src/rack_setup/service.rs | 2 +- sled-agent/src/services.rs | 4 +- sled-agent/src/sim/config.rs | 2 +- sled-agent/src/sled_agent.rs | 8 +- sled-hardware/Cargo.toml | 1 + sled-hardware/src/illumos/mod.rs | 4 +- sled-hardware/src/lib.rs | 89 ----------------- sled-hardware/src/non_illumos/mod.rs | 3 +- sled-hardware/src/underlay.rs | 66 ------------- sled-hardware/types/Cargo.toml | 15 +++ sled-hardware/types/src/lib.rs | 97 +++++++++++++++++++ sled-hardware/types/src/underlay.rs | 72 ++++++++++++++ wicketd/Cargo.toml | 2 +- wicketd/src/bin/wicketd.rs | 2 +- wicketd/src/bootstrap_addrs.rs | 4 +- wicketd/src/context.rs | 2 +- wicketd/src/http_entrypoints.rs | 2 +- wicketd/src/lib.rs | 2 +- wicketd/src/rss_config.rs | 2 +- 53 files changed, 279 insertions(+), 222 deletions(-) create mode 100644 sled-hardware/types/Cargo.toml create mode 100644 sled-hardware/types/src/lib.rs create mode 100644 sled-hardware/types/src/underlay.rs diff --git a/Cargo.lock b/Cargo.lock index e50918bba5..0d10f6b675 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -637,7 +637,7 @@ dependencies = [ "serde", "serde_with", "sha3", - "sled-hardware", + "sled-hardware-types", "slog", "slog-async", "slog-term", @@ -660,7 +660,7 @@ dependencies = [ "reqwest", "schemars", "serde", - "sled-hardware", + "sled-hardware-types", "slog", "uuid", ] @@ -1595,7 +1595,7 @@ dependencies = [ "rustfmt-wrapper", "serde", "serde_json", - "sled-hardware", + "sled-hardware-types", "slog", "thiserror", "tokio", @@ -3556,6 +3556,7 @@ dependencies = [ "reqwest", "sha2", "sled-hardware", + "sled-hardware-types", "sled-storage", "slog", "slog-async", @@ -4181,7 +4182,6 @@ dependencies = [ "rustfmt-wrapper", "serde", "serde_json", - "sled-hardware", "slog", "thiserror", "tokio", @@ -5447,6 +5447,7 @@ dependencies = [ "sha3", "sled-agent-client", "sled-hardware", + "sled-hardware-types", "sled-storage", "slog", "slog-async", @@ -8346,6 +8347,7 @@ dependencies = [ "rand 0.8.5", "schemars", "serde", + "sled-hardware-types", "slog", "slog-error-chain", "thiserror", @@ -8354,6 +8356,18 @@ dependencies = [ "uuid", ] +[[package]] +name = "sled-hardware-types" +version = "0.1.0" +dependencies = [ + "illumos-utils", + "macaddr", + "omicron-common", + "omicron-workspace-hack", + "schemars", + "serde", +] + [[package]] name = "sled-storage" version = "0.1.0" @@ -10623,7 +10637,7 @@ dependencies = [ "serde", "serde_json", "sha2", - "sled-hardware", + "sled-hardware-types", "slog", "slog-dtrace", "subprocess", diff --git a/Cargo.toml b/Cargo.toml index 45c45c9d56..733eee1b32 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -64,6 +64,7 @@ members = [ "rpaths", "sled-agent", "sled-hardware", + "sled-hardware/types", "sled-storage", "sp-sim", "test-utils", @@ -142,6 +143,7 @@ default-members = [ "rpaths", "sled-agent", "sled-hardware", + "sled-hardware/types", "sled-storage", "sp-sim", "test-utils", @@ -373,6 +375,7 @@ similar-asserts = "1.5.0" sled = "0.34" sled-agent-client = { path = "clients/sled-agent-client" } sled-hardware = { path = "sled-hardware" } +sled-hardware-types = { path = "sled-hardware/types" } sled-storage = { path = "sled-storage" } slog = { version = "2.7", features = [ "dynamic-keys", "max_level_trace", "release_max_level_debug" ] } slog-async = "2.8" diff --git a/bootstore/Cargo.toml b/bootstore/Cargo.toml index 37280f6dcb..5e9bcd1ef4 100644 --- a/bootstore/Cargo.toml +++ b/bootstore/Cargo.toml @@ -22,7 +22,7 @@ secrecy.workspace = true serde.workspace = true serde_with.workspace = true sha3.workspace = true -sled-hardware.workspace = true +sled-hardware-types.workspace = true slog.workspace = true thiserror.workspace = true tokio.workspace = true diff --git a/bootstore/src/schemes/v0/fsm.rs b/bootstore/src/schemes/v0/fsm.rs index 6382ca7df1..4f2bcc2d11 100644 --- a/bootstore/src/schemes/v0/fsm.rs +++ b/bootstore/src/schemes/v0/fsm.rs @@ -23,7 +23,7 @@ use secrecy::ExposeSecret; use serde::{Deserialize, Serialize}; use serde_with::serde_as; use sha3::{Digest, Sha3_256}; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use std::collections::{BTreeMap, BTreeSet}; use std::fmt::Debug; use std::time::Instant; diff --git a/bootstore/src/schemes/v0/messages.rs b/bootstore/src/schemes/v0/messages.rs index db6ec4f281..a524df5c88 100644 --- a/bootstore/src/schemes/v0/messages.rs +++ b/bootstore/src/schemes/v0/messages.rs @@ -7,7 +7,7 @@ use super::{LearnedSharePkg, RackUuid, Share, SharePkg}; use derive_more::From; use serde::{Deserialize, Serialize}; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use std::net::SocketAddrV6; use thiserror::Error; use uuid::Uuid; diff --git a/bootstore/src/schemes/v0/peer.rs b/bootstore/src/schemes/v0/peer.rs index 1175e64143..efb916a61f 100644 --- a/bootstore/src/schemes/v0/peer.rs +++ b/bootstore/src/schemes/v0/peer.rs @@ -14,7 +14,7 @@ use super::{ApiError, ApiOutput, Fsm, FsmConfig, RackUuid}; use crate::trust_quorum::RackSecret; use camino::Utf8PathBuf; use derive_more::From; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use slog::{error, info, o, warn, Logger}; use std::collections::{BTreeMap, BTreeSet}; use std::net::{SocketAddr, SocketAddrV6}; diff --git a/bootstore/src/schemes/v0/peer_networking.rs b/bootstore/src/schemes/v0/peer_networking.rs index 33673cdab8..13afd27fa2 100644 --- a/bootstore/src/schemes/v0/peer_networking.rs +++ b/bootstore/src/schemes/v0/peer_networking.rs @@ -11,7 +11,7 @@ use crate::schemes::Hello; use bytes::Buf; use derive_more::From; use serde::{Deserialize, Serialize}; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use slog::{debug, error, info, o, warn, Logger}; use std::collections::VecDeque; use std::io::Cursor; diff --git a/bootstore/src/schemes/v0/request_manager.rs b/bootstore/src/schemes/v0/request_manager.rs index 90466fdc07..2ad907aaa1 100644 --- a/bootstore/src/schemes/v0/request_manager.rs +++ b/bootstore/src/schemes/v0/request_manager.rs @@ -7,7 +7,7 @@ use super::{ Envelope, FsmConfig, Msg, RackUuid, Request, RequestType, Share, SharePkg, }; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use std::collections::{BTreeMap, BTreeSet}; use std::time::Instant; use uuid::Uuid; diff --git a/bootstore/src/schemes/v0/share_pkg.rs b/bootstore/src/schemes/v0/share_pkg.rs index 2446f1904d..f89d5b7313 100644 --- a/bootstore/src/schemes/v0/share_pkg.rs +++ b/bootstore/src/schemes/v0/share_pkg.rs @@ -12,7 +12,7 @@ use rand::{rngs::OsRng, RngCore}; use secrecy::{ExposeSecret, Secret}; use serde::{Deserialize, Serialize}; use sha3::{Digest, Sha3_256}; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use std::collections::BTreeSet; use std::fmt; use uuid::Uuid; diff --git a/bootstore/src/schemes/v0/storage.rs b/bootstore/src/schemes/v0/storage.rs index 327acc6058..624d0ee6ed 100644 --- a/bootstore/src/schemes/v0/storage.rs +++ b/bootstore/src/schemes/v0/storage.rs @@ -15,7 +15,7 @@ use super::{Fsm, FsmConfig, State}; use camino::Utf8PathBuf; use omicron_common::ledger::{Ledger, Ledgerable}; use serde::{Deserialize, Serialize}; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use slog::{info, Logger}; /// A persistent version of `Fsm::State` diff --git a/bootstore/tests/common/generators.rs b/bootstore/tests/common/generators.rs index 1760aefc96..4f1a2fdbc9 100644 --- a/bootstore/tests/common/generators.rs +++ b/bootstore/tests/common/generators.rs @@ -6,7 +6,7 @@ use bootstore::schemes::v0::{FsmConfig, MsgError}; use proptest::prelude::*; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use std::collections::BTreeSet; use std::ops::RangeInclusive; use std::time::Duration; diff --git a/bootstore/tests/common/mod.rs b/bootstore/tests/common/mod.rs index 0cff91cfa0..ed396efde5 100644 --- a/bootstore/tests/common/mod.rs +++ b/bootstore/tests/common/mod.rs @@ -12,7 +12,7 @@ use bootstore::schemes::v0::{ ApiError, Envelope, Fsm, FsmConfig, Msg, MsgError, RackUuid, Request, RequestType, Response, ResponseType, }; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use std::collections::{BTreeMap, BTreeSet}; use std::time::Instant; diff --git a/bootstore/tests/v0-fsm-proptest-learner.rs b/bootstore/tests/v0-fsm-proptest-learner.rs index 2295f5fc8e..b70c3c3a9d 100644 --- a/bootstore/tests/v0-fsm-proptest-learner.rs +++ b/bootstore/tests/v0-fsm-proptest-learner.rs @@ -19,7 +19,7 @@ use bootstore::trust_quorum::RackSecret; use common::CommonTestState; use proptest::prelude::*; use secrecy::ExposeSecret; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use std::collections::{BTreeMap, BTreeSet}; use uuid::Uuid; diff --git a/bootstore/tests/v0-fsm-proptest-rack-coordinator.rs b/bootstore/tests/v0-fsm-proptest-rack-coordinator.rs index 8bf149568a..0de1f83ba7 100644 --- a/bootstore/tests/v0-fsm-proptest-rack-coordinator.rs +++ b/bootstore/tests/v0-fsm-proptest-rack-coordinator.rs @@ -20,7 +20,7 @@ use bootstore::schemes::v0::{ Request, RequestType, Response, ResponseType, Share, }; use proptest::prelude::*; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use std::collections::{BTreeMap, BTreeSet}; use uuid::Uuid; diff --git a/clients/bootstrap-agent-client/Cargo.toml b/clients/bootstrap-agent-client/Cargo.toml index 3474c5814a..ea5d5358f9 100644 --- a/clients/bootstrap-agent-client/Cargo.toml +++ b/clients/bootstrap-agent-client/Cargo.toml @@ -12,7 +12,7 @@ regress.workspace = true reqwest = { workspace = true, features = [ "json", "rustls-tls", "stream" ] } schemars.workspace = true serde.workspace = true -sled-hardware.workspace = true +sled-hardware-types.workspace = true slog.workspace = true uuid.workspace = true omicron-workspace-hack.workspace = true diff --git a/clients/bootstrap-agent-client/src/lib.rs b/clients/bootstrap-agent-client/src/lib.rs index 19ecb599f3..61ebd04e1b 100644 --- a/clients/bootstrap-agent-client/src/lib.rs +++ b/clients/bootstrap-agent-client/src/lib.rs @@ -31,32 +31,36 @@ impl omicron_common::api::external::ClientError for types::Error { } } -impl From for sled_hardware::Baseboard { +impl From for sled_hardware_types::Baseboard { fn from(value: types::Baseboard) -> Self { match value { types::Baseboard::Gimlet { identifier, model, revision } => { - sled_hardware::Baseboard::new_gimlet( + sled_hardware_types::Baseboard::new_gimlet( identifier, model, revision, ) } - types::Baseboard::Unknown => sled_hardware::Baseboard::unknown(), + types::Baseboard::Unknown => { + sled_hardware_types::Baseboard::unknown() + } types::Baseboard::Pc { identifier, model } => { - sled_hardware::Baseboard::new_pc(identifier, model) + sled_hardware_types::Baseboard::new_pc(identifier, model) } } } } -impl From for types::Baseboard { - fn from(value: sled_hardware::Baseboard) -> Self { +impl From for types::Baseboard { + fn from(value: sled_hardware_types::Baseboard) -> Self { match value { - sled_hardware::Baseboard::Gimlet { + sled_hardware_types::Baseboard::Gimlet { identifier, model, revision, } => types::Baseboard::Gimlet { identifier, model, revision }, - sled_hardware::Baseboard::Unknown => types::Baseboard::Unknown, - sled_hardware::Baseboard::Pc { identifier, model } => { + sled_hardware_types::Baseboard::Unknown => { + types::Baseboard::Unknown + } + sled_hardware_types::Baseboard::Pc { identifier, model } => { types::Baseboard::Pc { identifier, model } } } diff --git a/clients/ddm-admin-client/Cargo.toml b/clients/ddm-admin-client/Cargo.toml index 4d00f329e7..f4aee0a961 100644 --- a/clients/ddm-admin-client/Cargo.toml +++ b/clients/ddm-admin-client/Cargo.toml @@ -14,7 +14,7 @@ thiserror.workspace = true tokio.workspace = true omicron-common.workspace = true -sled-hardware.workspace = true +sled-hardware-types.workspace = true omicron-workspace-hack.workspace = true [build-dependencies] diff --git a/clients/ddm-admin-client/src/lib.rs b/clients/ddm-admin-client/src/lib.rs index c9dea15964..b88ea51e00 100644 --- a/clients/ddm-admin-client/src/lib.rs +++ b/clients/ddm-admin-client/src/lib.rs @@ -26,9 +26,9 @@ use omicron_common::address::Ipv6Subnet; use omicron_common::address::SLED_PREFIX; use omicron_common::backoff::retry_notify; use omicron_common::backoff::retry_policy_internal_service_aggressive; -use sled_hardware::underlay::BootstrapInterface; -use sled_hardware::underlay::BOOTSTRAP_MASK; -use sled_hardware::underlay::BOOTSTRAP_PREFIX; +use sled_hardware_types::underlay::BootstrapInterface; +use sled_hardware_types::underlay::BOOTSTRAP_MASK; +use sled_hardware_types::underlay::BOOTSTRAP_PREFIX; use slog::info; use slog::Logger; use std::net::Ipv6Addr; diff --git a/clients/mg-admin-client/Cargo.toml b/clients/mg-admin-client/Cargo.toml index c444fee32f..e426fa2371 100644 --- a/clients/mg-admin-client/Cargo.toml +++ b/clients/mg-admin-client/Cargo.toml @@ -13,7 +13,6 @@ slog.workspace = true thiserror.workspace = true tokio.workspace = true omicron-common.workspace = true -sled-hardware.workspace = true omicron-workspace-hack.workspace = true [build-dependencies] diff --git a/dev-tools/omdb/Cargo.toml b/dev-tools/omdb/Cargo.toml index 2b0480be2d..1b697561a9 100644 --- a/dev-tools/omdb/Cargo.toml +++ b/dev-tools/omdb/Cargo.toml @@ -49,11 +49,11 @@ unicode-width.workspace = true uuid.workspace = true ipnetwork.workspace = true omicron-workspace-hack.workspace = true -nexus-test-utils.workspace = true multimap.workspace = true [dev-dependencies] expectorate.workspace = true +nexus-test-utils.workspace = true nexus-test-utils-macros.workspace = true omicron-nexus.workspace = true omicron-test-utils.workspace = true diff --git a/dev-tools/omdb/src/bin/omdb/db.rs b/dev-tools/omdb/src/bin/omdb/db.rs index 98e7748054..1b99a815ef 100644 --- a/dev-tools/omdb/src/bin/omdb/db.rs +++ b/dev-tools/omdb/src/bin/omdb/db.rs @@ -77,9 +77,9 @@ use nexus_db_queries::db::datastore::InstanceAndActiveVmm; use nexus_db_queries::db::identity::Asset; use nexus_db_queries::db::lookup::LookupPath; use nexus_db_queries::db::model::ServiceKind; +use nexus_db_queries::db::queries::ALLOW_FULL_TABLE_SCAN_SQL; use nexus_db_queries::db::DataStore; use nexus_reconfigurator_preparation::policy_from_db; -use nexus_test_utils::db::ALLOW_FULL_TABLE_SCAN_SQL; use nexus_types::deployment::Blueprint; use nexus_types::deployment::OmicronZoneType; use nexus_types::deployment::UnstableReconfiguratorState; diff --git a/installinator/Cargo.toml b/installinator/Cargo.toml index 43966d1202..1f92913aa1 100644 --- a/installinator/Cargo.toml +++ b/installinator/Cargo.toml @@ -27,6 +27,7 @@ omicron-common.workspace = true reqwest.workspace = true sha2.workspace = true sled-hardware.workspace = true +sled-hardware-types.workspace = true sled-storage.workspace = true slog.workspace = true slog-async.workspace = true diff --git a/installinator/src/bootstrap.rs b/installinator/src/bootstrap.rs index 71c76809db..59541df28e 100644 --- a/installinator/src/bootstrap.rs +++ b/installinator/src/bootstrap.rs @@ -16,7 +16,7 @@ use illumos_utils::dladm::Dladm; use illumos_utils::zone::Zones; use omicron_common::address::Ipv6Subnet; use sled_hardware::underlay; -use sled_hardware::underlay::BootstrapInterface; +use sled_hardware_types::underlay::BootstrapInterface; use slog::info; use slog::Logger; diff --git a/installinator/src/peers.rs b/installinator/src/peers.rs index 3627ae861b..33ba0de0e5 100644 --- a/installinator/src/peers.rs +++ b/installinator/src/peers.rs @@ -25,7 +25,7 @@ use itertools::Itertools; use omicron_common::address::BOOTSTRAP_ARTIFACT_PORT; use omicron_common::update::ArtifactHashId; use reqwest::StatusCode; -use sled_hardware::underlay::BootstrapInterface; +use sled_hardware_types::underlay::BootstrapInterface; use tokio::{sync::mpsc, time::Instant}; use update_engine::events::ProgressUnits; use uuid::Uuid; diff --git a/sled-agent/Cargo.toml b/sled-agent/Cargo.toml index 7f46a277ce..239887e789 100644 --- a/sled-agent/Cargo.toml +++ b/sled-agent/Cargo.toml @@ -63,6 +63,7 @@ serde_json = { workspace = true, features = ["raw_value"] } sha3.workspace = true sled-agent-client.workspace = true sled-hardware.workspace = true +sled-hardware-types.workspace = true sled-storage.workspace = true slog.workspace = true slog-async.workspace = true diff --git a/sled-agent/src/bin/sled-agent-sim.rs b/sled-agent/src/bin/sled-agent-sim.rs index 8de9a3c423..fcd7d02623 100644 --- a/sled-agent/src/bin/sled-agent-sim.rs +++ b/sled-agent/src/bin/sled-agent-sim.rs @@ -20,7 +20,7 @@ use omicron_sled_agent::sim::{ run_standalone_server, Config, ConfigHardware, ConfigStorage, ConfigZpool, SimMode, }; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use std::net::SocketAddr; use std::net::SocketAddrV6; use uuid::Uuid; diff --git a/sled-agent/src/bootstrap/bootstore_setup.rs b/sled-agent/src/bootstrap/bootstore_setup.rs index 9eb0a87c03..120c7df000 100644 --- a/sled-agent/src/bootstrap/bootstore_setup.rs +++ b/sled-agent/src/bootstrap/bootstore_setup.rs @@ -12,8 +12,8 @@ use super::server::StartError; use bootstore::schemes::v0 as bootstore; use camino::Utf8PathBuf; use ddm_admin_client::Client as DdmAdminClient; -use sled_hardware::underlay::BootstrapInterface; -use sled_hardware::Baseboard; +use sled_hardware_types::underlay::BootstrapInterface; +use sled_hardware_types::Baseboard; use sled_storage::dataset::CLUSTER_DATASET; use sled_storage::resources::StorageResources; use slog::Logger; diff --git a/sled-agent/src/bootstrap/http_entrypoints.rs b/sled-agent/src/bootstrap/http_entrypoints.rs index 7c32bf48a5..68098f431e 100644 --- a/sled-agent/src/bootstrap/http_entrypoints.rs +++ b/sled-agent/src/bootstrap/http_entrypoints.rs @@ -23,7 +23,7 @@ use http::StatusCode; use omicron_common::api::external::Error; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use sled_storage::manager::StorageHandle; use slog::Logger; use std::net::Ipv6Addr; diff --git a/sled-agent/src/bootstrap/params.rs b/sled-agent/src/bootstrap/params.rs index 48444af8d4..4835edf4a9 100644 --- a/sled-agent/src/bootstrap/params.rs +++ b/sled-agent/src/bootstrap/params.rs @@ -12,7 +12,7 @@ use omicron_common::ledger::Ledgerable; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use sha3::{Digest, Sha3_256}; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use std::borrow::Cow; use std::collections::BTreeSet; use std::net::{IpAddr, Ipv6Addr, SocketAddrV6}; diff --git a/sled-agent/src/bootstrap/pre_server.rs b/sled-agent/src/bootstrap/pre_server.rs index e61e15d370..6769af8ca2 100644 --- a/sled-agent/src/bootstrap/pre_server.rs +++ b/sled-agent/src/bootstrap/pre_server.rs @@ -38,6 +38,7 @@ use omicron_common::FileKv; use sled_hardware::underlay; use sled_hardware::DendriteAsic; use sled_hardware::SledMode; +use sled_hardware_types::underlay::BootstrapInterface; use slog::Drain; use slog::Logger; use std::net::IpAddr; @@ -344,7 +345,7 @@ pub(crate) struct BootstrapNetworking { impl BootstrapNetworking { fn setup(config: &Config) -> Result { let link_for_mac = config.get_link().map_err(StartError::ConfigLink)?; - let global_zone_bootstrap_ip = underlay::BootstrapInterface::GlobalZone + let global_zone_bootstrap_ip = BootstrapInterface::GlobalZone .ip(&link_for_mac) .map_err(StartError::BootstrapLinkMac)?; @@ -381,7 +382,7 @@ impl BootstrapNetworking { IpAddr::V6(addr) => addr, }; - let switch_zone_bootstrap_ip = underlay::BootstrapInterface::SwitchZone + let switch_zone_bootstrap_ip = BootstrapInterface::SwitchZone .ip(&link_for_mac) .map_err(StartError::BootstrapLinkMac)?; diff --git a/sled-agent/src/hardware_monitor.rs b/sled-agent/src/hardware_monitor.rs index 5dcd060f98..34e9d8c9c7 100644 --- a/sled-agent/src/hardware_monitor.rs +++ b/sled-agent/src/hardware_monitor.rs @@ -8,7 +8,8 @@ use crate::services::ServiceManager; use crate::sled_agent::SledAgent; -use sled_hardware::{Baseboard, HardwareManager, HardwareUpdate}; +use sled_hardware::{HardwareManager, HardwareUpdate}; +use sled_hardware_types::Baseboard; use sled_storage::disk::RawDisk; use sled_storage::manager::StorageHandle; use slog::Logger; diff --git a/sled-agent/src/metrics.rs b/sled-agent/src/metrics.rs index a9d5acfff8..c41037fead 100644 --- a/sled-agent/src/metrics.rs +++ b/sled-agent/src/metrics.rs @@ -6,7 +6,7 @@ use oximeter::types::MetricsError; use oximeter::types::ProducerRegistry; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use slog::Logger; use std::sync::Arc; use std::time::Duration; diff --git a/sled-agent/src/nexus.rs b/sled-agent/src/nexus.rs index 7e7d60f6a4..59ae797ab4 100644 --- a/sled-agent/src/nexus.rs +++ b/sled-agent/src/nexus.rs @@ -140,7 +140,9 @@ impl ConvertInto } } -impl ConvertInto for sled_hardware::Baseboard { +impl ConvertInto + for sled_hardware_types::Baseboard +{ fn convert(self) -> nexus_client::types::Baseboard { nexus_client::types::Baseboard { serial: self.identifier().to_string(), @@ -644,7 +646,7 @@ mod test { ByteCount, Error, Generation, LookupType, MessagePair, ResourceType, }; use omicron_test_utils::dev::test_setup_log; - use sled_hardware::Baseboard; + use sled_hardware_types::Baseboard; /// Pretend to be CRDB storing info about a sled-agent #[derive(Default, Clone)] diff --git a/sled-agent/src/params.rs b/sled-agent/src/params.rs index f30c910efc..82813d3f1e 100644 --- a/sled-agent/src/params.rs +++ b/sled-agent/src/params.rs @@ -21,8 +21,8 @@ use omicron_common::api::internal::shared::{ }; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; -use sled_hardware::Baseboard; pub use sled_hardware::DendriteAsic; +use sled_hardware_types::Baseboard; use sled_storage::dataset::DatasetKind; use sled_storage::dataset::DatasetName; use std::collections::BTreeSet; diff --git a/sled-agent/src/rack_setup/service.rs b/sled-agent/src/rack_setup/service.rs index 2788e189cc..453495a870 100644 --- a/sled-agent/src/rack_setup/service.rs +++ b/sled-agent/src/rack_setup/service.rs @@ -103,7 +103,7 @@ use serde::{Deserialize, Serialize}; use sled_agent_client::{ types as SledAgentTypes, Client as SledAgentClient, Error as SledAgentError, }; -use sled_hardware::underlay::BootstrapInterface; +use sled_hardware_types::underlay::BootstrapInterface; use sled_storage::dataset::CONFIG_DATASET; use sled_storage::manager::StorageHandle; use slog::Logger; diff --git a/sled-agent/src/services.rs b/sled-agent/src/services.rs index 2be4b8ec45..11ccfad69b 100644 --- a/sled-agent/src/services.rs +++ b/sled-agent/src/services.rs @@ -91,9 +91,9 @@ use once_cell::sync::OnceCell; use rand::prelude::SliceRandom; use sled_hardware::is_gimlet; use sled_hardware::underlay; -use sled_hardware::underlay::BOOTSTRAP_PREFIX; -use sled_hardware::Baseboard; use sled_hardware::SledMode; +use sled_hardware_types::underlay::BOOTSTRAP_PREFIX; +use sled_hardware_types::Baseboard; use sled_storage::dataset::{ DatasetKind, DatasetName, CONFIG_DATASET, INSTALL_DATASET, ZONE_DATASET, }; diff --git a/sled-agent/src/sim/config.rs b/sled-agent/src/sim/config.rs index 7a20dd5709..8da6f8773f 100644 --- a/sled-agent/src/sim/config.rs +++ b/sled-agent/src/sim/config.rs @@ -9,7 +9,7 @@ use camino::Utf8Path; use dropshot::ConfigDropshot; use serde::Deserialize; use serde::Serialize; -pub use sled_hardware::Baseboard; +pub use sled_hardware_types::Baseboard; use std::net::Ipv6Addr; use std::net::{IpAddr, SocketAddr}; use uuid::Uuid; diff --git a/sled-agent/src/sled_agent.rs b/sled-agent/src/sled_agent.rs index 4a21a6fe89..cff13dd43a 100644 --- a/sled-agent/src/sled_agent.rs +++ b/sled-agent/src/sled_agent.rs @@ -66,7 +66,9 @@ use omicron_common::backoff::{ retry_policy_internal_service_aggressive, BackoffError, }; use oximeter::types::ProducerRegistry; -use sled_hardware::{underlay, Baseboard, HardwareManager}; +use sled_hardware::{underlay, HardwareManager}; +use sled_hardware_types::underlay::BootstrapInterface; +use sled_hardware_types::Baseboard; use sled_storage::manager::StorageHandle; use slog::Logger; use std::collections::BTreeMap; @@ -1173,9 +1175,7 @@ pub async fn sled_add( // Get all known bootstrap addresses via DDM let ddm_admin_client = DdmAdminClient::localhost(&log)?; let addrs = ddm_admin_client - .derive_bootstrap_addrs_from_prefixes(&[ - underlay::BootstrapInterface::GlobalZone, - ]) + .derive_bootstrap_addrs_from_prefixes(&[BootstrapInterface::GlobalZone]) .await?; // Create a set of futures to concurrently map the baseboard to bootstrap ip diff --git a/sled-hardware/Cargo.toml b/sled-hardware/Cargo.toml index 28cec20041..1c914e2897 100644 --- a/sled-hardware/Cargo.toml +++ b/sled-hardware/Cargo.toml @@ -18,6 +18,7 @@ omicron-common.workspace = true rand.workspace = true schemars.workspace = true serde.workspace = true +sled-hardware-types.workspace = true slog.workspace = true slog-error-chain.workspace = true thiserror.workspace = true diff --git a/sled-hardware/src/illumos/mod.rs b/sled-hardware/src/illumos/mod.rs index f2db424bda..7dd6f9e20d 100644 --- a/sled-hardware/src/illumos/mod.rs +++ b/sled-hardware/src/illumos/mod.rs @@ -3,13 +3,13 @@ // file, You can obtain one at https://mozilla.org/MPL/2.0/. use crate::{ - Baseboard, DendriteAsic, DiskVariant, HardwareUpdate, SledMode, - UnparsedDisk, + DendriteAsic, DiskVariant, HardwareUpdate, SledMode, UnparsedDisk, }; use camino::Utf8PathBuf; use gethostname::gethostname; use illumos_devinfo::{DevInfo, DevLinkType, DevLinks, Node, Property}; use omicron_common::disk::DiskIdentity; +use sled_hardware_types::Baseboard; use slog::debug; use slog::error; use slog::info; diff --git a/sled-hardware/src/lib.rs b/sled-hardware/src/lib.rs index 2e3fd4a576..607f72e25c 100644 --- a/sled-hardware/src/lib.rs +++ b/sled-hardware/src/lib.rs @@ -74,92 +74,3 @@ pub enum SledMode { /// Force sled to run as a Scrimlet Scrimlet { asic: DendriteAsic }, } - -/// Describes properties that should uniquely identify a Gimlet. -#[derive( - Clone, - Debug, - PartialOrd, - Ord, - PartialEq, - Eq, - Hash, - Serialize, - Deserialize, - JsonSchema, -)] -#[serde(tag = "type", rename_all = "snake_case")] -pub enum Baseboard { - Gimlet { identifier: String, model: String, revision: i64 }, - - Unknown, - - Pc { identifier: String, model: String }, -} - -impl Baseboard { - #[allow(dead_code)] - pub fn new_gimlet( - identifier: String, - model: String, - revision: i64, - ) -> Self { - Self::Gimlet { identifier, model, revision } - } - - pub fn new_pc(identifier: String, model: String) -> Self { - Self::Pc { identifier, model } - } - - // XXX This should be removed, but it requires a refactor in how devices are - // polled. - pub fn unknown() -> Self { - Self::Unknown - } - - pub fn type_string(&self) -> &str { - match &self { - Self::Gimlet { .. } => "gimlet", - Self::Pc { .. } => "pc", - Self::Unknown => "unknown", - } - } - - pub fn identifier(&self) -> &str { - match &self { - Self::Gimlet { identifier, .. } => &identifier, - Self::Pc { identifier, .. } => &identifier, - Self::Unknown => "unknown", - } - } - - pub fn model(&self) -> &str { - match self { - Self::Gimlet { model, .. } => &model, - Self::Pc { model, .. } => &model, - Self::Unknown => "unknown", - } - } - - pub fn revision(&self) -> i64 { - match self { - Self::Gimlet { revision, .. } => *revision, - Self::Pc { .. } => 0, - Self::Unknown => 0, - } - } -} - -impl std::fmt::Display for Baseboard { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - match self { - Baseboard::Gimlet { identifier, model, revision } => { - write!(f, "gimlet-{identifier}-{model}-{revision}") - } - Baseboard::Unknown => write!(f, "unknown"), - Baseboard::Pc { identifier, model } => { - write!(f, "pc-{identifier}-{model}") - } - } - } -} diff --git a/sled-hardware/src/non_illumos/mod.rs b/sled-hardware/src/non_illumos/mod.rs index 8518aae495..e990567b7c 100644 --- a/sled-hardware/src/non_illumos/mod.rs +++ b/sled-hardware/src/non_illumos/mod.rs @@ -5,8 +5,9 @@ use crate::disk::{ DiskPaths, DiskVariant, Partition, PooledDiskError, UnparsedDisk, }; -use crate::{Baseboard, SledMode}; +use crate::SledMode; use omicron_common::disk::DiskIdentity; +use sled_hardware_types::Baseboard; use slog::Logger; use std::collections::HashSet; use tokio::sync::broadcast; diff --git a/sled-hardware/src/underlay.rs b/sled-hardware/src/underlay.rs index 48d1dd2d64..e0b40f443b 100644 --- a/sled-hardware/src/underlay.rs +++ b/sled-hardware/src/underlay.rs @@ -7,7 +7,6 @@ use crate::is_gimlet; use illumos_utils::addrobj; use illumos_utils::addrobj::AddrObject; -use illumos_utils::dladm; use illumos_utils::dladm::Dladm; use illumos_utils::dladm::FindPhysicalLinkError; use illumos_utils::dladm::GetLinkpropError; @@ -15,14 +14,6 @@ use illumos_utils::dladm::PhysicalLink; use illumos_utils::dladm::SetLinkpropError; use illumos_utils::dladm::CHELSIO_LINK_PREFIX; use illumos_utils::zone::Zones; -use omicron_common::api::external::MacAddr; -use std::net::Ipv6Addr; - -/// Initial octet of IPv6 for bootstrap addresses. -pub const BOOTSTRAP_PREFIX: u16 = 0xfdb0; - -/// IPv6 prefix mask for bootstrap addresses. -pub const BOOTSTRAP_MASK: u8 = 64; #[derive(thiserror::Error, Debug)] pub enum Error { @@ -107,60 +98,3 @@ pub fn ensure_links_have_global_zone_link_local_v6_addresses( Ok(addr_objs) } - -#[derive(Debug, Clone, Copy, PartialEq, Eq)] -pub enum BootstrapInterface { - GlobalZone, - SwitchZone, -} - -impl BootstrapInterface { - pub fn interface_id(self) -> u64 { - match self { - BootstrapInterface::GlobalZone => 1, - BootstrapInterface::SwitchZone => 2, - } - } - - // TODO(https://github.com/oxidecomputer/omicron/issues/945): This address - // could be randomly generated when it no longer needs to be durable. - pub fn ip( - self, - link: &PhysicalLink, - ) -> Result { - let mac = Dladm::get_mac(link)?; - Ok(mac_to_bootstrap_ip(mac, self.interface_id())) - } -} - -fn mac_to_bootstrap_ip(mac: MacAddr, interface_id: u64) -> Ipv6Addr { - let mac_bytes = mac.into_array(); - assert_eq!(6, mac_bytes.len()); - - Ipv6Addr::new( - BOOTSTRAP_PREFIX, - ((mac_bytes[0] as u16) << 8) | mac_bytes[1] as u16, - ((mac_bytes[2] as u16) << 8) | mac_bytes[3] as u16, - ((mac_bytes[4] as u16) << 8) | mac_bytes[5] as u16, - (interface_id >> 48 & 0xffff).try_into().unwrap(), - (interface_id >> 32 & 0xffff).try_into().unwrap(), - (interface_id >> 16 & 0xffff).try_into().unwrap(), - (interface_id & 0xfff).try_into().unwrap(), - ) -} - -#[cfg(test)] -mod tests { - use super::*; - use macaddr::MacAddr6; - - #[test] - fn test_mac_to_bootstrap_ip() { - let mac = MacAddr("a8:40:25:10:00:01".parse::().unwrap()); - - assert_eq!( - mac_to_bootstrap_ip(mac, 1), - "fdb0:a840:2510:1::1".parse::().unwrap(), - ); - } -} diff --git a/sled-hardware/types/Cargo.toml b/sled-hardware/types/Cargo.toml new file mode 100644 index 0000000000..d6eefa49ac --- /dev/null +++ b/sled-hardware/types/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "sled-hardware-types" +version = "0.1.0" +edition = "2021" +license = "MPL-2.0" + +[dependencies] +illumos-utils.workspace = true +omicron-common.workspace = true +schemars.workspace = true +serde.workspace = true +omicron-workspace-hack.workspace = true + +[dev-dependencies] +macaddr.workspace = true diff --git a/sled-hardware/types/src/lib.rs b/sled-hardware/types/src/lib.rs new file mode 100644 index 0000000000..e589498ff8 --- /dev/null +++ b/sled-hardware/types/src/lib.rs @@ -0,0 +1,97 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +use schemars::JsonSchema; +use serde::{Deserialize, Serialize}; + +pub mod underlay; + +/// Describes properties that should uniquely identify a Gimlet. +#[derive( + Clone, + Debug, + PartialOrd, + Ord, + PartialEq, + Eq, + Hash, + Serialize, + Deserialize, + JsonSchema, +)] +#[serde(tag = "type", rename_all = "snake_case")] +pub enum Baseboard { + Gimlet { identifier: String, model: String, revision: i64 }, + + Unknown, + + Pc { identifier: String, model: String }, +} + +impl Baseboard { + #[allow(dead_code)] + pub fn new_gimlet( + identifier: String, + model: String, + revision: i64, + ) -> Self { + Self::Gimlet { identifier, model, revision } + } + + pub fn new_pc(identifier: String, model: String) -> Self { + Self::Pc { identifier, model } + } + + // XXX This should be removed, but it requires a refactor in how devices are + // polled. + pub fn unknown() -> Self { + Self::Unknown + } + + pub fn type_string(&self) -> &str { + match &self { + Self::Gimlet { .. } => "gimlet", + Self::Pc { .. } => "pc", + Self::Unknown => "unknown", + } + } + + pub fn identifier(&self) -> &str { + match &self { + Self::Gimlet { identifier, .. } => &identifier, + Self::Pc { identifier, .. } => &identifier, + Self::Unknown => "unknown", + } + } + + pub fn model(&self) -> &str { + match self { + Self::Gimlet { model, .. } => &model, + Self::Pc { model, .. } => &model, + Self::Unknown => "unknown", + } + } + + pub fn revision(&self) -> i64 { + match self { + Self::Gimlet { revision, .. } => *revision, + Self::Pc { .. } => 0, + Self::Unknown => 0, + } + } +} + +impl std::fmt::Display for Baseboard { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Baseboard::Gimlet { identifier, model, revision } => { + write!(f, "gimlet-{identifier}-{model}-{revision}") + } + Baseboard::Unknown => write!(f, "unknown"), + Baseboard::Pc { identifier, model } => { + write!(f, "pc-{identifier}-{model}") + } + } + } +} diff --git a/sled-hardware/types/src/underlay.rs b/sled-hardware/types/src/underlay.rs new file mode 100644 index 0000000000..bbeb43bd4d --- /dev/null +++ b/sled-hardware/types/src/underlay.rs @@ -0,0 +1,72 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +use illumos_utils::dladm; +use illumos_utils::dladm::Dladm; +use illumos_utils::dladm::PhysicalLink; +use omicron_common::api::external::MacAddr; +use std::net::Ipv6Addr; + +/// Initial octet of IPv6 for bootstrap addresses. +pub const BOOTSTRAP_PREFIX: u16 = 0xfdb0; + +/// IPv6 prefix mask for bootstrap addresses. +pub const BOOTSTRAP_MASK: u8 = 64; + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum BootstrapInterface { + GlobalZone, + SwitchZone, +} + +impl BootstrapInterface { + pub fn interface_id(self) -> u64 { + match self { + BootstrapInterface::GlobalZone => 1, + BootstrapInterface::SwitchZone => 2, + } + } + + // TODO(https://github.com/oxidecomputer/omicron/issues/945): This address + // could be randomly generated when it no longer needs to be durable. + pub fn ip( + self, + link: &PhysicalLink, + ) -> Result { + let mac = Dladm::get_mac(link)?; + Ok(mac_to_bootstrap_ip(mac, self.interface_id())) + } +} + +fn mac_to_bootstrap_ip(mac: MacAddr, interface_id: u64) -> Ipv6Addr { + let mac_bytes = mac.into_array(); + assert_eq!(6, mac_bytes.len()); + + Ipv6Addr::new( + BOOTSTRAP_PREFIX, + ((mac_bytes[0] as u16) << 8) | mac_bytes[1] as u16, + ((mac_bytes[2] as u16) << 8) | mac_bytes[3] as u16, + ((mac_bytes[4] as u16) << 8) | mac_bytes[5] as u16, + (interface_id >> 48 & 0xffff).try_into().unwrap(), + (interface_id >> 32 & 0xffff).try_into().unwrap(), + (interface_id >> 16 & 0xffff).try_into().unwrap(), + (interface_id & 0xfff).try_into().unwrap(), + ) +} + +#[cfg(test)] +mod tests { + use super::*; + use macaddr::MacAddr6; + + #[test] + fn test_mac_to_bootstrap_ip() { + let mac = MacAddr("a8:40:25:10:00:01".parse::().unwrap()); + + assert_eq!( + mac_to_bootstrap_ip(mac, 1), + "fdb0:a840:2510:1::1".parse::().unwrap(), + ); + } +} diff --git a/wicketd/Cargo.toml b/wicketd/Cargo.toml index 26e54eb3bc..4b6e6d6f5f 100644 --- a/wicketd/Cargo.toml +++ b/wicketd/Cargo.toml @@ -53,7 +53,7 @@ installinator-common.workspace = true omicron-certificates.workspace = true omicron-common.workspace = true omicron-passwords.workspace = true -sled-hardware.workspace = true +sled-hardware-types.workspace = true tufaceous-lib.workspace = true update-common.workspace = true update-engine.workspace = true diff --git a/wicketd/src/bin/wicketd.rs b/wicketd/src/bin/wicketd.rs index 24fa802c79..4037bc4c23 100644 --- a/wicketd/src/bin/wicketd.rs +++ b/wicketd/src/bin/wicketd.rs @@ -11,7 +11,7 @@ use omicron_common::{ address::Ipv6Subnet, cmd::{fatal, CmdError}, }; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use std::net::{Ipv6Addr, SocketAddrV6}; use std::path::PathBuf; use wicketd::{self, run_openapi, Config, Server, SmfConfigValues}; diff --git a/wicketd/src/bootstrap_addrs.rs b/wicketd/src/bootstrap_addrs.rs index f49e5f8ba8..f7256ae6ac 100644 --- a/wicketd/src/bootstrap_addrs.rs +++ b/wicketd/src/bootstrap_addrs.rs @@ -4,8 +4,8 @@ use ddm_admin_client::Client as DdmAdminClient; use futures::stream::FuturesUnordered; -use sled_hardware::underlay::BootstrapInterface; -use sled_hardware::Baseboard; +use sled_hardware_types::underlay::BootstrapInterface; +use sled_hardware_types::Baseboard; use slog::warn; use slog::Logger; use std::collections::BTreeMap; diff --git a/wicketd/src/context.rs b/wicketd/src/context.rs index eeecc3fa64..68d04f35dc 100644 --- a/wicketd/src/context.rs +++ b/wicketd/src/context.rs @@ -14,7 +14,7 @@ use anyhow::bail; use anyhow::Result; use gateway_client::types::SpIdentifier; use internal_dns::resolver::Resolver; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use slog::info; use std::net::Ipv6Addr; use std::net::SocketAddrV6; diff --git a/wicketd/src/http_entrypoints.rs b/wicketd/src/http_entrypoints.rs index 9748a93bd5..e87581b7be 100644 --- a/wicketd/src/http_entrypoints.rs +++ b/wicketd/src/http_entrypoints.rs @@ -38,7 +38,7 @@ use omicron_common::update::ArtifactId; use schemars::JsonSchema; use serde::Deserialize; use serde::Serialize; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use slog::o; use std::collections::BTreeMap; use std::collections::BTreeSet; diff --git a/wicketd/src/lib.rs b/wicketd/src/lib.rs index 32188d77de..5926fc468d 100644 --- a/wicketd/src/lib.rs +++ b/wicketd/src/lib.rs @@ -32,7 +32,7 @@ use nexus_proxy::NexusTcpProxy; use omicron_common::address::{Ipv6Subnet, AZ_PREFIX}; use omicron_common::FileKv; use preflight_check::PreflightCheckerHandler; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use slog::{debug, error, o, Drain}; use std::sync::{Mutex, OnceLock}; use std::time::Duration; diff --git a/wicketd/src/rss_config.rs b/wicketd/src/rss_config.rs index 4bc1a6b62b..3fc123480d 100644 --- a/wicketd/src/rss_config.rs +++ b/wicketd/src/rss_config.rs @@ -26,7 +26,7 @@ use gateway_client::types::SpType; use omicron_certificates::CertificateError; use omicron_common::address; use omicron_common::address::Ipv4Range; -use sled_hardware::Baseboard; +use sled_hardware_types::Baseboard; use slog::warn; use std::collections::BTreeSet; use std::mem;