Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions cmd/kor/namespaces.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package kor

import (
"fmt"

"github.com/spf13/cobra"

"github.com/yonahd/kor/pkg/kor"
"github.com/yonahd/kor/pkg/utils"
)

var namespaceCmd = &cobra.Command{
Use: "namespace",
Aliases: []string{"ns", "namespaces"},
Short: "Gets unused namespaces",
Args: cobra.ExactArgs(0),
Run: func(cmd *cobra.Command, args []string) {
clientset := kor.GetKubeClient(kubeconfig)
if response, err := kor.GetUnusedNamespaces(filterOptions, clientset, outputFormat, opts); err != nil {
fmt.Println(err)
} else {
utils.PrintLogo(outputFormat)
fmt.Println(response)
}
},
}

func init() {
rootCmd.AddCommand(namespaceCmd)
}
14 changes: 14 additions & 0 deletions pkg/kor/all.go
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,18 @@ func getUnusedRoleBindings(clientset kubernetes.Interface, namespace string, fil
return namespaceRoleBindingDiff
}

func getUnusedNamespaces(clientset kubernetes.Interface, filterOpts *filters.Options, opts common.Opts) ResourceDiff {
namespaceDiff, err := processNamespaces(clientset, filterOpts, opts)
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to get %s: %v\n", "namespaces", err)
}
allNamespaceDiff := ResourceDiff{
"Namespace",
namespaceDiff,
}
return allNamespaceDiff
}

func GetUnusedAllNamespaced(filterOpts *filters.Options, clientset kubernetes.Interface, outputFormat string, opts common.Opts) (string, error) {
resources := make(map[string]map[string][]ResourceInfo)
for _, namespace := range filterOpts.Namespaces(clientset) {
Expand Down Expand Up @@ -377,13 +389,15 @@ func GetUnusedAllNonNamespaced(filterOpts *filters.Options, clientset kubernetes
resources[""]["ClusterRoleBinding"] = getUnusedClusterRoleBindings(clientset, filterOpts, opts).diff
resources[""]["StorageClass"] = getUnusedStorageClasses(clientset, filterOpts).diff
resources[""]["VolumeAttachment"] = getUnusedVolumeAttachments(clientset, filterOpts).diff
resources[""]["Namespace"] = getUnusedNamespaces(clientset, filterOpts, opts).diff
case "resource":
appendResources(resources, "Crd", "", getUnusedCrds(apiExtClient, dynamicClient, filterOpts).diff)
appendResources(resources, "Pv", "", getUnusedPvs(clientset, filterOpts).diff)
appendResources(resources, "ClusterRole", "", getUnusedClusterRoles(clientset, filterOpts).diff)
appendResources(resources, "ClusterRoleBinding", "", getUnusedClusterRoleBindings(clientset, filterOpts, opts).diff)
appendResources(resources, "StorageClass", "", getUnusedStorageClasses(clientset, filterOpts).diff)
appendResources(resources, "VolumeAttachment", "", getUnusedVolumeAttachments(clientset, filterOpts).diff)
appendResources(resources, "Namespace", "", getUnusedNamespaces(clientset, filterOpts, opts).diff)

}

Expand Down
3 changes: 3 additions & 0 deletions pkg/kor/exceptions/namespaces/namespaces.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"exceptionNamespaces": []
}
1 change: 1 addition & 0 deletions pkg/kor/kor.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ type Config struct {
ExceptionJobs []ExceptionResource `json:"exceptionJobs"`
ExceptionPdbs []ExceptionResource `json:"exceptionPdbs"`
ExceptionRoleBindings []ExceptionResource `json:"exceptionRoleBindings"`
ExceptionNamespaces []ExceptionResource `json:"exceptionNamespaces"`
// Add other configurations if needed
}

Expand Down
4 changes: 4 additions & 0 deletions pkg/kor/multi.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,10 @@ func retrieveNoNamespaceDiff(clientset kubernetes.Interface, apiExtClient apiext
vattsDiff := getUnusedVolumeAttachments(clientset, filterOpts)
noNamespaceDiff = append(noNamespaceDiff, vattsDiff)
markedForRemoval[counter] = true
case "namespace":
namespaceDiff := getUnusedNamespaces(clientset, filterOpts, opts)
noNamespaceDiff = append(noNamespaceDiff, namespaceDiff)
markedForRemoval[counter] = true
}
}

Expand Down
Loading