From ace479b8f223ef1323a9bc178f07cc50ff36435f Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Wed, 8 Dec 2021 12:51:59 -0700 Subject: [PATCH] Feature/setup attach (#921) * add setup.attach * fix setup attach --- appmgr/src/disk/main.rs | 5 +++-- appmgr/src/init.rs | 2 +- appmgr/src/setup.rs | 20 +++++++++++++++++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/appmgr/src/disk/main.rs b/appmgr/src/disk/main.rs index 7d3d0a623..045cd9124 100644 --- a/appmgr/src/disk/main.rs +++ b/appmgr/src/disk/main.rs @@ -231,8 +231,9 @@ pub async fn import>(guid: &str, datadir: P, password: &str) -> R { Ok(_) => Ok(()), Err(e) - if format!("{}", e.source).trim() - == format!("Volume group \"{}\" is not exported", guid) => + if format!("{}", e.source) + .lines() + .any(|l| l.trim() == format!("Volume group \"{}\" is not exported", guid)) => { Ok(()) } diff --git a/appmgr/src/init.rs b/appmgr/src/init.rs index fb4ab55f5..3f7ebffa8 100644 --- a/appmgr/src/init.rs +++ b/appmgr/src/init.rs @@ -52,7 +52,7 @@ pub async fn init(cfg: &RpcContextConfig) -> Result<(), Error> { tracing::info!("Mounted Docker Data"); crate::install::load_images(cfg.datadir().join(PKG_DOCKER_DIR)).await?; - tracing::info!("Loaded Docker Images"); + tracing::info!("Loaded Package Docker Images"); // Loading system images crate::install::load_images("/var/lib/embassy/system-images").await?; tracing::info!("Loaded System Docker Images"); diff --git a/appmgr/src/setup.rs b/appmgr/src/setup.rs index 7ddfca013..a56ed01bb 100644 --- a/appmgr/src/setup.rs +++ b/appmgr/src/setup.rs @@ -52,7 +52,7 @@ where Ok(password) } -#[command(subcommands(status, disk, execute, recovery, cifs, complete))] +#[command(subcommands(status, disk, attach, execute, recovery, cifs, complete))] pub fn setup() -> Result<(), Error> { Ok(()) } @@ -84,6 +84,24 @@ pub async fn list_disks() -> Result, Error> { crate::disk::list(None).await } +#[command(rpc_only)] +pub async fn attach( + #[context] ctx: SetupContext, + #[arg] guid: Arc, +) -> Result { + crate::disk::main::import(&*guid, &ctx.datadir, DEFAULT_PASSWORD).await?; + init(&RpcContextConfig::load(ctx.config_path.as_ref()).await?).await?; + *ctx.disk_guid.write().await = Some(guid.clone()); + let secrets = ctx.secret_store().await?; + let tor_key = crate::net::tor::os_key(&mut secrets.acquire().await?).await?; + let (_, root_ca) = SslManager::init(secrets).await?.export_root_ca().await?; + Ok(SetupResult { + tor_address: format!("http://{}", tor_key.public().get_onion_address()), + lan_address: format!("https://embassy-{}.local", crate::hostname::get_id().await?), + root_ca: String::from_utf8(root_ca.to_pem()?)?, + }) +} + #[command(subcommands(v2, recovery_status))] pub fn recovery() -> Result<(), Error> { Ok(())