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, // ... ) -> Result> { let port_map = prepare_port_map(publishing_ports).await; let port_maping_string = port_map .iter() .map(|(host, container)| format!("-p {host}:{container}")) .collect::>() .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(()) }