@@ -2,13 +2,12 @@ use crate::skatelet::apply::StdinCommand;
22use crate :: supported_resources:: SupportedResources ;
33use crate :: supported_resources:: SupportedResources :: { ClusterIssuer , CronJob , Ingress , Service } ;
44use clap:: { Args , Subcommand } ;
5+ use k8s_openapi:: api:: batch:: v1:: CronJob as K8sCronJob ;
6+ use k8s_openapi:: api:: core:: v1:: { Namespace , Secret } ;
57use std:: collections:: BTreeMap ;
68use std:: io;
79use std:: io:: Read ;
810
9- use k8s_openapi:: api:: batch:: v1:: CronJob as K8sCronJob ;
10- use k8s_openapi:: api:: core:: v1:: Secret ;
11-
1211use crate :: controllers:: clusterissuer:: ClusterIssuerController ;
1312use crate :: controllers:: cronjob:: CronjobController ;
1413use crate :: controllers:: daemonset:: DaemonSetController ;
@@ -21,6 +20,7 @@ use crate::deps::{With, WithDB};
2120use crate :: errors:: SkateError ;
2221use crate :: exec:: ShellExec ;
2322use crate :: skatelet:: VAR_PATH ;
23+ use crate :: skatelet:: database:: resource:: list_resources_by_namespace;
2424use crate :: spec;
2525use crate :: util:: SkateLabels ;
2626use k8s_openapi:: api:: core:: v1:: Service as K8sService ;
@@ -46,6 +46,7 @@ pub enum DeleteResourceCommands {
4646 Daemonset ( DeleteResourceArgs ) ,
4747 Service ( DeleteResourceArgs ) ,
4848 Clusterissuer ( DeleteResourceArgs ) ,
49+ Namespace ( DeleteResourceArgs ) ,
4950}
5051
5152#[ derive( Debug , Args , Clone ) ]
@@ -101,6 +102,10 @@ impl<D: DeleteDeps> Deleter<D> {
101102 self . delete_cluster_issuer ( args. clone ( ) , resource_args. clone ( ) )
102103 . await
103104 }
105+ DeleteResourceCommands :: Namespace ( resource_args) => {
106+ self . delete_namespace ( args. clone ( ) , resource_args. clone ( ) )
107+ . await
108+ }
104109 }
105110 }
106111
@@ -243,6 +248,23 @@ impl<D: DeleteDeps> Deleter<D> {
243248 Ok ( ( ) )
244249 }
245250
251+ async fn delete_namespace (
252+ & self ,
253+ delete_args : DeleteArgs ,
254+ resource_args : DeleteResourceArgs ,
255+ ) -> Result < ( ) , SkateError > {
256+ self . manifest_delete (
257+ & SupportedResources :: Namespace ( Namespace {
258+ metadata : Self :: deletion_metadata ( resource_args) ,
259+ spec : None ,
260+ status : None ,
261+ } ) ,
262+ delete_args. termination_grace_period ,
263+ )
264+ . await ?;
265+ Ok ( ( ) )
266+ }
267+
246268 async fn manifest_delete (
247269 & self ,
248270 object : & SupportedResources ,
@@ -291,6 +313,25 @@ impl<D: DeleteDeps> Deleter<D> {
291313 let ctrl = ClusterIssuerController :: new ( self . deps . get_db ( ) , ingress_controller) ;
292314 ctrl. delete ( issuer) . await ?;
293315 }
316+ SupportedResources :: Namespace ( ns) => {
317+ // find all resources within the ns in the db
318+ // run manifest delete on all of those
319+ // report any errors
320+ let name = match & ns. metadata . name {
321+ Some ( n) => n,
322+ None => return Err ( SkateError :: String ( "no metadata name" . to_string ( ) ) ) ,
323+ } ;
324+ let resources =
325+ list_resources_by_namespace ( & self . deps . get_db ( ) , name. as_str ( ) ) . await ?;
326+
327+ for resource in resources {
328+ let str_manifest = serde_yaml:: to_string ( & resource. manifest ) ?;
329+ let object: serde_yaml:: Value = serde_yaml:: from_str ( & str_manifest) ?;
330+ let object = SupportedResources :: try_from ( & object) ?;
331+ println ! ( "deleting {} {}" , resource. resource_type, resource. name) ;
332+ Box :: pin ( self . manifest_delete ( & object, grace_period) ) . await ?;
333+ }
334+ }
294335 }
295336 Ok ( ( ) )
296337 }
0 commit comments