From 4353e4502098e64d4fcfe1a233fe2f1387d5f093 Mon Sep 17 00:00:00 2001 From: Kris Raney Date: Thu, 20 Aug 2026 19:50:13 +0000 Subject: [PATCH 1/2] Update K8s nodeaffinity references These are no longer in beta (for some time) use the official reference --- manifests/meshnet/grpc/manifest.yaml | 2 +- manifests/meshnet/vxlan/manifest.yaml | 2 +- third_party/meshnet/manifests/base/daemonset.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/manifests/meshnet/grpc/manifest.yaml b/manifests/meshnet/grpc/manifest.yaml index f6fd7d44..4f86e634 100644 --- a/manifests/meshnet/grpc/manifest.yaml +++ b/manifests/meshnet/grpc/manifest.yaml @@ -326,7 +326,7 @@ spec: hostNetwork: true hostPID: true nodeSelector: - beta.kubernetes.io/arch: amd64 + kubernetes.io/arch: amd64 serviceAccountName: meshnet terminationGracePeriodSeconds: 30 tolerations: diff --git a/manifests/meshnet/vxlan/manifest.yaml b/manifests/meshnet/vxlan/manifest.yaml index f37073e0..d9140120 100644 --- a/manifests/meshnet/vxlan/manifest.yaml +++ b/manifests/meshnet/vxlan/manifest.yaml @@ -326,7 +326,7 @@ spec: hostNetwork: true hostPID: true nodeSelector: - beta.kubernetes.io/arch: amd64 + kubernetes.io/arch: amd64 serviceAccountName: meshnet terminationGracePeriodSeconds: 30 tolerations: diff --git a/third_party/meshnet/manifests/base/daemonset.yaml b/third_party/meshnet/manifests/base/daemonset.yaml index c626af71..f5376582 100644 --- a/third_party/meshnet/manifests/base/daemonset.yaml +++ b/third_party/meshnet/manifests/base/daemonset.yaml @@ -18,7 +18,7 @@ spec: hostIPC: true serviceAccountName: meshnet nodeSelector: - beta.kubernetes.io/arch: amd64 + kubernetes.io/arch: amd64 tolerations: - operator: Exists effect: NoSchedule From c8c66b7f3111cb419c564d67824de0778364d0bd Mon Sep 17 00:00:00 2001 From: Kris Raney Date: Fri, 21 Aug 2026 18:15:06 +0000 Subject: [PATCH 2/2] all: remove direct controller-runtime dependency and modernize CRD clients Refactor Nokia node implementation and Metallb / Meshnet clientsets to use standard client-go dynamic clients and static TypeMeta definitions, completely eliminating sigs.k8s.io/controller-runtime as a direct dependency. Summary of changes: - topo/node/nokia/nokia.go: - Replace controller-runtime Client (ctrlclient.New, c.Create, c.Delete) with dynamic.NewForConfig and c.Resource(srlGVR).Namespace(ns).Create/Delete. - Convert srlinuxv1.Srlinux resources to unstructured.Unstructured via runtime.DefaultUnstructuredConverter, consistent with other KNE nodes. - Remove newSrlinuxClientWithSchema and controller-runtime imports. - api/metallb/clientset/v1beta1: - In ipaddresspool.go and l2advertisement.go, assign TypeMeta statically (Kind and metallbv1.GroupVersion) instead of calling apiutil.GVKForObject. - In client.go, remove metallbv1.AddToScheme(Scheme) from init() to avoid package initialization side-effects. - Remove unused controller-runtime/pkg/client/apiutil imports. - third_party/meshnet/api/clientset/v1beta1/topology.go: - Assign TypeMeta statically (Kind: "Topology", topologyv1.SchemeGroupVersion) instead of calling apiutil.GVKForObject. - Remove unused apiutil import. - go.mod & go.sum: - Remove sigs.k8s.io/controller-runtime as a direct dependency. Rationale: - Simplifies KNE dependency tree by relying exclusively on client-go and apimachinery rather than pulling in the full controller-runtime framework. - Standardizes CRD creation and deletion across all node implementations. - Avoids runtime reflection and scheme registration errors during clientset initialization. Note for googlers - see b/540005636 and cl/968544355 --- api/metallb/clientset/v1beta1/client.go | 4 +- .../clientset/v1beta1/ipaddresspool.go | 9 +--- .../clientset/v1beta1/l2advertisement.go | 9 +--- go.mod | 4 +- go.sum | 20 -------- .../meshnet/api/clientset/v1beta1/topology.go | 9 +--- topo/node/nokia/nokia.go | 47 ++++++++----------- 7 files changed, 28 insertions(+), 74 deletions(-) diff --git a/api/metallb/clientset/v1beta1/client.go b/api/metallb/clientset/v1beta1/client.go index 0c88fbb6..2091033a 100644 --- a/api/metallb/clientset/v1beta1/client.go +++ b/api/metallb/clientset/v1beta1/client.go @@ -87,13 +87,11 @@ func L2AdvertisementGVR() schema.GroupVersionResource { } var ( - groupVersion = metallbv1.GroupVersion + groupVersion = schema.GroupVersion{Group: "metallb.io", Version: "v1beta1"} Scheme = runtime.NewScheme() ) func init() { - metallbv1.AddToScheme(Scheme) - metav1.AddToGroupVersion(Scheme, groupVersion) metav1.AddMetaToScheme(Scheme) } diff --git a/api/metallb/clientset/v1beta1/ipaddresspool.go b/api/metallb/clientset/v1beta1/ipaddresspool.go index 7c50a405..51bbc0fa 100644 --- a/api/metallb/clientset/v1beta1/ipaddresspool.go +++ b/api/metallb/clientset/v1beta1/ipaddresspool.go @@ -23,7 +23,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/dynamic" - "sigs.k8s.io/controller-runtime/pkg/client/apiutil" ) type addressPoolClient struct { @@ -56,13 +55,9 @@ func (a *addressPoolClient) Get(ctx context.Context, name string, opts metav1.Ge } func (a *addressPoolClient) Create(ctx context.Context, pool *metallbv1.IPAddressPool, opts metav1.CreateOptions) (*metallbv1.IPAddressPool, error) { - gvk, err := apiutil.GVKForObject(pool, Scheme) - if err != nil { - return nil, fmt.Errorf("failed to get gvk for AddressPool: %w", err) - } pool.TypeMeta = metav1.TypeMeta{ - Kind: gvk.Kind, - APIVersion: gvk.GroupVersion().String(), + Kind: "IPAddressPool", + APIVersion: metallbv1.GroupVersion.String(), } obj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(pool) if err != nil { diff --git a/api/metallb/clientset/v1beta1/l2advertisement.go b/api/metallb/clientset/v1beta1/l2advertisement.go index f513e43b..b5fb206a 100644 --- a/api/metallb/clientset/v1beta1/l2advertisement.go +++ b/api/metallb/clientset/v1beta1/l2advertisement.go @@ -23,7 +23,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/dynamic" - "sigs.k8s.io/controller-runtime/pkg/client/apiutil" ) type l2AdvertisementClient struct { @@ -56,13 +55,9 @@ func (l *l2AdvertisementClient) Get(ctx context.Context, name string, opts metav } func (l *l2AdvertisementClient) Create(ctx context.Context, pool *metallbv1.L2Advertisement, opts metav1.CreateOptions) (*metallbv1.L2Advertisement, error) { - gvk, err := apiutil.GVKForObject(pool, Scheme) - if err != nil { - return nil, fmt.Errorf("failed to get gvk for AddressPool: %w", err) - } pool.TypeMeta = metav1.TypeMeta{ - Kind: gvk.Kind, - APIVersion: gvk.GroupVersion().String(), + Kind: "L2Advertisement", + APIVersion: metallbv1.GroupVersion.String(), } obj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(pool) if err != nil { diff --git a/go.mod b/go.mod index 6f6a75aa..88dfe2bd 100644 --- a/go.mod +++ b/go.mod @@ -42,10 +42,11 @@ require ( k8s.io/client-go v0.36.3 k8s.io/klog/v2 v2.140.0 k8s.io/utils v0.0.0-20260707023825-cf1189d6abe3 - sigs.k8s.io/controller-runtime v0.24.1 sigs.k8s.io/yaml v1.6.0 ) +require sigs.k8s.io/controller-runtime v0.24.1 // indirect + require ( bitbucket.org/creachadair/stringset v0.0.14 // indirect cloud.google.com/go v0.123.0 // indirect @@ -67,7 +68,6 @@ require ( github.com/docker/go-connections v0.8.1 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/emicklei/go-restful/v3 v3.13.0 // indirect - github.com/evanphx/json-patch/v5 v5.9.11 // indirect github.com/felixge/httpsnoop v1.1.0 // indirect github.com/fsnotify/fsnotify v1.10.1 // indirect github.com/fxamacker/cbor/v2 v2.9.1 // indirect diff --git a/go.sum b/go.sum index 813c33e4..e899192a 100644 --- a/go.sum +++ b/go.sum @@ -26,8 +26,6 @@ github.com/aristanetworks/arista-ceoslab-operator/v2 v2.1.2 h1:1aAxwwu4xyfiU1/FX github.com/aristanetworks/arista-ceoslab-operator/v2 v2.1.2/go.mod h1:/mvSt2fEmlVEU7dppip3UNz/MUt380f50dFsZRGn83o= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/carlmontanari/difflibgo v0.0.0-20210718194309-31b9e131c298 h1:Y8rTum6LZ8oP/2aC+OaaP76OCjHbunKMkim81mzNCH0= @@ -75,8 +73,6 @@ github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds= github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= -github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= -github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= github.com/felixge/httpsnoop v1.1.0 h1:3YtUj32ZZkqZtt3sZZsClsymw/QDuVfpNhoA31zeORc= github.com/felixge/httpsnoop v1.1.0/go.mod h1:Zqxgdd+1Rkcz8euOqdr7lqgCRJztwr5hp9vDSi5UZCE= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -92,8 +88,6 @@ github.com/go-logr/logr v1.4.4 h1:tG4xh9yMsRCAiodLVTxyrkzSZ9+o0L1Kg/+cPVcbP/8= github.com/go-logr/logr v1.4.4/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= -github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= github.com/go-openapi/jsonpointer v0.23.1 h1:1HBACs7XIwR2RcmItfdSFlALhGbe6S92p0ry4d1GWg4= github.com/go-openapi/jsonpointer v0.23.1/go.mod h1:iWRmZTrGn7XwYhtPt/fvdSFj1OfNBngqRT2UG3BxSqY= github.com/go-openapi/jsonreference v0.21.6 h1:NZ5nGfnaM1n4I43Xjm1e5/M2GjOwQwndQz22uhxwD+Y= @@ -280,15 +274,7 @@ github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.23.2 h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o= -github.com/prometheus/client_golang v1.23.2/go.mod h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= -github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= -github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4= -github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw= -github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEycfc= -github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= @@ -376,10 +362,6 @@ go.opentelemetry.io/proto/otlp v1.11.0 h1:5rrYs0Ykyj50sdU/JU0x8etU+LubXWb+gED6Tb go.opentelemetry.io/proto/otlp v1.11.0/go.mod h1:SmVizdCOAm3XBtG1g1NnOdhW6jtddT72hLMhv8VwA8E= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= -go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc= -go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= go.universe.tf/metallb v0.16.1 h1:iVtjCslcUFMOEvuNeAyW2ygZxyW+6YjnNcEuCTOZezc= go.universe.tf/metallb v0.16.1/go.mod h1:bcFtsBPqKJChcT7gf4bhRtR6HAu8TeY7OGLYanK2tOQ= go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= @@ -530,8 +512,6 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= k8s.io/api v0.36.3 h1:NxB+05W2UGqXWFXcLO0RB5cnqnUPP5v5sVlaOH0Iz4w= k8s.io/api v0.36.3/go.mod h1:JzLQKqRHC5+I8RVj/lS3lCg0mg6nWI9Fo/Sk3ElxHzg= -k8s.io/apiextensions-apiserver v0.36.0 h1:Wt7E8J+VBCbj4FjiBfDTK/neXDDjyJVJc7xfuOHImZ0= -k8s.io/apiextensions-apiserver v0.36.0/go.mod h1:kGDjH0msuiIB3tgsYRV0kS9GqpMYMUsQ3GHv7TApyug= k8s.io/apimachinery v0.36.3 h1:PkzMRBRG8joFD8EhCuQAtNPvJlxb82FwplP26HIzvAM= k8s.io/apimachinery v0.36.3/go.mod h1:cTSjBWgPe/6CQyBKzY/hDIRWCQQQeK0mfLbml0UYFHE= k8s.io/client-go v0.36.3 h1:M4JdVzXxYcZk4fGpfDdYnxSwhLKWCFoQsHW6t+z8Hfg= diff --git a/third_party/meshnet/api/clientset/v1beta1/topology.go b/third_party/meshnet/api/clientset/v1beta1/topology.go index 65ae4971..7031eeb3 100644 --- a/third_party/meshnet/api/clientset/v1beta1/topology.go +++ b/third_party/meshnet/api/clientset/v1beta1/topology.go @@ -27,7 +27,6 @@ import ( "k8s.io/client-go/dynamic" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" - "sigs.k8s.io/controller-runtime/pkg/client/apiutil" topologyv1 "github.com/openconfig/kne/third_party/meshnet/api/types/v1beta1" ) @@ -134,13 +133,9 @@ func (t *topologyClient) Get(ctx context.Context, name string, opts metav1.GetOp } func (t *topologyClient) Create(ctx context.Context, topology *topologyv1.Topology, opts metav1.CreateOptions) (*topologyv1.Topology, error) { - gvk, err := apiutil.GVKForObject(topology, topologyv1.Scheme) - if err != nil { - return nil, fmt.Errorf("failed to get gvk for Topology: %w", err) - } topology.TypeMeta = metav1.TypeMeta{ - Kind: gvk.Kind, - APIVersion: gvk.GroupVersion().String(), + Kind: "Topology", + APIVersion: topologyv1.SchemeGroupVersion.String(), } obj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(topology) if err != nil { diff --git a/topo/node/nokia/nokia.go b/topo/node/nokia/nokia.go index a38e39bd..72cef344 100644 --- a/topo/node/nokia/nokia.go +++ b/topo/node/nokia/nokia.go @@ -20,11 +20,12 @@ import ( "google.golang.org/protobuf/proto" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/fields" - runtime "k8s.io/apimachinery/pkg/runtime" - "k8s.io/client-go/rest" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/client-go/dynamic" log "k8s.io/klog/v2" - ctrlclient "sigs.k8s.io/controller-runtime/pkg/client" ) const ( @@ -39,9 +40,11 @@ var ( // ErrIncompatibleCliConn raised when an invalid scrapligo cli transport type is found. ErrIncompatibleCliConn = errors.New("incompatible cli connection in use") - // newSrlinuxClient returns a controller-runtime client for srlinux - // resources. This can be set to a fake for unit testing. - newSrlinuxClient = newSrlinuxClientWithSchema + srlGVR = schema.GroupVersionResource{ + Group: srlinuxv1.GroupVersion.Group, + Version: srlinuxv1.GroupVersion.Version, + Resource: "srlinuxes", + } defaultConstraints = node.Constraints{ CPU: "2000m", // 2000 milliCPUs @@ -114,19 +117,6 @@ func New(nodeImpl *node.Impl) (node.Node, error) { return n, nil } -// newSrlinuxClientWithSchema returns a controller-runtime client for srlinux and loads its schema. -func newSrlinuxClientWithSchema(c *rest.Config) (ctrlclient.Client, error) { - // initialize the controller-runtime client with srlinux scheme - scheme := runtime.NewScheme() - - err := srlinuxv1.AddToScheme(scheme) - if err != nil { - return nil, err - } - - return ctrlclient.New(c, ctrlclient.Options{Scheme: scheme}) -} - type Node struct { *node.Impl cliConn *scraplinetwork.Driver @@ -297,12 +287,18 @@ func (n *Node) Create(ctx context.Context) error { Version: n.GetProto().GetVersion(), }, } - c, err := newSrlinuxClient(n.RestConfig) + srlMap, err := runtime.DefaultUnstructuredConverter.ToUnstructured(srl) if err != nil { return err } + srlUnstructured := &unstructured.Unstructured{Object: srlMap} - if err := c.Create(ctx, srl); err != nil { + c, err := dynamic.NewForConfig(n.RestConfig) + if err != nil { + return err + } + + if _, err := c.Resource(srlGVR).Namespace(n.Namespace).Create(ctx, srlUnstructured, metav1.CreateOptions{}); err != nil { return err } @@ -368,16 +364,11 @@ func (n *Node) DefaultNodeConstraints() node.Constraints { } func (n *Node) Delete(ctx context.Context) error { - c, err := newSrlinuxClient(n.RestConfig) + c, err := dynamic.NewForConfig(n.RestConfig) if err != nil { return err } - err = c.Delete(ctx, &srlinuxv1.Srlinux{ - ObjectMeta: metav1.ObjectMeta{ - Namespace: n.GetNamespace(), Name: n.Name(), - }, - }) - if err != nil { + if err := c.Resource(srlGVR).Namespace(n.Namespace).Delete(ctx, n.Name(), metav1.DeleteOptions{}); err != nil { return err } if err := n.DeleteService(ctx); err != nil {