@@ -25,21 +25,20 @@ import (
25
25
"github.com/ketches/kube-recycle-bin/internal/api"
26
26
krbclient "github.com/ketches/kube-recycle-bin/internal/client"
27
27
"github.com/ketches/kube-recycle-bin/internal/completion"
28
+ "github.com/ketches/kube-recycle-bin/pkg/kube"
28
29
"github.com/ketches/kube-recycle-bin/pkg/tlog"
29
30
"github.com/spf13/cobra"
31
+ "k8s.io/apimachinery/pkg/labels"
30
32
"k8s.io/apimachinery/pkg/util/duration"
31
33
"sigs.k8s.io/controller-runtime/pkg/client"
32
34
)
33
35
34
36
type GetRecycleItemFlags struct {
35
- Group string
36
- Version string
37
- Kind string
38
- Namespace string
39
- AllNamespaces bool
37
+ ObjectResource string
38
+ ObjectNamespace string
40
39
}
41
40
42
- var getRecycylItemFlags GetRecycleItemFlags
41
+ var getRecycleItemFlags GetRecycleItemFlags
43
42
44
43
// getRecycleItemCmd represents the get recycle item command
45
44
var getRecycleItemCmd = & cobra.Command {
@@ -48,11 +47,17 @@ var getRecycleItemCmd = &cobra.Command{
48
47
Short : "Get recycle items" ,
49
48
Long : `Get recycle items. This command retrieves the specified RecycleItem resources.` ,
50
49
Example : `
50
+ # Get all RecycleItems
51
+ krb-cli get ri
52
+
51
53
# Get RecycleItems with names foo and bar
52
- krb-cli get recycleitems foo bar
54
+ krb-cli get ri foo bar
55
+
56
+ # Get RecycleItems recycled from deployments resource
57
+ krb-cli get ri --object-resource deployments
53
58
54
- # Get all RecyclePolicies
55
- krb-cli get recyclepolicies
59
+ # Get RecycleItems recycled from dev namespace
60
+ krb-cli get ri --object-namespace dev
56
61
` ,
57
62
Run : func (cmd * cobra.Command , args []string ) {
58
63
runGetRecycleItems (args )
@@ -63,28 +68,42 @@ krb-cli get recyclepolicies
63
68
func init () {
64
69
getCmd .AddCommand (getRecycleItemCmd )
65
70
66
- getRecycleItemCmd .Flags ().StringVarP (& getRecycylItemFlags .Group , "group" , "g" , "" , "List resources of the specified group" )
67
- getRecycleItemCmd .Flags ().StringVarP (& getRecycylItemFlags .Kind , "kind" , "k" , "" , "List resources of the specified kind" )
68
- getRecycleItemCmd .Flags ().StringVarP (& getRecycylItemFlags .Version , "version" , "v" , "" , "List resources with the specified version" )
69
- getRecycleItemCmd .Flags ().StringVarP (& getRecycylItemFlags .Namespace , "namespace" , "n" , "default" , "List resources in the specified namespace" )
70
- getRecycleItemCmd .Flags ().BoolVarP (& getRecycylItemFlags .AllNamespaces , "all-namespaces" , "A" , false , "List resources from all namespaces" )
71
+ getRecycleItemCmd .Flags ().StringVarP (& getRecycleItemFlags .ObjectResource , "object-resource" , "" , "" , "List recycled resource objects filtered by the specified object resource" )
72
+ getRecycleItemCmd .Flags ().StringVarP (& getRecycleItemFlags .ObjectNamespace , "object-namespace" , "" , "" , "List recycled resource objects filtered by the specified object namespace" )
71
73
72
- getRecycleItemCmd .MarkFlagsMutuallyExclusive ("namespace" , "all-namespaces" )
74
+ getRecycleItemCmd .RegisterFlagCompletionFunc ("object-resource" , completion .RecycleItemGroupResource )
75
+ getRecycleItemCmd .RegisterFlagCompletionFunc ("object-namespace" , completion .RecycleItemNamespace )
73
76
}
74
77
75
78
func runGetRecycleItems (args []string ) {
76
79
var result api.RecycleItemList
80
+
77
81
if len (args ) > 0 {
78
- for _ , objName := range args {
79
- obj , err := krbclient .RecycleItem ().Get (context .Background (), objName , client.GetOptions {})
82
+ for _ , name := range args {
83
+ obj , err := krbclient .RecycleItem ().Get (context .Background (), name , client.GetOptions {})
80
84
if err != nil {
81
- tlog .Errorf ("✗ failed to get RecycleItem [%s]: %v, skipping." , objName , err )
85
+ tlog .Errorf ("✗ failed to get RecycleItem [%s]: %v, skipping." , name , err )
82
86
continue
83
87
}
84
88
result .Items = append (result .Items , * obj )
85
89
}
86
90
} else {
87
- list , err := krbclient .RecycleItem ().List (context .Background (), client.ListOptions {})
91
+ labelSet := labels.Set {}
92
+ if getRecycleItemFlags .ObjectNamespace != "" {
93
+ labelSet ["krb.ketches.cn/object-namespace" ] = getRecycleItemFlags .ObjectNamespace
94
+ }
95
+ if getRecycleItemFlags .ObjectResource != "" {
96
+ tlog .Println (getRecycleItemFlags .ObjectResource )
97
+ if gvr , err := kube .GetPreferredGroupVersionResourceFor (getRecycleItemFlags .ObjectResource ); err != nil {
98
+ tlog .Panicf ("✗ failed to get preferred group version resource: %v" , err )
99
+ } else {
100
+ labelSet ["krb.ketches.cn/object-gr" ] = gvr .GroupResource ().String ()
101
+ }
102
+ }
103
+
104
+ list , err := krbclient .RecycleItem ().List (context .Background (), client.ListOptions {
105
+ LabelSelector : labels .SelectorFromSet (labelSet ),
106
+ })
88
107
if err != nil {
89
108
tlog .Panicf ("✗ failed to list RecycleItem: %v" , err )
90
109
return
@@ -97,7 +116,7 @@ func runGetRecycleItems(args []string) {
97
116
t .AppendHeader (table.Row {"name" , "group" , "version" , "kind" , "namespace" , "name" , "age" })
98
117
99
118
for _ , obj := range result .Items {
100
- t .AppendRow (table.Row {obj .Name , obj .Object .Group , obj .Object .Version , obj .Object .Kind , obj .Object .Namespace , obj .Object .Name , duration .HumanDuration (time .Since (obj .CreationTimestamp .Time ))}, table.RowConfig {
119
+ t .AppendRow (table.Row {obj .Name , obj .Object .Group , obj .Object .Version , obj .Object .Resource , obj .Object .Namespace , obj .Object .Name , duration .HumanDuration (time .Since (obj .CreationTimestamp .Time ))}, table.RowConfig {
101
120
AutoMerge : true ,
102
121
})
103
122
}
0 commit comments