diff --git a/core/startos/src/net/net_controller.rs b/core/startos/src/net/net_controller.rs index 5fa2a30ec..c9338cdff 100644 --- a/core/startos/src/net/net_controller.rs +++ b/core/startos/src/net/net_controller.rs @@ -385,6 +385,10 @@ impl NetService { )) } } + + pub fn get_ip(&self) -> Ipv4Addr { + self.ip.to_owned() + } } impl Drop for NetService { diff --git a/core/startos/src/service/service_effect_handler.rs b/core/startos/src/service/service_effect_handler.rs index 65217ecd5..c103d5994 100644 --- a/core/startos/src/service/service_effect_handler.rs +++ b/core/startos/src/service/service_effect_handler.rs @@ -1,3 +1,5 @@ +use std::any::Any; +use std::borrow::Borrow; use std::collections::BTreeSet; use std::ffi::OsString; use std::net::Ipv4Addr; @@ -23,7 +25,8 @@ use crate::db::model::package::{ use crate::disk::mount::filesystem::idmapped::IdMapped; use crate::disk::mount::filesystem::loop_dev::LoopDev; use crate::disk::mount::filesystem::overlayfs::OverlayGuard; -use crate::prelude::*; +use crate::net::net; +use crate::{net, prelude::*}; use crate::s9pk::rpc::SKIP_ENV; use crate::service::cli::ContainerCliContext; use crate::service::ServiceActorSeed; @@ -337,7 +340,18 @@ async fn get_system_smtp( todo!() } async fn get_container_ip(context: EffectContext, _: Empty) -> Result { - todo!() + match context.0.upgrade() { + Some(c) => { + let net_service = c.persistent_container.net_service.lock().await; + Ok(net_service.get_ip()) + }, + None => { + Err(Error::new( + eyre!("Upgrade on Weak resulted in a None variant"), + crate::ErrorKind::NotFound + )) + } + } } async fn get_service_port_forward( context: EffectContext,