44 "context"
55 "fmt"
66 "os"
7+ "os/exec"
78 "time"
89
910 . "github.com/onsi/ginkgo/v2" //nolint:staticcheck
@@ -19,7 +20,6 @@ import (
1920 "k8s.io/utils/ptr"
2021 "sigs.k8s.io/controller-runtime/pkg/client"
2122
22- vmv1beta1 "github.com/VictoriaMetrics/operator/api/operator/v1beta1"
2323 "github.com/VictoriaMetrics/operator/internal/manager"
2424)
2525
@@ -249,60 +249,11 @@ func startNewOperator(ctx context.Context) (context.CancelFunc, chan struct{}) {
249249func cleanupNamespace (ctx context.Context , k8sClient client.Client , watchNamespace string ) {
250250 GinkgoHelper ()
251251
252- // Clear finalizers from VMAgent objects to ensure namespace doesn't block
253- var agents vmv1beta1.VMAgentList
254- if err := k8sClient .List (ctx , & agents , client .InNamespace (watchNamespace )); err == nil {
255- for i := range agents .Items {
256- agent := & agents .Items [i ]
257- agent .Finalizers = nil
258- _ = k8sClient .Update (ctx , agent )
259- _ = k8sClient .Delete (ctx , agent )
260- }
261- }
262-
263- // Clear finalizers from VMSingle objects
264- var singles vmv1beta1.VMSingleList
265- if err := k8sClient .List (ctx , & singles , client .InNamespace (watchNamespace )); err == nil {
266- for i := range singles .Items {
267- single := & singles .Items [i ]
268- single .Finalizers = nil
269- _ = k8sClient .Update (ctx , single )
270- _ = k8sClient .Delete (ctx , single )
271- }
272- }
273-
274- // Clear finalizers from VMCluster objects
275- var clusters vmv1beta1.VMClusterList
276- if err := k8sClient .List (ctx , & clusters , client .InNamespace (watchNamespace )); err == nil {
277- for i := range clusters .Items {
278- cluster := & clusters .Items [i ]
279- cluster .Finalizers = nil
280- _ = k8sClient .Update (ctx , cluster )
281- _ = k8sClient .Delete (ctx , cluster )
282- }
283- }
284-
285- // Clear finalizers from Roles
286- var roles rbacv1.RoleList
287- if err := k8sClient .List (ctx , & roles , client .InNamespace (watchNamespace )); err == nil {
288- for i := range roles .Items {
289- role := & roles .Items [i ]
290- role .Finalizers = nil
291- _ = k8sClient .Update (ctx , role )
292- _ = k8sClient .Delete (ctx , role )
293- }
294- }
295-
296- // Clear finalizers from RoleBindings
297- var roleBindings rbacv1.RoleBindingList
298- if err := k8sClient .List (ctx , & roleBindings , client .InNamespace (watchNamespace )); err == nil {
299- for i := range roleBindings .Items {
300- rb := & roleBindings .Items [i ]
301- rb .Finalizers = nil
302- _ = k8sClient .Update (ctx , rb )
303- _ = k8sClient .Delete (ctx , rb )
304- }
305- }
252+ // Clear finalizers from all namespaced objects using kubectl.
253+ exec .Command ("sh" , "-c" , fmt .Sprintf (
254+ "kubectl get $(kubectl api-resources --namespaced=true --verbs=list -o name | tr \" \n \" \" ,\" | sed -e 's/,$//') -n %s -o name | xargs -I {} kubectl patch {} -n %s -p '{\" metadata\" :{\" finalizers\" :[]}}' --type=merge" ,
255+ watchNamespace , watchNamespace ,
256+ )).Run ()
306257
307258 // Delete namespace
308259 nsObj := & corev1.Namespace {
0 commit comments