diff --git a/cmd/main.go b/cmd/main.go index 465ff78a..07f46c3a 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -213,7 +213,7 @@ func main() { mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ Cache: cache.Options{ReaderFailOnMissingInformer: true, DefaultNamespaces: watchNamespaces}, - Controller: config.Controller{UsePriorityQueue: new(true), MaxConcurrentReconciles: maxConcurrentReconciles}, + Controller: config.Controller{MaxConcurrentReconciles: maxConcurrentReconciles}, Scheme: scheme, Metrics: metricsServerOptions, WebhookServer: webhookServer, @@ -276,7 +276,7 @@ func main() { if err := (&corecontroller.DeviceReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("device-controller"), + Recorder: mgr.GetEventRecorder("device-controller"), WatchFilterValue: watchFilterValue, Provider: prov, RequeueInterval: requeueInterval, @@ -288,7 +288,7 @@ func main() { if err := (&corecontroller.InterfaceReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("interface-controller"), + Recorder: mgr.GetEventRecorder("interface-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -301,7 +301,7 @@ func main() { if err := (&corecontroller.BannerReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("banner-controller"), + Recorder: mgr.GetEventRecorder("banner-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -313,7 +313,7 @@ func main() { if err := (&corecontroller.UserReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("user-controller"), + Recorder: mgr.GetEventRecorder("user-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -325,7 +325,7 @@ func main() { if err := (&corecontroller.DNSReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("dns-controller"), + Recorder: mgr.GetEventRecorder("dns-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -337,7 +337,7 @@ func main() { if err := (&corecontroller.NTPReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("ntp-controller"), + Recorder: mgr.GetEventRecorder("ntp-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -349,7 +349,7 @@ func main() { if err := (&corecontroller.AccessControlListReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("acl-controller"), + Recorder: mgr.GetEventRecorder("acl-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -361,7 +361,7 @@ func main() { if err := (&corecontroller.CertificateReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("certificate-controller"), + Recorder: mgr.GetEventRecorder("certificate-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -373,7 +373,7 @@ func main() { if err := (&corecontroller.SNMPReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("snmp-controller"), + Recorder: mgr.GetEventRecorder("snmp-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -385,7 +385,7 @@ func main() { if err := (&corecontroller.SyslogReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("syslog-controller"), + Recorder: mgr.GetEventRecorder("syslog-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -397,7 +397,7 @@ func main() { if err := (&corecontroller.ManagementAccessReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("managementaccess-controller"), + Recorder: mgr.GetEventRecorder("managementaccess-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -409,7 +409,7 @@ func main() { if err := (&corecontroller.ISISReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("isis-controller"), + Recorder: mgr.GetEventRecorder("isis-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -422,7 +422,7 @@ func main() { if err := (&corecontroller.PIMReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("pim-controller"), + Recorder: mgr.GetEventRecorder("pim-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -435,7 +435,7 @@ func main() { if err := (&corecontroller.BGPReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("bgp-controller"), + Recorder: mgr.GetEventRecorder("bgp-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -448,7 +448,7 @@ func main() { if err := (&corecontroller.BGPPeerReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("bgppeer-controller"), + Recorder: mgr.GetEventRecorder("bgppeer-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -461,7 +461,7 @@ func main() { if err := (&corecontroller.LLDPReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("lldp-controller"), + Recorder: mgr.GetEventRecorder("lldp-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -474,7 +474,7 @@ func main() { if err := (&corecontroller.OSPFReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("ospf-controller"), + Recorder: mgr.GetEventRecorder("ospf-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -487,7 +487,7 @@ func main() { if err := (&corecontroller.VLANReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("vlan-controller"), + Recorder: mgr.GetEventRecorder("vlan-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -500,7 +500,7 @@ func main() { if err := (&corecontroller.VRFReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("vrf-controller"), + Recorder: mgr.GetEventRecorder("vrf-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -513,7 +513,7 @@ func main() { if err := (&nxcontroller.VPCDomainReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("cisco-nx-vpcdomain-controller"), + Recorder: mgr.GetEventRecorder("cisco-nx-vpcdomain-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -526,7 +526,7 @@ func main() { if err := (&corecontroller.NetworkVirtualizationEdgeReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("nve-controller"), + Recorder: mgr.GetEventRecorder("nve-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -539,7 +539,7 @@ func main() { if err := (&nxcontroller.SystemReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("cisco-nx-system-controller"), + Recorder: mgr.GetEventRecorder("cisco-nx-system-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -551,7 +551,7 @@ func main() { if err := (&corecontroller.EVPNInstanceReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("evpn-instance-controller"), + Recorder: mgr.GetEventRecorder("evpn-instance-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -563,7 +563,7 @@ func main() { if err := (&corecontroller.PrefixSetReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("prefixset-controller"), + Recorder: mgr.GetEventRecorder("prefixset-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -575,7 +575,7 @@ func main() { if err := (&corecontroller.RoutingPolicyReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("routingpolicy-controller"), + Recorder: mgr.GetEventRecorder("routingpolicy-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -587,7 +587,7 @@ func main() { if err := (&nxcontroller.BorderGatewayReconciler{ Client: mgr.GetClient(), Scheme: mgr.GetScheme(), - Recorder: mgr.GetEventRecorderFor("cisco-nx-border-gateway-controller"), + Recorder: mgr.GetEventRecorder("cisco-nx-border-gateway-controller"), WatchFilterValue: watchFilterValue, Provider: prov, Locker: locker, @@ -642,7 +642,7 @@ func main() { provisioningServer := &provisioning.HTTPServer{ Client: mgr.GetClient(), Logger: klog.NewKlogr().WithName("provisioning"), - Recorder: mgr.GetEventRecorderFor("provisioning"), + Recorder: mgr.GetEventRecorder("provisioning"), ValidateSourceIP: provisioningHTTPValidateSourceIP, Provider: provisioningProvider, Port: provisioningHTTPPort, diff --git a/go.mod b/go.mod index a6ebf431..fb8aa548 100644 --- a/go.mod +++ b/go.mod @@ -28,7 +28,7 @@ require ( k8s.io/client-go v0.35.0 k8s.io/klog/v2 v2.130.1 rsc.io/script v0.0.2 - sigs.k8s.io/controller-runtime v0.22.4 + sigs.k8s.io/controller-runtime v0.23.3 sigs.k8s.io/yaml v1.6.0 ) @@ -126,5 +126,5 @@ require ( sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.34.0 // indirect sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect sigs.k8s.io/randfill v1.0.0 // indirect - sigs.k8s.io/structured-merge-diff/v6 v6.3.1 // indirect + sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 // indirect ) diff --git a/go.sum b/go.sum index 18e73aef..de5b8841 100644 --- a/go.sum +++ b/go.sum @@ -300,13 +300,13 @@ rsc.io/script v0.0.2 h1:eYoG7A3GFC3z1pRx3A2+s/vZ9LA8cxojHyCvslnj4RI= rsc.io/script v0.0.2/go.mod h1:cKBjCtFBBeZ0cbYFRXkRoxP+xGqhArPa9t3VWhtXfzU= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.34.0 h1:hSfpvjjTQXQY2Fol2CS0QHMNs/WI1MOSGzCm1KhM5ec= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.34.0/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw= -sigs.k8s.io/controller-runtime v0.22.4 h1:GEjV7KV3TY8e+tJ2LCTxUTanW4z/FmNB7l327UfMq9A= -sigs.k8s.io/controller-runtime v0.22.4/go.mod h1:+QX1XUpTXN4mLoblf4tqr5CQcyHPAki2HLXqQMY6vh8= +sigs.k8s.io/controller-runtime v0.23.3 h1:VjB/vhoPoA9l1kEKZHBMnQF33tdCLQKJtydy4iqwZ80= +sigs.k8s.io/controller-runtime v0.23.3/go.mod h1:B6COOxKptp+YaUT5q4l6LqUJTRpizbgf9KSRNdQGns0= sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg= sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU= sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= -sigs.k8s.io/structured-merge-diff/v6 v6.3.1 h1:JrhdFMqOd/+3ByqlP2I45kTOZmTRLBUm5pvRjeheg7E= -sigs.k8s.io/structured-merge-diff/v6 v6.3.1/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= +sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 h1:2WOzJpHUBVrrkDjU4KBT8n5LDcj824eX0I5UKcgeRUs= +sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs= sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4= diff --git a/internal/controller/cisco/nx/bordergateway_controller.go b/internal/controller/cisco/nx/bordergateway_controller.go index 51458a45..7fd83c2e 100644 --- a/internal/controller/cisco/nx/bordergateway_controller.go +++ b/internal/controller/cisco/nx/bordergateway_controller.go @@ -16,7 +16,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -47,7 +47,7 @@ type BorderGatewayReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the bordergateway. Provider provider.ProviderFunc diff --git a/internal/controller/cisco/nx/suite_test.go b/internal/controller/cisco/nx/suite_test.go index 406cda5d..6330fbd6 100644 --- a/internal/controller/cisco/nx/suite_test.go +++ b/internal/controller/cisco/nx/suite_test.go @@ -18,7 +18,7 @@ import ( corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/envtest" @@ -92,7 +92,7 @@ var _ = BeforeSuite(func() { }) Expect(err).ToNot(HaveOccurred()) - recorder := record.NewFakeRecorder(0) + recorder := events.NewFakeRecorder(0) go func() { for event := range recorder.Events { GinkgoLogr.Info("Event", "event", event) diff --git a/internal/controller/cisco/nx/system_controller.go b/internal/controller/cisco/nx/system_controller.go index 27129133..c82fa0d3 100644 --- a/internal/controller/cisco/nx/system_controller.go +++ b/internal/controller/cisco/nx/system_controller.go @@ -15,7 +15,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -44,7 +44,7 @@ type SystemReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the system. Provider provider.ProviderFunc diff --git a/internal/controller/cisco/nx/vpcdomain_controller.go b/internal/controller/cisco/nx/vpcdomain_controller.go index 115d282e..c28afff9 100644 --- a/internal/controller/cisco/nx/vpcdomain_controller.go +++ b/internal/controller/cisco/nx/vpcdomain_controller.go @@ -16,7 +16,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -49,7 +49,7 @@ type VPCDomainReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the vPC Provider provider.ProviderFunc diff --git a/internal/controller/core/acl_controller.go b/internal/controller/core/acl_controller.go index 47d1b31d..3721f0ef 100644 --- a/internal/controller/core/acl_controller.go +++ b/internal/controller/core/acl_controller.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -46,7 +46,7 @@ type AccessControlListReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the accesscontrollist. Provider provider.ProviderFunc diff --git a/internal/controller/core/banner_controller.go b/internal/controller/core/banner_controller.go index 1ccd246a..1a5cdbbf 100644 --- a/internal/controller/core/banner_controller.go +++ b/internal/controller/core/banner_controller.go @@ -18,7 +18,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -48,7 +48,7 @@ type BannerReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the banner. Provider provider.ProviderFunc diff --git a/internal/controller/core/bgp_controller.go b/internal/controller/core/bgp_controller.go index 24fe0f1b..ae3bc009 100644 --- a/internal/controller/core/bgp_controller.go +++ b/internal/controller/core/bgp_controller.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -46,7 +46,7 @@ type BGPReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the bgp. Provider provider.ProviderFunc diff --git a/internal/controller/core/bgp_peer_controller.go b/internal/controller/core/bgp_peer_controller.go index 65714394..ef6f19f1 100644 --- a/internal/controller/core/bgp_peer_controller.go +++ b/internal/controller/core/bgp_peer_controller.go @@ -20,7 +20,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -49,7 +49,7 @@ type BGPPeerReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the bgppeer. Provider provider.ProviderFunc diff --git a/internal/controller/core/certificate_controller.go b/internal/controller/core/certificate_controller.go index 12c2e657..0de9650e 100644 --- a/internal/controller/core/certificate_controller.go +++ b/internal/controller/core/certificate_controller.go @@ -18,7 +18,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -48,7 +48,7 @@ type CertificateReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the certificate. Provider provider.ProviderFunc diff --git a/internal/controller/core/device_controller.go b/internal/controller/core/device_controller.go index 1f3c0b7b..cf65b415 100644 --- a/internal/controller/core/device_controller.go +++ b/internal/controller/core/device_controller.go @@ -19,7 +19,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -45,7 +45,7 @@ type DeviceReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the interface. Provider provider.ProviderFunc @@ -138,7 +138,7 @@ func (r *DeviceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ c // Skip provisioning if the provider does not support it. log.Info("Provider does not support provisioning, skipping") obj.Status.Phase = v1alpha1.DevicePhaseFailed - r.Recorder.Event(obj, "Warning", "Unsupported", "Provider does not support provisioning") + r.Recorder.Eventf(obj, nil, "Warning", "Unsupported", "Reconcile", "Provider does not support provisioning") return ctrl.Result{}, reconcile.TerminalError(errors.New("provider does not support provisioning")) } @@ -150,7 +150,7 @@ func (r *DeviceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ c Message: "Device is being provisioned", }) obj.Status.Phase = v1alpha1.DevicePhaseProvisioning - r.Recorder.Event(obj, "Normal", "ProvisioningStarted", "Device provisioning has started") + r.Recorder.Eventf(obj, nil, "Normal", "ProvisioningStarted", "Reconcile", "Device provisioning has started") return ctrl.Result{}, nil case v1alpha1.DevicePhaseProvisioning: @@ -161,7 +161,7 @@ func (r *DeviceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ c } if activeProv.StartTime.Add(time.Hour).After(time.Now()) { obj.Status.Phase = v1alpha1.DevicePhaseFailed - r.Recorder.Event(obj, "Warning", "ProvisioningFailed", "Device provisioning has timed out") + r.Recorder.Eventf(obj, nil, "Warning", "ProvisioningFailed", "Reconcile", "Device provisioning has timed out") return ctrl.Result{}, nil } return ctrl.Result{RequeueAfter: 20 * time.Minute}, nil @@ -185,7 +185,7 @@ func (r *DeviceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (_ c return ctrl.Result{RequeueAfter: r.RequeueInterval}, nil } activeProv.EndTime = metav1.Now() - r.Recorder.Event(obj, "Normal", "Provisioned", "Device provisioning has completed successfully") + r.Recorder.Eventf(obj, nil, "Normal", "Provisioned", "Reconcile", "Device provisioning has completed successfully") obj.Status.Phase = v1alpha1.DevicePhaseRunning return ctrl.Result{}, nil @@ -332,7 +332,7 @@ func (r *DeviceReconciler) reconcileMaintenance(ctx context.Context, obj *v1alph case v1alpha1.DeviceMaintenanceReboot: // Reboot triggers a device restart. The device remains in its current phase // and will resume normal operation after the reboot completes. - r.Recorder.Event(obj, "Normal", "RebootRequested", "Device reboot has been requested") + r.Recorder.Eventf(obj, nil, "Normal", "RebootRequested", "Maintenance", "Device reboot has been requested") if err := prov.Reboot(ctx, conn); err != nil { conditions.Set(obj, metav1.Condition{ Type: v1alpha1.ReadyCondition, @@ -340,14 +340,14 @@ func (r *DeviceReconciler) reconcileMaintenance(ctx context.Context, obj *v1alph Reason: v1alpha1.MaintenanceFailedReason, Message: fmt.Sprintf("Failed to reboot device: %v", err), }) - r.Recorder.Event(obj, "Warning", "RebootFailed", fmt.Sprintf("Device reboot has failed: %v", err)) + r.Recorder.Eventf(obj, nil, "Warning", "RebootFailed", "Maintenance", "Device reboot has failed: %v", err) return fmt.Errorf("failed to reboot device: %w", err) } case v1alpha1.DeviceMaintenanceFactoryReset: // FactoryReset erases all device configuration and returns it to its original state. // After completion, the device phase is reset to Pending to restart the lifecycle. - r.Recorder.Event(obj, "Normal", "FactoryResetRequested", "Device factory reset has been requested") + r.Recorder.Eventf(obj, nil, "Normal", "FactoryResetRequested", "Maintenance", "Device factory reset has been requested") if err := prov.FactoryReset(ctx, conn); err != nil { conditions.Set(obj, metav1.Condition{ Type: v1alpha1.ReadyCondition, @@ -355,7 +355,7 @@ func (r *DeviceReconciler) reconcileMaintenance(ctx context.Context, obj *v1alph Reason: v1alpha1.MaintenanceFailedReason, Message: fmt.Sprintf("Failed to factory reset device: %v", err), }) - r.Recorder.Event(obj, "Warning", "FactoryResetFailed", fmt.Sprintf("Device factory reset has failed: %v", err)) + r.Recorder.Eventf(obj, nil, "Warning", "FactoryResetFailed", "Maintenance", "Device factory reset has failed: %v", err) return fmt.Errorf("failed to reset device to factory defaults: %w", err) } obj.Status.Phase = v1alpha1.DevicePhasePending @@ -363,7 +363,7 @@ func (r *DeviceReconciler) reconcileMaintenance(ctx context.Context, obj *v1alph case v1alpha1.DeviceMaintenanceReprovision: // Reprovision prepares the device for re-provisioning without a full factory reset. // The provider initiates the provisioning process, then the phase is reset to Pending. - r.Recorder.Event(obj, "Normal", "ReprovisionRequested", "Device reprovisioning has been requested") + r.Recorder.Eventf(obj, nil, "Normal", "ReprovisionRequested", "Maintenance", "Device reprovisioning has been requested") if err := prov.Reprovision(ctx, conn); err != nil { conditions.Set(obj, metav1.Condition{ Type: v1alpha1.ReadyCondition, @@ -371,7 +371,7 @@ func (r *DeviceReconciler) reconcileMaintenance(ctx context.Context, obj *v1alph Reason: v1alpha1.MaintenanceFailedReason, Message: fmt.Sprintf("Failed to prepare device for reprovisioning: %v", err), }) - r.Recorder.Event(obj, "Warning", "ReprovisionFailed", fmt.Sprintf("Device reprovisioning preparation has failed: %v", err)) + r.Recorder.Eventf(obj, nil, "Warning", "ReprovisionFailed", "Maintenance", "Device reprovisioning preparation has failed: %v", err) return fmt.Errorf("failed to prepare device for reprovisioning: %w", err) } obj.Status.Phase = v1alpha1.DevicePhasePending @@ -380,11 +380,11 @@ func (r *DeviceReconciler) reconcileMaintenance(ctx context.Context, obj *v1alph // Reset phase is a soft reset that only changes the device phase to Pending without // performing any device-side operations. This is useful for recovering from terminal // states (e.g., Failed) after manual intervention. - r.Recorder.Event(obj, "Normal", "PhaseReset", "Device phase has been reset to Pending") + r.Recorder.Eventf(obj, nil, "Normal", "PhaseReset", "Maintenance", "Device phase has been reset to Pending") obj.Status.Phase = v1alpha1.DevicePhasePending default: - r.Recorder.Event(obj, "Warning", "UnknownMaintenanceAction", "Unknown maintenance action: %s"+action) + r.Recorder.Eventf(obj, nil, "Warning", "UnknownMaintenanceAction", "Maintenance", "Unknown maintenance action: %s", action) return fmt.Errorf("unknown maintenance action: %s", action) } diff --git a/internal/controller/core/dns_controller.go b/internal/controller/core/dns_controller.go index c84ffaf3..493714a5 100644 --- a/internal/controller/core/dns_controller.go +++ b/internal/controller/core/dns_controller.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -46,7 +46,7 @@ type DNSReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the dns. Provider provider.ProviderFunc diff --git a/internal/controller/core/evpninstance_controller.go b/internal/controller/core/evpninstance_controller.go index d2191a76..657be311 100644 --- a/internal/controller/core/evpninstance_controller.go +++ b/internal/controller/core/evpninstance_controller.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -46,7 +46,7 @@ type EVPNInstanceReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the evpninstance. Provider provider.ProviderFunc diff --git a/internal/controller/core/interface_controller.go b/internal/controller/core/interface_controller.go index d47932f3..fc7d55a8 100644 --- a/internal/controller/core/interface_controller.go +++ b/internal/controller/core/interface_controller.go @@ -19,7 +19,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -48,7 +48,7 @@ type InterfaceReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the interface. Provider provider.ProviderFunc diff --git a/internal/controller/core/isis_controller.go b/internal/controller/core/isis_controller.go index 8b0df54e..6ba5b72f 100644 --- a/internal/controller/core/isis_controller.go +++ b/internal/controller/core/isis_controller.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -46,7 +46,7 @@ type ISISReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the isis. Provider provider.ProviderFunc diff --git a/internal/controller/core/lldp_controller.go b/internal/controller/core/lldp_controller.go index 56424786..4d1d9923 100644 --- a/internal/controller/core/lldp_controller.go +++ b/internal/controller/core/lldp_controller.go @@ -19,7 +19,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -48,7 +48,7 @@ type LLDPReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the LLDP. Provider provider.ProviderFunc diff --git a/internal/controller/core/managementaccess_controller.go b/internal/controller/core/managementaccess_controller.go index c9924be7..9856c242 100644 --- a/internal/controller/core/managementaccess_controller.go +++ b/internal/controller/core/managementaccess_controller.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -46,7 +46,7 @@ type ManagementAccessReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the managementaccess. Provider provider.ProviderFunc diff --git a/internal/controller/core/ntp_controller.go b/internal/controller/core/ntp_controller.go index d0a43417..a20e9c03 100644 --- a/internal/controller/core/ntp_controller.go +++ b/internal/controller/core/ntp_controller.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -46,7 +46,7 @@ type NTPReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the ntp. Provider provider.ProviderFunc diff --git a/internal/controller/core/nve_controller.go b/internal/controller/core/nve_controller.go index e2f55f3d..ddd9fa92 100644 --- a/internal/controller/core/nve_controller.go +++ b/internal/controller/core/nve_controller.go @@ -19,7 +19,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -48,7 +48,7 @@ type NetworkVirtualizationEdgeReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the dns. Provider provider.ProviderFunc diff --git a/internal/controller/core/ospf_controller.go b/internal/controller/core/ospf_controller.go index 86e70c6b..4e828289 100644 --- a/internal/controller/core/ospf_controller.go +++ b/internal/controller/core/ospf_controller.go @@ -20,7 +20,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -49,7 +49,7 @@ type OSPFReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the ospf. Provider provider.ProviderFunc diff --git a/internal/controller/core/pim_controller.go b/internal/controller/core/pim_controller.go index b444b288..95fd9f0d 100644 --- a/internal/controller/core/pim_controller.go +++ b/internal/controller/core/pim_controller.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -46,7 +46,7 @@ type PIMReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the pim. Provider provider.ProviderFunc diff --git a/internal/controller/core/prefixset_controller.go b/internal/controller/core/prefixset_controller.go index 9ee8299c..3634bf43 100644 --- a/internal/controller/core/prefixset_controller.go +++ b/internal/controller/core/prefixset_controller.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -46,7 +46,7 @@ type PrefixSetReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the prefixset. Provider provider.ProviderFunc diff --git a/internal/controller/core/routingpolicy_controller.go b/internal/controller/core/routingpolicy_controller.go index 6faa037a..fb90023e 100644 --- a/internal/controller/core/routingpolicy_controller.go +++ b/internal/controller/core/routingpolicy_controller.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -46,7 +46,7 @@ type RoutingPolicyReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the routingpolicy. Provider provider.ProviderFunc diff --git a/internal/controller/core/snmp_controller.go b/internal/controller/core/snmp_controller.go index f01fbf3f..74f71398 100644 --- a/internal/controller/core/snmp_controller.go +++ b/internal/controller/core/snmp_controller.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -46,7 +46,7 @@ type SNMPReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the snmp. Provider provider.ProviderFunc diff --git a/internal/controller/core/suite_test.go b/internal/controller/core/suite_test.go index ae664b61..bee5e525 100644 --- a/internal/controller/core/suite_test.go +++ b/internal/controller/core/suite_test.go @@ -21,7 +21,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/envtest" @@ -90,7 +90,7 @@ var _ = BeforeSuite(func() { }) Expect(err).ToNot(HaveOccurred()) - recorder := record.NewFakeRecorder(0) + recorder := events.NewFakeRecorder(0) go func() { for event := range recorder.Events { GinkgoLogr.Info("Event", "event", event) diff --git a/internal/controller/core/syslog_controller.go b/internal/controller/core/syslog_controller.go index 44baaead..fee1c4a7 100644 --- a/internal/controller/core/syslog_controller.go +++ b/internal/controller/core/syslog_controller.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -46,7 +46,7 @@ type SyslogReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the syslog. Provider provider.ProviderFunc diff --git a/internal/controller/core/user_controller.go b/internal/controller/core/user_controller.go index 81295fd3..a3310821 100644 --- a/internal/controller/core/user_controller.go +++ b/internal/controller/core/user_controller.go @@ -18,7 +18,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -48,7 +48,7 @@ type UserReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the user. Provider provider.ProviderFunc diff --git a/internal/controller/core/vlan_controller.go b/internal/controller/core/vlan_controller.go index 9fbbec75..43f7a76f 100644 --- a/internal/controller/core/vlan_controller.go +++ b/internal/controller/core/vlan_controller.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -46,7 +46,7 @@ type VLANReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the vlan. Provider provider.ProviderFunc diff --git a/internal/controller/core/vrf_controller.go b/internal/controller/core/vrf_controller.go index 8d763d96..06844c05 100644 --- a/internal/controller/core/vrf_controller.go +++ b/internal/controller/core/vrf_controller.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" kerrors "k8s.io/apimachinery/pkg/util/errors" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/builder" @@ -46,7 +46,7 @@ type VRFReconciler struct { // Recorder is used to record events for the controller. // More info: https://book.kubebuilder.io/reference/raising-events - Recorder record.EventRecorder + Recorder events.EventRecorder // Provider is the driver that will be used to create & delete the isis. Provider provider.ProviderFunc diff --git a/internal/provisioning/http.go b/internal/provisioning/http.go index 8a9eefaf..fdc876be 100644 --- a/internal/provisioning/http.go +++ b/internal/provisioning/http.go @@ -14,7 +14,7 @@ import ( "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" "sigs.k8s.io/controller-runtime/pkg/client" @@ -89,7 +89,7 @@ type HTTPServer struct { Client client.Client Logger klog.Logger Mux *http.ServeMux - Recorder record.EventRecorder + Recorder events.EventRecorder ValidateSourceIP bool Provider provider.ProvisioningProvider Port int @@ -216,7 +216,7 @@ func (s *HTTPServer) HandleStatusReport(w http.ResponseWriter, r *http.Request) act.Error = report.Detail } - s.Recorder.Eventf(device, "Normal", "Provisioning", "%s: %s", report.Status, report.Detail) + s.Recorder.Eventf(device, nil, "Normal", "Provisioning", "StatusReport", "%s: %s", report.Status, report.Detail) if err := s.Client.Status().Update(ctx, device); err != nil { s.Logger.Error(err, "Failed to update device status", "device", device.Name) diff --git a/internal/provisioning/http_test.go b/internal/provisioning/http_test.go index 361ef84e..2eee0a12 100644 --- a/internal/provisioning/http_test.go +++ b/internal/provisioning/http_test.go @@ -20,7 +20,7 @@ import ( "k8s.io/apimachinery/pkg/types" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/tools/record" + "k8s.io/client-go/tools/events" "k8s.io/klog/v2" "sigs.k8s.io/controller-runtime/pkg/client/fake" @@ -358,7 +358,7 @@ func TestHandleStatusReport(t *testing.T) { server := &HTTPServer{ Client: k8sClient, Logger: klog.NewKlogr(), - Recorder: record.NewFakeRecorder(10), + Recorder: events.NewFakeRecorder(10), } rr := httptest.NewRecorder() diff --git a/internal/webhook/cisco/nx/v1alpha1/nveconfig_webhook.go b/internal/webhook/cisco/nx/v1alpha1/nveconfig_webhook.go index 80bc24fe..e99271b5 100644 --- a/internal/webhook/cisco/nx/v1alpha1/nveconfig_webhook.go +++ b/internal/webhook/cisco/nx/v1alpha1/nveconfig_webhook.go @@ -9,11 +9,9 @@ import ( "fmt" "slices" - "k8s.io/apimachinery/pkg/runtime" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" logf "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/webhook" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" "github.com/ironcore-dev/network-operator/api/cisco/nx/v1alpha1" @@ -24,8 +22,7 @@ var vclog = logf.Log.WithName("networkvirtualizationedgeconfig-resource") // SetupNetworkVirtualizationEdgeConfigWebhookWithManager registers the webhook for NetworkVirtualizationEdge in the manager. func SetupNetworkVirtualizationEdgeConfigWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(&v1alpha1.NetworkVirtualizationEdgeConfig{}). + return ctrl.NewWebhookManagedBy(mgr, &v1alpha1.NetworkVirtualizationEdgeConfig{}). WithValidator(&NetworkVirtualizationEdgeConfigCustomValidator{Client: mgr.GetClient()}). Complete() } @@ -38,37 +35,24 @@ type NetworkVirtualizationEdgeConfigCustomValidator struct { Client client.Client } -var _ webhook.CustomValidator = &NetworkVirtualizationEdgeConfigCustomValidator{} +var _ admission.Validator[*v1alpha1.NetworkVirtualizationEdgeConfig] = &NetworkVirtualizationEdgeConfigCustomValidator{} -// ValidateCreate implements webhook.CustomValidator so a webhook will be registered for the type NetworkVirtualizationEdgeConfig. -func (v *NetworkVirtualizationEdgeConfigCustomValidator) ValidateCreate(_ context.Context, obj runtime.Object) (admission.Warnings, error) { - vc, ok := obj.(*v1alpha1.NetworkVirtualizationEdgeConfig) - if !ok { - return nil, fmt.Errorf("expected a NetworkVirtualizationEdgeConfig object but got %T", obj) - } +// ValidateCreate implements admission.Validator so a webhook will be registered for the type NetworkVirtualizationEdgeConfig. +func (v *NetworkVirtualizationEdgeConfigCustomValidator) ValidateCreate(_ context.Context, vc *v1alpha1.NetworkVirtualizationEdgeConfig) (admission.Warnings, error) { vclog.Info("Validation for NetworkVirtualizationEdgeConfig upon creation", "name", vc.GetName()) return nil, validateNetworkVirtualizationEdgeConfigSpec(vc) } -// ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type NetworkVirtualizationEdgeConfig. -func (v *NetworkVirtualizationEdgeConfigCustomValidator) ValidateUpdate(_ context.Context, oldObj, newObj runtime.Object) (admission.Warnings, error) { - vc, ok := newObj.(*v1alpha1.NetworkVirtualizationEdgeConfig) - - if !ok { - return nil, fmt.Errorf("expected a NetworkVirtualizationEdgeConfig object for the newObj but got %T", newObj) - } +// ValidateUpdate implements admission.Validator so a webhook will be registered for the type NetworkVirtualizationEdgeConfig. +func (v *NetworkVirtualizationEdgeConfigCustomValidator) ValidateUpdate(_ context.Context, _, vc *v1alpha1.NetworkVirtualizationEdgeConfig) (admission.Warnings, error) { vclog.Info("Validation for NetworkVirtualizationEdgeConfig upon update", "name", vc.GetName()) return nil, validateNetworkVirtualizationEdgeConfigSpec(vc) } -// ValidateDelete implements webhook.CustomValidator so a webhook will be registered for the type NetworkVirtualizationEdgeConfig. -func (v *NetworkVirtualizationEdgeConfigCustomValidator) ValidateDelete(ctx context.Context, obj runtime.Object) (admission.Warnings, error) { - _, ok := obj.(*v1alpha1.NetworkVirtualizationEdgeConfig) - if !ok { - return nil, fmt.Errorf("expected a NetworkVirtualizationEdgeConfig object but got %T", obj) - } +// ValidateDelete implements admission.Validator so a webhook will be registered for the type NetworkVirtualizationEdgeConfig. +func (v *NetworkVirtualizationEdgeConfigCustomValidator) ValidateDelete(_ context.Context, _ *v1alpha1.NetworkVirtualizationEdgeConfig) (admission.Warnings, error) { return nil, nil } diff --git a/internal/webhook/cisco/nx/v1alpha1/nveconfig_webhook_test.go b/internal/webhook/cisco/nx/v1alpha1/nveconfig_webhook_test.go index 47f658ed..53d75779 100644 --- a/internal/webhook/cisco/nx/v1alpha1/nveconfig_webhook_test.go +++ b/internal/webhook/cisco/nx/v1alpha1/nveconfig_webhook_test.go @@ -111,10 +111,5 @@ var _ = Describe("NetworkVirtualizationEdgeConfig Webhook", func() { _, err := validator.ValidateDelete(ctx, obj) Expect(err).NotTo(HaveOccurred()) }) - - It("rejects delete when object type is wrong", func() { - _, err := validator.ValidateDelete(ctx, &nxv1alpha1.NetworkVirtualizationEdgeConfigList{}) - Expect(err).To(HaveOccurred()) - }) }) }) diff --git a/internal/webhook/core/v1alpha1/bgp_webhook.go b/internal/webhook/core/v1alpha1/bgp_webhook.go index 69d8c96c..0a09d030 100644 --- a/internal/webhook/core/v1alpha1/bgp_webhook.go +++ b/internal/webhook/core/v1alpha1/bgp_webhook.go @@ -10,11 +10,9 @@ import ( "strconv" "strings" - "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/intstr" ctrl "sigs.k8s.io/controller-runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/webhook" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" "github.com/ironcore-dev/network-operator/api/core/v1alpha1" @@ -25,7 +23,7 @@ var bgplog = logf.Log.WithName("bgp-resource") // SetupBGPWebhookWithManager registers the webhook for BGP in the manager. func SetupBGPWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr).For(&v1alpha1.BGP{}). + return ctrl.NewWebhookManagedBy(mgr, &v1alpha1.BGP{}). WithValidator(&BGPCustomValidator{}). Complete() } @@ -36,34 +34,24 @@ func SetupBGPWebhookWithManager(mgr ctrl.Manager) error { // when it is created, updated, or deleted. type BGPCustomValidator struct{} -var _ webhook.CustomValidator = &BGPCustomValidator{} - -// ValidateCreate implements webhook.CustomValidator so a webhook will be registered for the type BGP. -func (v *BGPCustomValidator) ValidateCreate(_ context.Context, obj runtime.Object) (admission.Warnings, error) { - bgp, ok := obj.(*v1alpha1.BGP) - if !ok { - return nil, fmt.Errorf("expected a BGP object but got %T", obj) - } +var _ admission.Validator[*v1alpha1.BGP] = &BGPCustomValidator{} +// ValidateCreate implements admission.Validator so a webhook will be registered for the type BGP. +func (v *BGPCustomValidator) ValidateCreate(_ context.Context, bgp *v1alpha1.BGP) (admission.Warnings, error) { bgplog.Info("Validation for BGP upon creation", "name", bgp.GetName()) return nil, validateASNumber(bgp.Spec.ASNumber) } -// ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type BGP. -func (v *BGPCustomValidator) ValidateUpdate(_ context.Context, oldObj, newObj runtime.Object) (admission.Warnings, error) { - bgp, ok := newObj.(*v1alpha1.BGP) - if !ok { - return nil, fmt.Errorf("expected a BGP object for the newObj but got %T", newObj) - } - +// ValidateUpdate implements admission.Validator so a webhook will be registered for the type BGP. +func (v *BGPCustomValidator) ValidateUpdate(_ context.Context, _, bgp *v1alpha1.BGP) (admission.Warnings, error) { bgplog.Info("Validation for BGP upon update", "name", bgp.GetName()) return nil, validateASNumber(bgp.Spec.ASNumber) } -// ValidateDelete implements webhook.CustomValidator so a webhook will be registered for the type BGP. -func (v *BGPCustomValidator) ValidateDelete(ctx context.Context, obj runtime.Object) (admission.Warnings, error) { +// ValidateDelete implements admission.Validator so a webhook will be registered for the type BGP. +func (v *BGPCustomValidator) ValidateDelete(_ context.Context, _ *v1alpha1.BGP) (admission.Warnings, error) { return nil, nil } diff --git a/internal/webhook/core/v1alpha1/bgppeer_webhook.go b/internal/webhook/core/v1alpha1/bgppeer_webhook.go index 2363ffae..941f8aae 100644 --- a/internal/webhook/core/v1alpha1/bgppeer_webhook.go +++ b/internal/webhook/core/v1alpha1/bgppeer_webhook.go @@ -5,12 +5,9 @@ package v1alpha1 import ( "context" - "fmt" - "k8s.io/apimachinery/pkg/runtime" ctrl "sigs.k8s.io/controller-runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/webhook" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" "github.com/ironcore-dev/network-operator/api/core/v1alpha1" @@ -21,7 +18,7 @@ var bgppeerlog = logf.Log.WithName("bgppeer-resource") // SetupBGPPeerWebhookWithManager registers the webhook for BGPPeer in the manager. func SetupBGPPeerWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr).For(&v1alpha1.BGPPeer{}). + return ctrl.NewWebhookManagedBy(mgr, &v1alpha1.BGPPeer{}). WithValidator(&BGPPeerCustomValidator{}). Complete() } @@ -32,33 +29,23 @@ func SetupBGPPeerWebhookWithManager(mgr ctrl.Manager) error { // when it is created, updated, or deleted. type BGPPeerCustomValidator struct{} -var _ webhook.CustomValidator = &BGPPeerCustomValidator{} - -// ValidateCreate implements webhook.CustomValidator so a webhook will be registered for the type BGPPeer. -func (v *BGPPeerCustomValidator) ValidateCreate(_ context.Context, obj runtime.Object) (admission.Warnings, error) { - bgppeer, ok := obj.(*v1alpha1.BGPPeer) - if !ok { - return nil, fmt.Errorf("expected a BGPPeer object but got %T", obj) - } +var _ admission.Validator[*v1alpha1.BGPPeer] = &BGPPeerCustomValidator{} +// ValidateCreate implements admission.Validator so a webhook will be registered for the type BGPPeer. +func (v *BGPPeerCustomValidator) ValidateCreate(_ context.Context, bgppeer *v1alpha1.BGPPeer) (admission.Warnings, error) { bgppeerlog.Info("Validation for BGPPeer upon creation", "name", bgppeer.GetName()) return nil, validateASNumber(bgppeer.Spec.ASNumber) } -// ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type BGPPeer. -func (v *BGPPeerCustomValidator) ValidateUpdate(_ context.Context, oldObj, newObj runtime.Object) (admission.Warnings, error) { - bgppeer, ok := newObj.(*v1alpha1.BGPPeer) - if !ok { - return nil, fmt.Errorf("expected a BGPPeer object for the newObj but got %T", newObj) - } - +// ValidateUpdate implements admission.Validator so a webhook will be registered for the type BGPPeer. +func (v *BGPPeerCustomValidator) ValidateUpdate(_ context.Context, _, bgppeer *v1alpha1.BGPPeer) (admission.Warnings, error) { bgppeerlog.Info("Validation for BGPPeer upon update", "name", bgppeer.GetName()) return nil, validateASNumber(bgppeer.Spec.ASNumber) } -// ValidateDelete implements webhook.CustomValidator so a webhook will be registered for the type BGPPeer. -func (v *BGPPeerCustomValidator) ValidateDelete(ctx context.Context, obj runtime.Object) (admission.Warnings, error) { +// ValidateDelete implements admission.Validator so a webhook will be registered for the type BGPPeer. +func (v *BGPPeerCustomValidator) ValidateDelete(_ context.Context, _ *v1alpha1.BGPPeer) (admission.Warnings, error) { return nil, nil } diff --git a/internal/webhook/core/v1alpha1/interface_webhook.go b/internal/webhook/core/v1alpha1/interface_webhook.go index 9fab6cf5..245aa4a9 100644 --- a/internal/webhook/core/v1alpha1/interface_webhook.go +++ b/internal/webhook/core/v1alpha1/interface_webhook.go @@ -8,10 +8,8 @@ import ( "errors" "fmt" - "k8s.io/apimachinery/pkg/runtime" ctrl "sigs.k8s.io/controller-runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/webhook" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" "github.com/ironcore-dev/network-operator/api/core/v1alpha1" @@ -22,8 +20,7 @@ var interfacelog = logf.Log.WithName("interface-resource") // SetupInterfaceWebhookWithManager registers the webhook for Interfaces in the manager. func SetupInterfaceWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(&v1alpha1.Interface{}). + return ctrl.NewWebhookManagedBy(mgr, &v1alpha1.Interface{}). WithValidator(&InterfaceCustomValidator{}). Complete() } @@ -34,34 +31,24 @@ func SetupInterfaceWebhookWithManager(mgr ctrl.Manager) error { // when it is created, updated, or deleted. type InterfaceCustomValidator struct{} -var _ webhook.CustomValidator = &InterfaceCustomValidator{} - -// ValidateCreate implements webhook.CustomValidator so a webhook will be registered for the type Interface. -func (v *InterfaceCustomValidator) ValidateCreate(_ context.Context, obj runtime.Object) (admission.Warnings, error) { - intf, ok := obj.(*v1alpha1.Interface) - if !ok { - return nil, fmt.Errorf("expected a Interfaces object but got %T", obj) - } +var _ admission.Validator[*v1alpha1.Interface] = &InterfaceCustomValidator{} +// ValidateCreate implements admission.Validator so a webhook will be registered for the type Interface. +func (v *InterfaceCustomValidator) ValidateCreate(_ context.Context, intf *v1alpha1.Interface) (admission.Warnings, error) { interfacelog.Info("Validation for Interfaces upon creation", "name", intf.GetName()) return nil, validateInterfaceSpec(intf) } -// ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type Interface. -func (v *InterfaceCustomValidator) ValidateUpdate(_ context.Context, oldObj, newObj runtime.Object) (admission.Warnings, error) { - intf, ok := newObj.(*v1alpha1.Interface) - if !ok { - return nil, fmt.Errorf("expected a Interfaces object for the newObj but got %T", newObj) - } - +// ValidateUpdate implements admission.Validator so a webhook will be registered for the type Interface. +func (v *InterfaceCustomValidator) ValidateUpdate(_ context.Context, _, intf *v1alpha1.Interface) (admission.Warnings, error) { interfacelog.Info("Validation for Interfaces upon update", "name", intf.GetName()) return nil, validateInterfaceSpec(intf) } -// ValidateDelete implements webhook.CustomValidator so a webhook will be registered for the type Interface. -func (v *InterfaceCustomValidator) ValidateDelete(ctx context.Context, obj runtime.Object) (admission.Warnings, error) { +// ValidateDelete implements admission.Validator so a webhook will be registered for the type Interface. +func (v *InterfaceCustomValidator) ValidateDelete(_ context.Context, _ *v1alpha1.Interface) (admission.Warnings, error) { return nil, nil } diff --git a/internal/webhook/core/v1alpha1/nve_webhook.go b/internal/webhook/core/v1alpha1/nve_webhook.go index 62bbc1cb..6960ff64 100644 --- a/internal/webhook/core/v1alpha1/nve_webhook.go +++ b/internal/webhook/core/v1alpha1/nve_webhook.go @@ -6,14 +6,11 @@ package v1alpha1 import ( "context" "errors" - "fmt" "net/netip" - "k8s.io/apimachinery/pkg/runtime" ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/client" logf "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/webhook" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" "github.com/ironcore-dev/network-operator/api/core/v1alpha1" @@ -24,8 +21,7 @@ var nvelog = logf.Log.WithName("networkvirtualizationedge-resource") // SetupNetworkVirtualizationEdgeWebhookWithManager registers the webhook for NetworkVirtualizationEdge in the manager. func SetupNetworkVirtualizationEdgeWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(&v1alpha1.NetworkVirtualizationEdge{}). + return ctrl.NewWebhookManagedBy(mgr, &v1alpha1.NetworkVirtualizationEdge{}). WithValidator(&NetworkVirtualizationEdgeCustomValidator{mgr.GetClient()}). Complete() } @@ -37,37 +33,24 @@ type NetworkVirtualizationEdgeCustomValidator struct { Client client.Client } -var _ webhook.CustomValidator = &NetworkVirtualizationEdgeCustomValidator{} +var _ admission.Validator[*v1alpha1.NetworkVirtualizationEdge] = &NetworkVirtualizationEdgeCustomValidator{} -// ValidateCreate implements webhook.CustomValidator so a webhook will be registered for the type NetworkVirtualizationEdge. -func (v *NetworkVirtualizationEdgeCustomValidator) ValidateCreate(_ context.Context, obj runtime.Object) (admission.Warnings, error) { - nve, ok := obj.(*v1alpha1.NetworkVirtualizationEdge) - if !ok { - return nil, fmt.Errorf("expected a NetworkVirtualizationEdge object but got %T", obj) - } +// ValidateCreate implements admission.Validator so a webhook will be registered for the type NetworkVirtualizationEdge. +func (v *NetworkVirtualizationEdgeCustomValidator) ValidateCreate(_ context.Context, nve *v1alpha1.NetworkVirtualizationEdge) (admission.Warnings, error) { nvelog.Info("Validation for NetworkVirtualizationEdge upon creation", "name", nve.GetName()) return nil, v.validateNetworkVirtualizationEdgeSpec(nve) } -// ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type NetworkVirtualizationEdge . -func (v *NetworkVirtualizationEdgeCustomValidator) ValidateUpdate(_ context.Context, oldObj, newObj runtime.Object) (admission.Warnings, error) { - nve, ok := newObj.(*v1alpha1.NetworkVirtualizationEdge) - if !ok { - return nil, fmt.Errorf("expected a NetworkVirtualizationEdge object for the newObj but got %T", newObj) - } +// ValidateUpdate implements admission.Validator so a webhook will be registered for the type NetworkVirtualizationEdge. +func (v *NetworkVirtualizationEdgeCustomValidator) ValidateUpdate(_ context.Context, _, nve *v1alpha1.NetworkVirtualizationEdge) (admission.Warnings, error) { nvelog.Info("Validation for NetworkVirtualizationEdge upon update", "name", nve.GetName()) return nil, v.validateNetworkVirtualizationEdgeSpec(nve) } -// ValidateDelete implements webhook.CustomValidator so a webhook will be registered for the type NetworkVirtualizationEdge. -func (v *NetworkVirtualizationEdgeCustomValidator) ValidateDelete(ctx context.Context, obj runtime.Object) (admission.Warnings, error) { - _, ok := obj.(*v1alpha1.NetworkVirtualizationEdge) - if !ok { - return nil, fmt.Errorf("expected a NetworkVirtualizationEdge object but got %T", obj) - } - +// ValidateDelete implements admission.Validator so a webhook will be registered for the type NetworkVirtualizationEdge. +func (v *NetworkVirtualizationEdgeCustomValidator) ValidateDelete(_ context.Context, _ *v1alpha1.NetworkVirtualizationEdge) (admission.Warnings, error) { return nil, nil } diff --git a/internal/webhook/core/v1alpha1/nve_webhook_test.go b/internal/webhook/core/v1alpha1/nve_webhook_test.go index 4d933b97..03bd5edc 100644 --- a/internal/webhook/core/v1alpha1/nve_webhook_test.go +++ b/internal/webhook/core/v1alpha1/nve_webhook_test.go @@ -106,10 +106,5 @@ var _ = Describe("NetworkVirtualizationEdge Webhook", func() { _, err := validator.ValidateDelete(ctx, obj) Expect(err).ToNot(HaveOccurred()) }) - - It("rejects delete when object type is wrong", func() { - _, err := validator.ValidateDelete(ctx, &corev1alpha1.NetworkVirtualizationEdgeList{}) - Expect(err).To(HaveOccurred()) - }) }) }) diff --git a/internal/webhook/core/v1alpha1/prefixset_webhook.go b/internal/webhook/core/v1alpha1/prefixset_webhook.go index 6a754982..2a0b7b97 100644 --- a/internal/webhook/core/v1alpha1/prefixset_webhook.go +++ b/internal/webhook/core/v1alpha1/prefixset_webhook.go @@ -8,10 +8,8 @@ import ( "errors" "fmt" - "k8s.io/apimachinery/pkg/runtime" ctrl "sigs.k8s.io/controller-runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/webhook" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" "github.com/ironcore-dev/network-operator/api/core/v1alpha1" @@ -22,8 +20,7 @@ var prefixsetlog = logf.Log.WithName("prefixset-resource") // SetupPrefixSetWebhookWithManager registers the webhook for PrefixSets in the manager. func SetupPrefixSetWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(&v1alpha1.PrefixSet{}). + return ctrl.NewWebhookManagedBy(mgr, &v1alpha1.PrefixSet{}). WithValidator(&PrefixSetCustomValidator{}). Complete() } @@ -34,32 +31,17 @@ func SetupPrefixSetWebhookWithManager(mgr ctrl.Manager) error { // when it is created, updated, or deleted. type PrefixSetCustomValidator struct{} -var _ webhook.CustomValidator = &PrefixSetCustomValidator{} - -// ValidateCreate implements webhook.CustomValidator so a webhook will be registered for the type PrefixSet. -func (v *PrefixSetCustomValidator) ValidateCreate(_ context.Context, obj runtime.Object) (admission.Warnings, error) { - ps, ok := obj.(*v1alpha1.PrefixSet) - if !ok { - return nil, fmt.Errorf("expected a PrefixSets object but got %T", obj) - } +var _ admission.Validator[*v1alpha1.PrefixSet] = &PrefixSetCustomValidator{} +// ValidateCreate implements admission.Validator so a webhook will be registered for the type PrefixSet. +func (v *PrefixSetCustomValidator) ValidateCreate(_ context.Context, ps *v1alpha1.PrefixSet) (admission.Warnings, error) { prefixsetlog.Info("Validation for PrefixSets upon creation", "name", ps.GetName()) return nil, validatePrefixSetSpec(ps) } -// ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type PrefixSet. -func (v *PrefixSetCustomValidator) ValidateUpdate(_ context.Context, oldObj, newObj runtime.Object) (admission.Warnings, error) { - prev, ok := oldObj.(*v1alpha1.PrefixSet) - if !ok { - return nil, fmt.Errorf("expected a PrefixSets object for the oldObj but got %T", oldObj) - } - - curr, ok := newObj.(*v1alpha1.PrefixSet) - if !ok { - return nil, fmt.Errorf("expected a PrefixSets object for the newObj but got %T", newObj) - } - +// ValidateUpdate implements admission.Validator so a webhook will be registered for the type PrefixSet. +func (v *PrefixSetCustomValidator) ValidateUpdate(_ context.Context, prev, curr *v1alpha1.PrefixSet) (admission.Warnings, error) { prefixsetlog.Info("Validation for PrefixSets upon update", "name", curr.GetName()) if err := validatePrefixSetSpec(curr); err != nil { @@ -73,8 +55,8 @@ func (v *PrefixSetCustomValidator) ValidateUpdate(_ context.Context, oldObj, new return nil, nil } -// ValidateDelete implements webhook.CustomValidator so a webhook will be registered for the type PrefixSet. -func (v *PrefixSetCustomValidator) ValidateDelete(ctx context.Context, obj runtime.Object) (admission.Warnings, error) { +// ValidateDelete implements admission.Validator so a webhook will be registered for the type PrefixSet. +func (v *PrefixSetCustomValidator) ValidateDelete(_ context.Context, _ *v1alpha1.PrefixSet) (admission.Warnings, error) { return nil, nil } diff --git a/internal/webhook/core/v1alpha1/vrf_webhook.go b/internal/webhook/core/v1alpha1/vrf_webhook.go index 5a48b7ee..d66c9f1a 100644 --- a/internal/webhook/core/v1alpha1/vrf_webhook.go +++ b/internal/webhook/core/v1alpha1/vrf_webhook.go @@ -12,10 +12,8 @@ import ( "strconv" "strings" - "k8s.io/apimachinery/pkg/runtime" ctrl "sigs.k8s.io/controller-runtime" logf "sigs.k8s.io/controller-runtime/pkg/log" - "sigs.k8s.io/controller-runtime/pkg/webhook" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" "github.com/ironcore-dev/network-operator/api/core/v1alpha1" @@ -26,8 +24,7 @@ var vrflog = logf.Log.WithName("vrf-resource") // SetupVRFWebhookWithManager registers the webhook for VRF in the manager. func SetupVRFWebhookWithManager(mgr ctrl.Manager) error { - return ctrl.NewWebhookManagedBy(mgr). - For(&v1alpha1.VRF{}). + return ctrl.NewWebhookManagedBy(mgr, &v1alpha1.VRF{}). WithValidator(&VRFCustomValidator{}). Complete() } @@ -38,32 +35,24 @@ func SetupVRFWebhookWithManager(mgr ctrl.Manager) error { // when it is created, updated, or deleted. type VRFCustomValidator struct{} -var _ webhook.CustomValidator = &VRFCustomValidator{} +var _ admission.Validator[*v1alpha1.VRF] = &VRFCustomValidator{} -// ValidateCreate implements webhook.CustomValidator so a webhook will be registered for the type VRF. -func (v *VRFCustomValidator) ValidateCreate(_ context.Context, obj runtime.Object) (admission.Warnings, error) { - vrf, ok := obj.(*v1alpha1.VRF) - if !ok { - return nil, fmt.Errorf("expected a VRF object but got %T", obj) - } +// ValidateCreate implements admission.Validator so a webhook will be registered for the type VRF. +func (v *VRFCustomValidator) ValidateCreate(_ context.Context, vrf *v1alpha1.VRF) (admission.Warnings, error) { vrflog.Info("Validation for VRF upon creation", "name", vrf.GetName()) return nil, validateVRFSpec(vrf) } -// ValidateUpdate implements webhook.CustomValidator so a webhook will be registered for the type VRF. -func (v *VRFCustomValidator) ValidateUpdate(_ context.Context, oldObj, newObj runtime.Object) (admission.Warnings, error) { - vrf, ok := newObj.(*v1alpha1.VRF) - if !ok { - return nil, fmt.Errorf("expected a VRF object for the newObj but got %T", newObj) - } +// ValidateUpdate implements admission.Validator so a webhook will be registered for the type VRF. +func (v *VRFCustomValidator) ValidateUpdate(_ context.Context, _, vrf *v1alpha1.VRF) (admission.Warnings, error) { vrflog.Info("Validation for VRF upon update", "name", vrf.GetName()) return nil, validateVRFSpec(vrf) } -// ValidateDelete implements webhook.CustomValidator so a webhook will be registered for the type VRF. -func (v *VRFCustomValidator) ValidateDelete(ctx context.Context, obj runtime.Object) (admission.Warnings, error) { +// ValidateDelete implements admission.Validator so a webhook will be registered for the type VRF. +func (v *VRFCustomValidator) ValidateDelete(_ context.Context, _ *v1alpha1.VRF) (admission.Warnings, error) { return nil, nil }