simple deployment functionality and package handling
This commit is contained in:
		
							parent
							
								
									eb811bb2db
								
							
						
					
					
						commit
						577a39fe1f
					
				
							
								
								
									
										44
									
								
								src/grpc.rs
									
									
									
									
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										44
									
								
								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")); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         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 |             .await | ||||||
|             .map_err(|err| tonic::Status::internal(err.to_string()))?; |             .map_err(|err| tonic::Status::internal(err.to_string()))?; | ||||||
|         } |  | ||||||
| 
 | 
 | ||||||
|         Ok(tonic::Response::new(NewContainerRes::default())) |         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