Skip to content

Commit dcac5a5

Browse files
[#77] Add namespace existence check and list available namespaces in service commands
1 parent 292c9ca commit dcac5a5

1 file changed

Lines changed: 67 additions & 0 deletions

File tree

cli/src/service.rs

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,58 @@
11
use std::process::Command;
22
use std::str;
33

4+
fn check_namespace_exists(namespace: &str) -> bool {
5+
let output = Command::new("kubectl")
6+
.args(["get", "namespace", namespace])
7+
.output();
8+
9+
match output {
10+
Ok(output) => output.status.success(),
11+
Err(_) => false,
12+
}
13+
}
14+
15+
fn get_available_namespaces() -> Vec<String> {
16+
let output = Command::new("kubectl")
17+
.args(["get", "namespaces", "--no-headers", "-o", "custom-columns=NAME:.metadata.name"])
18+
.output();
19+
20+
match output {
21+
Ok(output) if output.status.success() => {
22+
let stdout = str::from_utf8(&output.stdout).unwrap_or("");
23+
stdout.lines()
24+
.map(|line| line.trim().to_string())
25+
.filter(|line| !line.is_empty())
26+
.collect()
27+
}
28+
_ => Vec::new(),
29+
}
30+
}
31+
432
pub fn list_services(namespace: Option<String>) {
533
let ns = namespace.unwrap_or_else(|| "cortexflow".to_string());
634

735
println!("Listing services in namespace: {}", ns);
836

37+
// Check if namespace exists first
38+
if !check_namespace_exists(&ns) {
39+
let available_namespaces = get_available_namespaces();
40+
41+
println!("\n❌ Namespace '{}' not found", ns);
42+
println!("{}", "=".repeat(50));
43+
44+
if !available_namespaces.is_empty() {
45+
println!("\n📋 Available namespaces:");
46+
for available_ns in &available_namespaces {
47+
println!(" • {}", available_ns);
48+
}
49+
} else {
50+
println!("No namespaces found in the cluster.");
51+
}
52+
53+
std::process::exit(1);
54+
}
55+
956
// kubectl command to get services
1057
let output = Command::new("kubectl")
1158
.args(["get", "pods", "-n", &ns, "--no-headers"])
@@ -64,6 +111,26 @@ pub fn describe_service(service_name: String, namespace: Option<String>) {
64111
println!("Describing service '{}' in namespace: {}", service_name, ns);
65112
println!("{}", "=".repeat(60));
66113

114+
// Check if namespace exists first
115+
if !check_namespace_exists(&ns) {
116+
let available_namespaces = get_available_namespaces();
117+
118+
println!("\n❌ Namespace '{}' not found", ns);
119+
println!("{}", "=".repeat(50));
120+
121+
if !available_namespaces.is_empty() {
122+
println!("\n📋 Available namespaces:");
123+
for available_ns in &available_namespaces {
124+
println!(" • {}", available_ns);
125+
}
126+
println!("\nTry: cortex service describe {} --namespace <namespace-name>", service_name);
127+
} else {
128+
println!("No namespaces found in the cluster.");
129+
}
130+
131+
std::process::exit(1);
132+
}
133+
67134
// Execute kubectl describe pod command
68135
let output = Command::new("kubectl")
69136
.args(["describe", "pod", &service_name, "-n", &ns])

0 commit comments

Comments
 (0)