From 59ab88a366a01923cd72ae377252391dec0ea0ed Mon Sep 17 00:00:00 2001 From: David Pacheco Date: Wed, 13 Nov 2024 16:36:54 -0800 Subject: [PATCH] avoid tight coupling between Omicron and Propolis Dropshot versions (#7057) --- sled-agent/src/instance.rs | 20 ++++---------------- sled-agent/src/sim/sled_agent.rs | 29 ++++++++++------------------- 2 files changed, 14 insertions(+), 35 deletions(-) diff --git a/sled-agent/src/instance.rs b/sled-agent/src/instance.rs index 4883918c36..63c363985a 100644 --- a/sled-agent/src/instance.rs +++ b/sled-agent/src/instance.rs @@ -2102,29 +2102,17 @@ mod tests { // TODO: factor out, this is also in sled-agent-sim. fn propolis_mock_server( log: &Logger, - ) -> (HttpServer>, PropolisClient) { + ) -> (propolis_mock_server::Server, PropolisClient) { let propolis_bind_address = SocketAddr::new(Ipv6Addr::LOCALHOST.into(), 0); // allocate port - let dropshot_config = dropshot::ConfigDropshot { + let dropshot_config = propolis_mock_server::Config { bind_address: propolis_bind_address, ..Default::default() }; - let propolis_log = log.new(o!("component" => "propolis-server-mock")); - let private = - Arc::new(propolis_mock_server::Context::new(propolis_log)); info!(log, "Starting mock propolis-server..."); - let dropshot_log = log.new(o!("component" => "dropshot")); - let mock_api = propolis_mock_server::api(); - - let srv = dropshot::HttpServerStarter::new( - &dropshot_config, - mock_api, - private, - &dropshot_log, - ) - .expect("couldn't create mock propolis-server") - .start(); + let srv = propolis_mock_server::start(dropshot_config, log.clone()) + .expect("couldn't create mock propolis-server"); let client = propolis_client::Client::new(&format!( "http://{}", srv.local_addr() diff --git a/sled-agent/src/sim/sled_agent.rs b/sled-agent/src/sim/sled_agent.rs index aef4128c52..5a482f3196 100644 --- a/sled-agent/src/sim/sled_agent.rs +++ b/sled-agent/src/sim/sled_agent.rs @@ -17,7 +17,7 @@ use crate::sim::simulatable::Simulatable; use crate::updates::UpdateManager; use anyhow::bail; use anyhow::Context; -use dropshot::{HttpError, HttpServer}; +use dropshot::HttpError; use futures::lock::Mutex; use nexus_sled_agent_shared::inventory::{ Inventory, InventoryDataset, InventoryDisk, InventoryZpool, @@ -43,7 +43,6 @@ use oxnet::Ipv6Net; use propolis_client::{ types::VolumeConstructionRequest, Client as PropolisClient, }; -use propolis_mock_server::Context as PropolisContext; use sled_agent_types::disk::DiskStateRequested; use sled_agent_types::early_networking::{ EarlyNetworkConfig, EarlyNetworkConfigBody, @@ -81,7 +80,7 @@ pub struct SledAgent { disk_id_to_region_ids: Mutex>>, pub v2p_mappings: Mutex>, mock_propolis: - Mutex>, PropolisClient)>>, + Mutex>, /// lists of external IPs assigned to instances pub external_ips: Mutex>>, @@ -797,26 +796,18 @@ impl SledAgent { } let propolis_bind_address = SocketAddr::new(Ipv6Addr::LOCALHOST.into(), 0); - let dropshot_config = dropshot::ConfigDropshot { + let dropshot_config = propolis_mock_server::Config { bind_address: propolis_bind_address, ..Default::default() }; - let propolis_log = log.new(o!("component" => "propolis-server-mock")); - let private = Arc::new(PropolisContext::new(propolis_log)); info!(log, "Starting mock propolis-server..."); - let dropshot_log = log.new(o!("component" => "dropshot")); - let mock_api = propolis_mock_server::api(); - - let srv = dropshot::HttpServerStarter::new( - &dropshot_config, - mock_api, - private, - &dropshot_log, - ) - .map_err(|error| { - Error::unavail(&format!("initializing propolis-server: {}", error)) - })? - .start(); + let srv = propolis_mock_server::start(dropshot_config, log.clone()) + .map_err(|error| { + Error::unavail(&format!( + "initializing propolis-server: {}", + error + )) + })?; let addr = srv.local_addr(); let client = propolis_client::Client::new(&format!("http://{}", addr)); *mock_lock = Some((srv, client));