Refactor Docker integration: update BollardAdapter to use async Mutex, implement version retrieval, and clean up unused service methods.
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
use bollard::Docker;
|
use bollard::Docker;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::Arc;
|
||||||
|
use tokio::sync::Mutex;
|
||||||
|
|
||||||
pub struct BollardAdapter {
|
pub struct BollardAdapter {
|
||||||
client: Arc<Mutex<Option<Docker>>>,
|
client: Arc<Mutex<Option<Docker>>>,
|
||||||
@@ -22,22 +23,22 @@ impl crate::docker::DockerAdapter for BollardAdapter {
|
|||||||
|
|
||||||
docker.ping().await?;
|
docker.ping().await?;
|
||||||
|
|
||||||
let mut client = self.client.lock().unwrap();
|
let mut client = self.client.lock().await;
|
||||||
*client = Some(docker);
|
*client = Some(docker);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn list_service_with_label(&self, label: &str) -> anyhow::Result<Vec<String>> {
|
async fn version(&self) -> anyhow::Result<String> {
|
||||||
Ok(vec![])
|
let client = self.client.lock().await;
|
||||||
}
|
if let Some(docker) = &*client {
|
||||||
|
let version_info = docker.version().await?;
|
||||||
|
let version = version_info.version;
|
||||||
|
|
||||||
async fn shutdown_service(&self, service_name: &str) -> anyhow::Result<()> {
|
version.ok_or_else(|| anyhow::anyhow!("Version not available"))
|
||||||
Ok(())
|
} else {
|
||||||
}
|
Err(anyhow::anyhow!("Docker client is not connected"))
|
||||||
|
}
|
||||||
async fn start_service(&self, service_name: &str) -> anyhow::Result<()> {
|
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -14,11 +14,13 @@ impl<T: DockerAdapter> Docker<T> {
|
|||||||
pub async fn connect_docker(&self, docker_host: Option<String>) -> anyhow::Result<()> {
|
pub async fn connect_docker(&self, docker_host: Option<String>) -> anyhow::Result<()> {
|
||||||
self.adapter.connect_docker(docker_host).await
|
self.adapter.connect_docker(docker_host).await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn version(&self) -> anyhow::Result<String> {
|
||||||
|
self.adapter.version().await
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait DockerAdapter {
|
pub trait DockerAdapter {
|
||||||
async fn connect_docker(&self, docker_host: Option<String>) -> anyhow::Result<()>;
|
async fn connect_docker(&self, docker_host: Option<String>) -> anyhow::Result<()>;
|
||||||
async fn list_service_with_label(&self, label: &str) -> anyhow::Result<Vec<String>>;
|
async fn version(&self) -> anyhow::Result<String>;
|
||||||
async fn shutdown_service(&self, service_name: &str) -> anyhow::Result<()>;
|
|
||||||
async fn start_service(&self, service_name: &str) -> anyhow::Result<()>;
|
|
||||||
}
|
}
|
||||||
@@ -12,9 +12,10 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
let envs = load_envs()?;
|
let envs = load_envs()?;
|
||||||
|
|
||||||
let backup_root_path = std::path::Path::new(&envs.backup_folder);
|
let backup_root_path = std::path::Path::new(&envs.backup_folder);
|
||||||
let folders = list_folders(backup_root_path).await?;
|
let _folders = list_folders(backup_root_path).await?;
|
||||||
|
|
||||||
let docker_conn = connect_docker(envs.docker_host).await?;
|
let docker_conn = connect_docker(envs.docker_host).await?;
|
||||||
|
println!("Docker version: {}", docker_conn.version().await?);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user