From b2b9df0e2a911f4e828d716dec35b4696007ccd4 Mon Sep 17 00:00:00 2001 From: mbecker20 Date: Thu, 7 Aug 2025 18:28:47 -0700 Subject: [PATCH] correct defaults for CLI and only can pass restore folder from cli arg --- bin/cli/src/command/database.rs | 17 +++++-- bin/cli/src/config.rs | 22 +++------ client/core/rs/src/entities/config/cli.rs | 54 ++++++++++++++--------- 3 files changed, 53 insertions(+), 40 deletions(-) diff --git a/bin/cli/src/command/database.rs b/bin/cli/src/command/database.rs index 010bc13e0..def207688 100644 --- a/bin/cli/src/command/database.rs +++ b/bin/cli/src/command/database.rs @@ -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 } diff --git a/bin/cli/src/config.rs b/bin/cli/src/config.rs index ab00f94ed..c5e589986 100644 --- a/bin/cli/src/config.rs +++ b/bin/cli/src/config.rs @@ -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 diff --git a/client/core/rs/src/entities/config/cli.rs b/client/core/rs/src/entities/config/cli.rs index cf635d647..2e80bc317 100644 --- a/client/core/rs/src/entities/config/cli.rs +++ b/client/core/rs/src/entities/config/cli.rs @@ -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, // 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(),