47 lines
1.3 KiB
Rust
47 lines
1.3 KiB
Rust
use bollard::{Docker, errors::Error};
|
|
|
|
use crate::config::Service;
|
|
|
|
use std::collections::HashMap;
|
|
use std::default::Default;
|
|
|
|
pub async fn running_containers() -> Result<Vec<String>, Error> {
|
|
let mut names: Vec<String> = Default::default();
|
|
|
|
let docker = Docker::connect_with_socket_defaults()?;
|
|
|
|
let mut list_container_filters = HashMap::new();
|
|
list_container_filters.insert(String::from("status"), vec![String::from("running")]);
|
|
|
|
let containers = &docker
|
|
.list_containers(Some(
|
|
bollard::query_parameters::ListContainersOptionsBuilder::default()
|
|
.all(true)
|
|
.filters(&list_container_filters)
|
|
.build(),
|
|
))
|
|
.await?;
|
|
|
|
for c in containers {
|
|
if let Some(c_names) = &c.names {
|
|
for name in c_names {
|
|
names.push(name.clone());
|
|
}
|
|
}
|
|
}
|
|
|
|
Ok(names)
|
|
}
|
|
|
|
pub async fn running_services(services: &Vec<Service>) -> Result<Vec<bool>, Error> {
|
|
let running = running_containers().await?;
|
|
|
|
let mut status: Vec<bool> = Default::default();
|
|
|
|
for service in services.iter() {
|
|
let service_status: bool = service.containers.iter().all(|name| running.contains(name));
|
|
status.push(service_status);
|
|
}
|
|
Ok(status)
|
|
}
|