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 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::Response<NewContainerRes>, 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<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");
|
||||
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);
|
||||
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(())
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user