sgx-daemon/src/container.rs
Noor 720fabb022
feat: implement enclave deletion functionality
refactor container handling methods
seperated utility methods
2025-01-27 10:22:34 +00:00

41 lines
1.2 KiB
Rust

use anyhow::Result;
use std::process::Command;
use crate::utils::prepare_port_map;
pub async fn deploy_enclave(
enclave_path: &str,
container_name_uuid: String,
publishing_ports: Vec<u32>,
// ...
) -> Result<Vec<(u16, u16)>> {
let port_map = prepare_port_map(publishing_ports).await;
let port_maping_string = port_map
.iter()
.map(|(host, container)| format!("-p {host}:{container}"))
.collect::<Vec<_>>()
.join(" ");
println!("Deploying enclave: {:?}", enclave_path);
let docker_deploy_str = format!(
r#"docker run --name {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"#
);
let _child = Command::new("sh")
.arg("-c")
.arg(docker_deploy_str)
.spawn()?;
Ok(port_map)
}
pub fn delete_enclave(container_name_uuid: String) -> Result<()> {
println!("Deleting enclave: {:?}", &container_name_uuid);
let docker_rm_str = format!(r#"docker container rm -f {container_name_uuid}"#);
let _child = Command::new("sh").arg("-c").arg(docker_rm_str).spawn()?;
Ok(())
}