1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
pub mod container;
pub mod error;
pub mod image;
pub use bollard::{auth::DockerCredentials, Docker};
use crate::error::Result;
use crate::image::Image;
use std::io::Write;
pub struct McaiDocker {
credentials: Option<DockerCredentials>,
docker: Docker,
}
pub struct ConfigOptions {}
impl McaiDocker {
pub fn new(docker: Docker) -> Self {
McaiDocker {
docker,
credentials: None,
}
}
pub fn with_credential(mut self, credentials: DockerCredentials) -> Self {
self.credentials = Some(credentials);
self
}
pub async fn describe_worker(
&self,
docker_image_name: &str,
stream: Option<&mut (dyn Write + Send)>,
) -> Result<()> {
let builder = Image::new(docker_image_name)
.with_optional_credentials(self.credentials.clone())
.build(&self.docker)
.await?;
let container = builder.with_env("DESCRIBE", &1).build(&self.docker).await?;
container.run(&self.docker, stream).await?;
container.remove(&self.docker, true).await
}
pub async fn run_worker_with_source_orders(
&self,
docker_image_name: &str,
source_orders: &[&str],
stream: Option<&mut (dyn Write + Send)>,
) -> Result<()> {
self
.run_worker(
docker_image_name,
&[("SOURCE_ORDERS", &source_orders.join(":"))],
stream,
)
.await
}
pub async fn run_worker(
&self,
docker_image_name: &str,
envs: &[(&str, &(dyn ToString + Send + Sync))],
stream: Option<&mut (dyn Write + Send)>,
) -> Result<()> {
let builder = Image::new(docker_image_name)
.with_optional_credentials(self.credentials.clone())
.build(&self.docker)
.await?;
let container = builder
.with_enable_tty()
.with_envs(envs)
.build(&self.docker)
.await?;
container.run(&self.docker, stream).await?;
container.remove(&self.docker, true).await
}
}