瀏覽代碼

feat: add --cluster to docker stop and logs commands

Previously stop and logs always auto-selected a cluster, ignoring
any --cluster parameter (which didn't exist on the docker variants).

- Added --cluster (default: auto) to docker Logs and Stop CLI variants
- Handlers now use load_recipe + resolve_cluster to respect --cluster
- Removed unused resolve_cluster_for_recipe helper

Usage: sm121-launcher stop --recipe glm52 --cluster 4nodes-switch
       sm121-launcher logs --recipe glm52 --cluster 4nodes-switch
Alexander Korolev 4 月之前
父節點
當前提交
d05805c577
共有 3 個文件被更改,包括 13 次插入 和 12 次删除
  1. 6 0
      src/cli.rs
  2. 0 9
      src/config.rs
  3. 7 3
      src/main.rs

+ 6 - 0
src/cli.rs

@@ -43,6 +43,9 @@ pub enum Commands {
 
         #[arg(long, action = clap::ArgAction::SetTrue)]
         follow: bool,
+
+        #[arg(long, default_value = "auto")]
+        cluster: String,
     },
 
     /// Остановить кластер
@@ -53,6 +56,9 @@ pub enum Commands {
         /// Target a specific node within the cluster (default: all).
         #[arg(long)]
         node: Option<String>,
+
+        #[arg(long, default_value = "auto")]
+        cluster: String,
     },
 
     /// Проверить здоровье кластера

+ 0 - 9
src/config.rs

@@ -227,15 +227,6 @@ pub async fn load_recipe(recipe_name: &str) -> Result<Recipe> {
 pub fn default_config_dir() -> Option<std::path::PathBuf> {
     dirs::config_dir().map(|p| p.join("sm121-launcher"))
 }
-/// Resolves the cluster for a recipe (stop/logs flow).
-pub async fn resolve_cluster_for_recipe(
-    config: &Config,
-    recipe_name: &str,
-) -> Result<(Cluster, Recipe)> {
-    let recipe = load_recipe(recipe_name).await?;
-    let (cluster, _) = resolve_cluster(config, &recipe, "auto")?;
-    Ok((cluster, recipe))
-}
 #[cfg(test)]
 mod tests {
     use super::*;

+ 7 - 3
src/main.rs

@@ -21,7 +21,7 @@ mod tmux;
 
 use crate::cli::{Cli, Commands};
 use crate::config::{
-    Cluster, Config, default_config_dir, resolve_cluster_for_recipe, select_cluster_by_name,
+    Cluster, Config, default_config_dir, load_recipe, resolve_cluster, select_cluster_by_name,
 };
 use crate::ssh::fetch_host_key;
 
@@ -97,16 +97,20 @@ async fn main() -> Result<()> {
         }
         Commands::Logs {
             recipe: recipe_name,
+            cluster,
             follow,
         } => {
-            let (cluster, _recipe) = resolve_cluster_for_recipe(&config, &recipe_name).await?;
+            let recipe = load_recipe(&recipe_name).await?;
+            let (cluster, _) = resolve_cluster(&config, &recipe, &cluster)?;
             docker::show_logs(&config, &cluster, &recipe_name, follow, dry_run).await?;
         }
         Commands::Stop {
             recipe: recipe_name,
+            cluster,
             node,
         } => {
-            let (cluster, _recipe) = resolve_cluster_for_recipe(&config, &recipe_name).await?;
+            let recipe = load_recipe(&recipe_name).await?;
+            let (cluster, _) = resolve_cluster(&config, &recipe, &cluster)?;
             docker::stop_cluster(&config, &cluster, &recipe_name, node.as_deref(), dry_run).await?;
         }
         Commands::Health {