41 lines
1.2 KiB
Rust
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(())
|
|
}
|