|
|
@@ -100,8 +100,7 @@ async fn main() -> Result<()> {
|
|
|
cluster,
|
|
|
follow,
|
|
|
} => {
|
|
|
- let recipe = load_recipe(&recipe_name).await?;
|
|
|
- let (cluster, _) = resolve_cluster(&config, &recipe, &cluster)?;
|
|
|
+ let cluster = resolve_cluster_for_op(&config, &recipe_name, &cluster).await?;
|
|
|
docker::show_logs(&config, &cluster, &recipe_name, follow, dry_run).await?;
|
|
|
}
|
|
|
Commands::Stop {
|
|
|
@@ -109,8 +108,7 @@ async fn main() -> Result<()> {
|
|
|
cluster,
|
|
|
node,
|
|
|
} => {
|
|
|
- let recipe = load_recipe(&recipe_name).await?;
|
|
|
- let (cluster, _) = resolve_cluster(&config, &recipe, &cluster)?;
|
|
|
+ let cluster = resolve_cluster_for_op(&config, &recipe_name, &cluster).await?;
|
|
|
docker::stop_cluster(&config, &cluster, &recipe_name, node.as_deref(), dry_run).await?;
|
|
|
}
|
|
|
Commands::Health {
|
|
|
@@ -198,3 +196,26 @@ async fn main() -> Result<()> {
|
|
|
|
|
|
Ok(())
|
|
|
}
|
|
|
+
|
|
|
+/// Resolve a cluster for container operations (stop/logs).
|
|
|
+/// When `auto`, tries live container label lookup first, then falls back
|
|
|
+/// to config-based auto-selection (for dry-run / offline scenarios).
|
|
|
+async fn resolve_cluster_for_op(
|
|
|
+ config: &Config,
|
|
|
+ recipe_name: &str,
|
|
|
+ cluster_name: &str,
|
|
|
+) -> Result<Cluster> {
|
|
|
+ if cluster_name != "auto" {
|
|
|
+ let recipe = load_recipe(recipe_name).await?;
|
|
|
+ let (cluster, _) = resolve_cluster(config, &recipe, cluster_name)?;
|
|
|
+ return Ok(cluster);
|
|
|
+ }
|
|
|
+ // Try live container label lookup first
|
|
|
+ if let Ok(c) = docker::resolve_cluster_by_container_label(config, recipe_name).await {
|
|
|
+ return Ok(c.clone());
|
|
|
+ }
|
|
|
+ // Fall back to config-based auto (dry-run / containers not running)
|
|
|
+ let recipe = load_recipe(recipe_name).await?;
|
|
|
+ let (cluster, _) = resolve_cluster(config, &recipe, "auto")?;
|
|
|
+ Ok(cluster)
|
|
|
+}
|