From 577a39fe1f53f09077ec1bbaaf39f8857b51d4db Mon Sep 17 00:00:00 2001 From: Noor Date: Tue, 21 Jan 2025 02:46:33 +0530 Subject: [PATCH] simple deployment functionality and package handling --- src/grpc.rs | 46 +++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/src/grpc.rs b/src/grpc.rs index 8c10525..e58cf60 100644 --- a/src/grpc.rs +++ b/src/grpc.rs @@ -3,6 +3,7 @@ use flate2::read::GzDecoder; use reqwest::Client; use std::io::BufReader; use std::path::Path; +use std::process::Command; use std::sync::Arc; use std::{net::SocketAddr, str::FromStr}; use tar::Archive; @@ -54,17 +55,25 @@ impl DaemonServicePB for DaemonServer { ) -> Result, tonic::Status> { let req_data = request.into_inner(); - if let Some(package_url) = req_data.package_url { - handle_package(package_url) - .await - .map_err(|err| tonic::Status::internal(err.to_string()))?; + if req_data.package_url.is_none() { + return Err(tonic::Status::data_loss("Package URL not provided")); } - Ok(tonic::Response::new(NewContainerRes::default())) + let package_url = req_data.package_url.unwrap_or_default(); + let unarchive_dir = handle_package(package_url) + .await + .map_err(|err| tonic::Status::internal(err.to_string()))?; + deploy_enclave(unarchive_dir) + .await + .map_err(|err| tonic::Status::internal(err.to_string()))?; + + return Ok(tonic::Response::new(NewContainerRes { + status: "success".to_string(), + })); } } -async fn handle_package(package_url: String) -> Result<(), Box> { +async fn handle_package(package_url: String) -> Result> { let dir_path = Path::new("./enclave_archives"); fs::create_dir_all(dir_path).await?; @@ -88,8 +97,31 @@ async fn handle_package(package_url: String) -> Result<(), Box, + // ... +) -> Result<(), Box> { + println!("Deploying enclave: {:?}", enclave_path); + let docker_deploy_str = format!( + "docker run --rm -v {enclave_path}:/enclave_packager --device /dev/sgx/enclave --device /dev/sgx/provision -p 34500:34500 -p 8080-8099:8080-8099 noormohammedb/occlum-enclave:v1"); + + println!("{}", &docker_deploy_str); + + let mut child = Command::new("sh") + .arg("-c") + .arg(docker_deploy_str) + .spawn()?; + + child.wait()?; + + dbg!(child); Ok(()) }