diff --git a/Cargo.lock b/Cargo.lock index dd5a038..5d4ee6f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -316,7 +316,7 @@ dependencies = [ [[package]] name = "detee-shared" version = "0.1.0" -source = "git+ssh://git@gitea.detee.cloud/noormohammedb/detee-shared#3cb47a47e824edb4df8f2057f3d9dfa2a04f9e76" +source = "git+ssh://git@gitea.detee.cloud/noormohammedb/detee-shared#bb553f08af6178d1b0da57234311eaf2809ca648" dependencies = [ "base64", "prost", diff --git a/src/data.rs b/src/data.rs index 499fad1..3e46a10 100644 --- a/src/data.rs +++ b/src/data.rs @@ -28,26 +28,25 @@ impl DaemonState { pub async fn create_new_container( &mut self, - ip: String, req_data: ContainerConfig, unarchive_dir: String, - ) -> Result<(), Box> { + ) -> Result, Box> { let publishing_ports = req_data.resource.clone().unwrap().port; - - let mapped_ports = deploy_enclave(&unarchive_dir, publishing_ports).await?; + let uuid = req_data.uuid.unwrap_or_default().uuid; + let mapped_ports = deploy_enclave(&unarchive_dir, uuid.clone(), publishing_ports).await?; let container = Container { - uuid: req_data.uuid.unwrap_or_default().uuid, + uuid, name: "".to_string(), package_path: unarchive_dir, status: "running".to_string(), - admin: ip, + admin: req_data.admin_pubkey, container_resource: req_data.resource.unwrap(), - mapped_ports, + mapped_ports: mapped_ports.clone(), }; self.containers.push(container); - Ok(()) + Ok(mapped_ports) } } diff --git a/src/grpc.rs b/src/grpc.rs index 004629c..8eb89fe 100644 --- a/src/grpc.rs +++ b/src/grpc.rs @@ -52,7 +52,6 @@ impl DaemonServicePB for DaemonServer { &self, request: tonic::Request, ) -> Result, tonic::Status> { - let req_ip = request.remote_addr().unwrap().to_string(); let req_data = request.into_inner(); if req_data.package_url.is_none() || req_data.resource.is_none() { @@ -64,19 +63,32 @@ impl DaemonServicePB for DaemonServer { let req_container = ContainerConfig::decode(&req_data.encode_to_vec()[..]).unwrap(); - self.data + let mapped_ports = self + .data .write() .await - .create_new_container(req_ip, req_container, unarchive_dir) + .create_new_container(req_container, unarchive_dir) .await .map_err(|err| tonic::Status::internal(err.to_string()))?; + let mapped_ports = mapped_ports + .into_iter() + .map(|(host, container)| detee_shared::pb::shared::MappedPort { + host_port: host.into(), + container_port: container.into(), + }) + .collect(); + return Ok(tonic::Response::new(NewContainerRes { - container_id: None, + container_id: Some(detee_shared::pb::shared::Uuid { + uuid: req_data.uuid.unwrap_or_default().uuid, + }), status: "success".to_string(), ip_address: "".to_string(), + mapped_ports, })); } + async fn inspect_container( &self, req: tonic::Request, diff --git a/src/package.rs b/src/package.rs index 05c765c..95d7c4b 100644 --- a/src/package.rs +++ b/src/package.rs @@ -42,7 +42,7 @@ pub async fn handle_package(package_url: String) -> Result { pub async fn deploy_enclave( enclave_path: &str, - // enclave_name: String, + container_name_uuid: String, publishing_ports: Vec, // ... ) -> Result, Box> { @@ -56,8 +56,8 @@ pub async fn deploy_enclave( println!("Deploying enclave: {:?}", enclave_path); let docker_deploy_str = format!( - r#"docker run -v {enclave_path}/enclave_packager:/enclave_packager --device /dev/sgx/enclave \ - --device /dev/sgx/provision {port_maping_string} noormohammedb/occlum-enclave:v1"# + r#"docker run --name dtpm-{container_name_uuid} -v {enclave_path}/enclave_packager:/enclave_packager \ + --device /dev/sgx/enclave --device /dev/sgx/provision {port_maping_string} noormohammedb/occlum-enclave:v1"# ); println!("{}", &docker_deploy_str);