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::models::{EndpointSettings, EndpointIpamConfig};
|
||||||
use bollard::errors::Error;
|
use bollard::errors::Error;
|
||||||
use std::collections::hash_map::HashMap;
|
use std::collections::hash_map::HashMap;
|
||||||
@@ -36,12 +36,15 @@ impl Container {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn create(&self, docker: bollard::Docker) -> Result<String, Error>{
|
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_options(self.name.clone())),
|
||||||
create_config(self.ip.clone(), self.net.clone()))
|
create_config(self.ip.clone(), self.net.clone()))
|
||||||
.await?;
|
.await?.id,
|
||||||
|
};
|
||||||
docker.start_container(&self.name, None::<StartContainerOptions<String>>).await?;
|
docker.start_container(&self.name, None::<StartContainerOptions<String>>).await?;
|
||||||
return Ok(create.id);
|
Ok(id_container)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_id(&self) -> String {
|
pub fn get_id(&self) -> String {
|
||||||
@@ -50,7 +53,30 @@ impl Container {
|
|||||||
None => String::from(""),
|
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> {
|
fn create_config(ip: String, net: String) -> Config<String> {
|
||||||
let endpoint = EndpointSettings {
|
let endpoint = EndpointSettings {
|
||||||
ipam_config: Some(EndpointIpamConfig{
|
ipam_config: Some(EndpointIpamConfig{
|
||||||
@@ -79,9 +105,3 @@ fn create_options(name: String) -> CreateContainerOptions<String> {
|
|||||||
platform: None,
|
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 bollard::Docker;
|
||||||
use env_logger;
|
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"));
|
env_logger::init_from_env(env_logger::Env::new().default_filter_or("debug"));
|
||||||
HttpServer::new(move || {
|
HttpServer::new(move || {
|
||||||
App::new()
|
App::new()
|
||||||
.wrap(Logger::default())
|
|
||||||
.app_data(data.clone())
|
.app_data(data.clone())
|
||||||
.service(hello)
|
.service(hello)
|
||||||
.service(create)
|
.service(create)
|
||||||
|
|||||||
Reference in New Issue
Block a user