@@ -27,10 +27,12 @@ import (
27
27
"github.com/ketches/kube-recycle-bin/internal/api"
28
28
krbclient "github.com/ketches/kube-recycle-bin/internal/client"
29
29
"github.com/ketches/kube-recycle-bin/internal/consts"
30
+ "github.com/ketches/kube-recycle-bin/pkg/kube"
30
31
"github.com/ketches/kube-recycle-bin/pkg/tlog"
32
+ "github.com/ketches/kube-recycle-bin/pkg/util"
31
33
admissionv1 "k8s.io/api/admission/v1"
32
34
k8serrors "k8s.io/apimachinery/pkg/api/errors"
33
- "k8s.io/apimachinery/pkg/types "
35
+ "k8s.io/apimachinery/pkg/runtime/schema "
34
36
"k8s.io/client-go/util/retry"
35
37
"sigs.k8s.io/controller-runtime/pkg/client"
36
38
"sigs.k8s.io/controller-runtime/pkg/log"
@@ -78,26 +80,23 @@ func recycleDeleteObjects(w http.ResponseWriter, r *http.Request) {
78
80
}
79
81
80
82
request := review .Request
81
- tlog .Infof ("» prepare to recycle deleted object: %s - %s" , request .Kind .String (), types.NamespacedName {
82
- Name : request .Name ,
83
- Namespace : request .Namespace ,
84
- }.String ())
85
83
86
84
// Create RecycleItem to recycle the deleted object.
87
- recycleItem := api .NewRecycleItem (buildRecycledObject (request ))
88
- if err := retry .OnError (retry .DefaultRetry , k8serrors .IsAlreadyExists , func () error {
89
- if err := krbclient .RecycleItem ().Create (context .Background (), recycleItem , client.CreateOptions {}); err != nil {
90
- return err
85
+ recycledObj := buildRecycledObject (request )
86
+ if recycledObj != nil {
87
+ tlog .Infof ("» prepare to recycle deleted object [%s: %s]" , request .Kind .Kind , recycledObj .Key ())
88
+ recycleItem := api .NewRecycleItem (recycledObj )
89
+ if err := retry .OnError (retry .DefaultRetry , k8serrors .IsAlreadyExists , func () error {
90
+ if err := krbclient .RecycleItem ().Create (context .Background (), recycleItem , client.CreateOptions {}); err != nil {
91
+ return err
92
+ }
93
+
94
+ tlog .Infof ("✓ recycle deleted object [%s: %s] done." , recycledObj .Kind , recycledObj .Key ())
95
+
96
+ return nil
97
+ }); err != nil {
98
+ tlog .Errorf ("✗ failed to recycle deleted object [%s: %s]: %v" , recycledObj .Kind , recycledObj .Key (), err )
91
99
}
92
-
93
- tlog .Infof ("✓ recycle deleted object %s done" , types.NamespacedName {
94
- Name : request .Name ,
95
- Namespace : request .Namespace ,
96
- }.String ())
97
-
98
- return nil
99
- }); err != nil {
100
- tlog .Errorf ("✗ failed to recycle deleted object: %v" , err )
101
100
}
102
101
103
102
response (w , review )
@@ -119,12 +118,21 @@ func parseRequest(r *http.Request) (*admissionv1.AdmissionReview, error) {
119
118
120
119
// buildRecycledObject constructs api.RecycledObject from the request
121
120
func buildRecycledObject (request * admissionv1.AdmissionRequest ) * api.RecycledObject {
121
+ namespaced , err := kube .IsResourceNamespaced (schema.GroupVersionResource {
122
+ Group : request .Resource .Group ,
123
+ Version : request .Resource .Version ,
124
+ Resource : request .Resource .Resource ,
125
+ })
126
+ if err != nil {
127
+ tlog .Errorf ("✗ failed to check if resource is namespaced: %v" , err )
128
+ return nil
129
+ }
122
130
return & api.RecycledObject {
123
131
Group : request .Resource .Group ,
124
132
Version : request .Resource .Version ,
125
133
Resource : request .Resource .Resource ,
126
134
Kind : request .Kind .Kind ,
127
- Namespace : request .Namespace ,
135
+ Namespace : util . If ( namespaced , request .Namespace , "" ) ,
128
136
Name : request .Name ,
129
137
Raw : request .OldObject .Raw ,
130
138
}
0 commit comments