simple deployment functionality and package handling
This commit is contained in:
parent
eb811bb2db
commit
577a39fe1f
46
src/grpc.rs
46
src/grpc.rs
@ -3,6 +3,7 @@ use flate2::read::GzDecoder;
|
|||||||
use reqwest::Client;
|
use reqwest::Client;
|
||||||
use std::io::BufReader;
|
use std::io::BufReader;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
use std::process::Command;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::{net::SocketAddr, str::FromStr};
|
use std::{net::SocketAddr, str::FromStr};
|
||||||
use tar::Archive;
|
use tar::Archive;
|
||||||
@ -54,17 +55,25 @@ impl DaemonServicePB for DaemonServer {
|
|||||||
) -> Result<tonic::Response<NewContainerRes>, tonic::Status> {
|
) -> Result<tonic::Response<NewContainerRes>, tonic::Status> {
|
||||||
let req_data = request.into_inner();
|
let req_data = request.into_inner();
|
||||||
|
|
||||||
if let Some(package_url) = req_data.package_url {
|
if req_data.package_url.is_none() {
|
||||||
handle_package(package_url)
|
return Err(tonic::Status::data_loss("Package URL not provided"));
|
||||||
.await
|
|
||||||
.map_err(|err| tonic::Status::internal(err.to_string()))?;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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<dyn std::error::Error>> {
|
async fn handle_package(package_url: String) -> Result<String, Box<dyn std::error::Error>> {
|
||||||
let dir_path = Path::new("./enclave_archives");
|
let dir_path = Path::new("./enclave_archives");
|
||||||
fs::create_dir_all(dir_path).await?;
|
fs::create_dir_all(dir_path).await?;
|
||||||
|
|
||||||
@ -88,8 +97,31 @@ async fn handle_package(package_url: String) -> Result<(), Box<dyn std::error::E
|
|||||||
|
|
||||||
let unarchive_dir = format!("./enclaves/{}", utc_time);
|
let unarchive_dir = format!("./enclaves/{}", utc_time);
|
||||||
fs::create_dir_all(Path::new(&unarchive_dir)).await?;
|
fs::create_dir_all(Path::new(&unarchive_dir)).await?;
|
||||||
archive.unpack(unarchive_dir)?;
|
archive.unpack(&unarchive_dir)?;
|
||||||
|
|
||||||
|
Ok(unarchive_dir)
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn deploy_enclave(
|
||||||
|
enclave_path: String,
|
||||||
|
// enclave_name: String,
|
||||||
|
// publishing_ports: Vec<u32>,
|
||||||
|
// ...
|
||||||
|
) -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
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(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user