Skip to content

Commit

Permalink
avoid tight coupling between Omicron and Propolis Dropshot versions (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
davepacheco authored Nov 14, 2024
1 parent adfab16 commit 59ab88a
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 35 deletions.
20 changes: 4 additions & 16 deletions sled-agent/src/instance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2102,29 +2102,17 @@ mod tests {
// TODO: factor out, this is also in sled-agent-sim.
fn propolis_mock_server(
log: &Logger,
) -> (HttpServer<Arc<propolis_mock_server::Context>>, 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()
Expand Down
29 changes: 10 additions & 19 deletions sled-agent/src/sim/sled_agent.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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,
Expand Down Expand Up @@ -81,7 +80,7 @@ pub struct SledAgent {
disk_id_to_region_ids: Mutex<HashMap<String, Vec<Uuid>>>,
pub v2p_mappings: Mutex<HashSet<VirtualNetworkInterfaceHost>>,
mock_propolis:
Mutex<Option<(HttpServer<Arc<PropolisContext>>, PropolisClient)>>,
Mutex<Option<(propolis_mock_server::Server, PropolisClient)>>,
/// lists of external IPs assigned to instances
pub external_ips:
Mutex<HashMap<PropolisUuid, HashSet<InstanceExternalIpBody>>>,
Expand Down Expand Up @@ -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));
Expand Down

0 comments on commit 59ab88a

Please sign in to comment.