36 lines
1.0 KiB
Rust
36 lines
1.0 KiB
Rust
use bollard::Docker;
|
|
use clap::{Arg, ArgMatches, Command};
|
|
|
|
use crate::{Config, DbPool, srvmgr};
|
|
|
|
use std::fs;
|
|
|
|
use diesel::prelude::*;
|
|
|
|
pub fn create_subcommand() -> Command {
|
|
Command::new("remove")
|
|
.about("remove a server")
|
|
.arg(Arg::new("NAME").required(true))
|
|
}
|
|
|
|
pub async fn subcommand(arguments: &ArgMatches, pool: &DbPool, docker: &Docker) -> Result<(), String> {
|
|
use crate::schema::servers::dsl::*;
|
|
let server_name = arguments.get_one::<String>("NAME").unwrap();
|
|
|
|
let config = Config::load();
|
|
|
|
let conn = &mut pool.get().unwrap();
|
|
|
|
let _ = srvmgr::stop_server(docker, pool, server_name).await;
|
|
|
|
let deleted = diesel::delete(servers.filter(name.eq(server_name))).execute(conn).map_err(|_| "failed to delete from db".to_string())?;
|
|
if deleted != 1 {
|
|
return Err("servver was not found".to_string());
|
|
}
|
|
|
|
let path = config.config_path + "/" + server_name;
|
|
|
|
fs::remove_dir_all(path).map_err(|e| format!("failed to remove the server directory, reason : {}", e))?;
|
|
Ok(())
|
|
}
|