refactor: create container

return mapped ports and container id to client
docker container name uuid for delete
This commit is contained in:
Noor 2025-01-24 12:10:36 +00:00
parent c6bb7f5ab1
commit ee31ee5e6b
Signed by: noormohammedb
GPG Key ID: E424C39E19EFD7DF
4 changed files with 27 additions and 16 deletions

2
Cargo.lock generated

@ -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",

@ -28,26 +28,25 @@ impl DaemonState {
pub async fn create_new_container(
&mut self,
ip: String,
req_data: ContainerConfig,
unarchive_dir: String,
) -> Result<(), Box<dyn std::error::Error>> {
) -> Result<Vec<(u16, u16)>, Box<dyn std::error::Error>> {
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)
}
}

@ -52,7 +52,6 @@ impl DaemonServicePB for DaemonServer {
&self,
request: tonic::Request<ContainerPB>,
) -> Result<tonic::Response<NewContainerRes>, 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<detee_shared::pb::shared::Uuid>,

@ -42,7 +42,7 @@ pub async fn handle_package(package_url: String) -> Result<String> {
pub async fn deploy_enclave(
enclave_path: &str,
// enclave_name: String,
container_name_uuid: String,
publishing_ports: Vec<u32>,
// ...
) -> Result<Vec<(u16, u16)>, Box<dyn std::error::Error>> {
@ -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);