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 std::sync::{Arc, Mutex};
|
||||
use std::sync::Arc;
|
||||
use tokio::sync::Mutex;
|
||||
|
||||
pub struct BollardAdapter {
|
||||
client: Arc<Mutex<Option<Docker>>>,
|
||||
@@ -22,22 +23,22 @@ impl crate::docker::DockerAdapter for BollardAdapter {
|
||||
|
||||
docker.ping().await?;
|
||||
|
||||
let mut client = self.client.lock().unwrap();
|
||||
let mut client = self.client.lock().await;
|
||||
*client = Some(docker);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn list_service_with_label(&self, label: &str) -> anyhow::Result<Vec<String>> {
|
||||
Ok(vec![])
|
||||
}
|
||||
async fn version(&self) -> anyhow::Result<String> {
|
||||
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<()> {
|
||||
Ok(())
|
||||
version.ok_or_else(|| anyhow::anyhow!("Version not available"))
|
||||
} 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<()> {
|
||||
self.adapter.connect_docker(docker_host).await
|
||||
}
|
||||
|
||||
pub async fn version(&self) -> anyhow::Result<String> {
|
||||
self.adapter.version().await
|
||||
}
|
||||
}
|
||||
|
||||
pub trait DockerAdapter {
|
||||
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 shutdown_service(&self, service_name: &str) -> anyhow::Result<()>;
|
||||
async fn start_service(&self, service_name: &str) -> anyhow::Result<()>;
|
||||
async fn version(&self) -> anyhow::Result<String>;
|
||||
}
|
||||
@@ -12,9 +12,10 @@ async fn main() -> anyhow::Result<()> {
|
||||
let envs = load_envs()?;
|
||||
|
||||
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?;
|
||||
println!("Docker version: {}", docker_conn.version().await?);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user