Permit to start created containers
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use bollard::container::{StartContainerOptions, CreateContainerOptions, Config, NetworkingConfig};
|
||||
use bollard::container::{StartContainerOptions, CreateContainerOptions, Config, NetworkingConfig, ListContainersOptions};
|
||||
use bollard::models::{EndpointSettings, EndpointIpamConfig};
|
||||
use bollard::errors::Error;
|
||||
use std::collections::hash_map::HashMap;
|
||||
@@ -36,12 +36,15 @@ impl Container {
|
||||
}
|
||||
|
||||
async fn create(&self, docker: bollard::Docker) -> Result<String, Error>{
|
||||
let create = docker.create_container(Some(
|
||||
let id_container = match self.exist_container(docker.clone()).await? {
|
||||
Some(id_ret) => id_ret,
|
||||
None => docker.create_container(Some(
|
||||
create_options(self.name.clone())),
|
||||
create_config(self.ip.clone(), self.net.clone()))
|
||||
.await?;
|
||||
.await?.id,
|
||||
};
|
||||
docker.start_container(&self.name, None::<StartContainerOptions<String>>).await?;
|
||||
return Ok(create.id);
|
||||
Ok(id_container)
|
||||
}
|
||||
|
||||
pub fn get_id(&self) -> String {
|
||||
@@ -50,7 +53,30 @@ impl Container {
|
||||
None => String::from(""),
|
||||
}
|
||||
}
|
||||
|
||||
async fn exist_container(&self, docker: bollard::Docker) -> Result<Option<String>, Error> {
|
||||
let list = docker.list_containers(
|
||||
Some(create_search_container(self.name.clone()))
|
||||
).await?;
|
||||
Ok (if list.len() > 0 {
|
||||
list[0].id.clone()
|
||||
} else {
|
||||
None
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn create_search_container(name: String) -> ListContainersOptions<String> {
|
||||
let mut filters = HashMap::new();
|
||||
filters.insert("name".to_string(), vec![name]);
|
||||
|
||||
ListContainersOptions{
|
||||
all: true,
|
||||
filters,
|
||||
..Default::default()
|
||||
}
|
||||
}
|
||||
|
||||
fn create_config(ip: String, net: String) -> Config<String> {
|
||||
let endpoint = EndpointSettings {
|
||||
ipam_config: Some(EndpointIpamConfig{
|
||||
@@ -79,9 +105,3 @@ fn create_options(name: String) -> CreateContainerOptions<String> {
|
||||
platform: None,
|
||||
}
|
||||
}
|
||||
|
||||
async fn create(docker: bollard::Docker, name: String, ip: String, net: String) -> Result<String, Error>{
|
||||
let create = docker.create_container(Some(create_options(name.clone())), create_config(ip, net)).await?;
|
||||
docker.start_container(&name, None::<StartContainerOptions<String>>).await?;
|
||||
return Ok(create.id);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder,middleware::Logger};
|
||||
use actix_web::{get, post, web, App, HttpResponse, HttpServer, Responder};
|
||||
use bollard::Docker;
|
||||
use env_logger;
|
||||
|
||||
@@ -38,7 +38,6 @@ pub async fn start() -> std::io::Result<()> {
|
||||
env_logger::init_from_env(env_logger::Env::new().default_filter_or("debug"));
|
||||
HttpServer::new(move || {
|
||||
App::new()
|
||||
.wrap(Logger::default())
|
||||
.app_data(data.clone())
|
||||
.service(hello)
|
||||
.service(create)
|
||||
|
||||
Reference in New Issue
Block a user