correct defaults for CLI and only can pass restore folder from cli arg

This commit is contained in:
mbecker20
2025-08-07 18:28:47 -07:00
parent 6a42d47b6f
commit b2b9df0e2a
3 changed files with 53 additions and 40 deletions
+13 -4
View File
@@ -1,3 +1,5 @@
use std::path::Path;
use anyhow::Context;
use colored::Colorize;
use komodo_client::entities::{
@@ -9,7 +11,11 @@ use crate::config::cli_config;
pub async fn handle(command: &DatabaseCommand) -> anyhow::Result<()> {
match command {
DatabaseCommand::Backup { yes, .. } => backup(*yes).await,
DatabaseCommand::Restore { yes, .. } => restore(*yes).await,
DatabaseCommand::Restore {
restore_folder,
yes,
..
} => restore(restore_folder.as_deref(), *yes).await,
DatabaseCommand::Prune { yes, .. } => prune(*yes).await,
DatabaseCommand::Copy { yes, .. } => copy(*yes).await,
}
@@ -74,7 +80,10 @@ async fn backup(yes: bool) -> anyhow::Result<()> {
prune_inner().await
}
async fn restore(yes: bool) -> anyhow::Result<()> {
async fn restore(
restore_folder: Option<&Path>,
yes: bool,
) -> anyhow::Result<()> {
let config = cli_config();
println!(
@@ -110,7 +119,7 @@ async fn restore(yes: bool) -> anyhow::Result<()> {
" - Backups Folder".dimmed(),
config.backups_folder
);
if let Some(restore_folder) = &config.restore_folder {
if let Some(restore_folder) = restore_folder {
println!("{}: {restore_folder:?}", " - Restore Folder".dimmed());
}
@@ -122,7 +131,7 @@ async fn restore(yes: bool) -> anyhow::Result<()> {
database::utils::restore(
&db.db,
&config.backups_folder,
config.restore_folder.as_deref(),
restore_folder,
)
.await
}
+7 -15
View File
@@ -86,19 +86,14 @@ pub fn cli_config() -> &'static CliConfig {
_ => (None, None, None),
};
let (backups_folder, restore_folder) = match &args.command {
let backups_folder = match &args.command {
Command::Database {
command: DatabaseCommand::Backup { backups_folder, .. },
} => (backups_folder.clone(), None),
} => backups_folder.clone(),
Command::Database {
command:
DatabaseCommand::Restore {
backups_folder,
restore_folder,
..
},
} => (backups_folder.clone(), restore_folder.clone()),
_ => (None, None),
command: DatabaseCommand::Restore { backups_folder, .. },
} => backups_folder.clone(),
_ => None,
};
let (uri, address, username, password, db_name) =
match &args.command {
@@ -172,9 +167,6 @@ pub fn cli_config() -> &'static CliConfig {
max_backups: env
.komodo_cli_max_backups
.unwrap_or(config.max_backups),
restore_folder: restore_folder
.or(env.komodo_cli_restore_folder)
.or(config.restore_folder),
database_target: DatabaseConfig {
uri: uri
.or(env.komodo_cli_database_target_uri)
@@ -191,7 +183,7 @@ pub fn cli_config() -> &'static CliConfig {
db_name: db_name
.or(env.komodo_cli_database_target_db_name)
.unwrap_or(config.database_target.db_name),
app_name: String::from("komodo_cli"),
app_name: config.database_target.app_name,
},
database: DatabaseConfig {
uri: maybe_read_item_from_file(
@@ -215,7 +207,7 @@ pub fn cli_config() -> &'static CliConfig {
db_name: env
.komodo_database_db_name
.unwrap_or(config.database.db_name),
app_name: String::from("komodo_cli"),
app_name: config.database.app_name,
},
cli_logging: LogConfig {
level: args
+33 -21
View File
@@ -504,30 +504,26 @@ pub struct CliConfig {
/// if there are more backups than `max_backups`
#[serde(default = "default_max_backups")]
pub max_backups: u16,
/// A specific restore folder,
/// either absolute or relative to the `backups_folder`.
///
/// Default: None (restores most recent backup).
///
/// Example: `2025-08-04_05_05_53`
pub restore_folder: Option<PathBuf>,
// Same as Core
/// Configure database connection
#[serde(
default,
default = "default_database_config",
alias = "mongo",
skip_serializing_if = "DatabaseConfig::is_default"
skip_serializing_if = "database_config_is_default"
)]
pub database: DatabaseConfig,
/// Configure restore / copy database connection
#[serde(
default,
default = "default_database_config",
alias = "database_copy",
skip_serializing_if = "DatabaseConfig::is_default"
skip_serializing_if = "database_config_is_default"
)]
pub database_target: DatabaseConfig,
/// Logging configuration
#[serde(default, skip_serializing_if = "LogConfig::is_default")]
#[serde(
default = "default_log_config",
skip_serializing_if = "log_config_is_default"
)]
pub cli_logging: LogConfig,
/// Configure additional profiles.
#[serde(
@@ -547,6 +543,28 @@ fn default_max_backups() -> u16 {
14
}
fn default_database_config() -> DatabaseConfig {
DatabaseConfig {
app_name: String::from("komodo_cli"),
..Default::default()
}
}
fn database_config_is_default(db_config: &DatabaseConfig) -> bool {
db_config == &default_database_config()
}
fn default_log_config() -> LogConfig {
LogConfig {
location: false,
..Default::default()
}
}
fn log_config_is_default(log_config: &LogConfig) -> bool {
log_config == &default_log_config()
}
impl Default for CliConfig {
fn default() -> Self {
Self {
@@ -554,16 +572,11 @@ impl Default for CliConfig {
config_aliases: Default::default(),
cli_key: Default::default(),
cli_secret: Default::default(),
cli_logging: LogConfig {
opentelemetry_service_name: String::from("Komodo-CLI"),
location: false,
..Default::default()
},
cli_logging: default_log_config(),
backups_folder: default_backups_folder(),
max_backups: default_max_backups(),
restore_folder: Default::default(),
database: Default::default(),
database_target: Default::default(),
database: default_database_config(),
database_target: default_database_config(),
host: Default::default(),
profiles: Default::default(),
}
@@ -586,7 +599,6 @@ impl CliConfig {
cli_logging: self.cli_logging.clone(),
backups_folder: self.backups_folder.clone(),
max_backups: self.max_backups,
restore_folder: self.restore_folder.clone(),
database_target: self.database_target.sanitized(),
host: self.host.clone(),
database: self.database.sanitized(),