From 47b1f55c453bc44b42021e95314751ebba131091 Mon Sep 17 00:00:00 2001 From: Philip Laine Date: Thu, 12 Mar 2026 21:40:36 +0100 Subject: [PATCH] Set Go toolchain to v1.26.1 and apply modernizations (#138) This change makes sure that we use the latest Go version when building and applies some modernization fixes. --- cmd/main.go | 2 +- go.mod | 2 ++ internal/controller/nbpolicy_controller.go | 14 ++++++------- internal/controller/nbresource_controller.go | 12 +++++------ .../controller/nbroutingpeer_controller.go | 8 +++---- internal/controller/service_controller.go | 21 ++++++++++--------- internal/util/slices.go | 12 +---------- test/utils/utils.go | 4 ++-- 8 files changed, 34 insertions(+), 41 deletions(-) diff --git a/cmd/main.go b/cmd/main.go index e9af517..81212be 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -137,7 +137,7 @@ func main() { defaultLabelsMap := make(map[string]string) if defaultLabels != "" { - for _, s := range strings.Split(defaultLabels, ",") { + for s := range strings.SplitSeq(defaultLabels, ",") { kv := strings.Split(s, "=") if len(kv) != 2 { panic(fmt.Errorf("invalid label format: %s", s)) diff --git a/go.mod b/go.mod index fa6a457..08e01b5 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,8 @@ module github.com/netbirdio/kubernetes-operator go 1.25.0 +toolchain go1.26.1 + require ( github.com/go-logr/logr v1.4.3 github.com/google/uuid v1.6.0 diff --git a/internal/controller/nbpolicy_controller.go b/internal/controller/nbpolicy_controller.go index df739a1..9976821 100644 --- a/internal/controller/nbpolicy_controller.go +++ b/internal/controller/nbpolicy_controller.go @@ -68,9 +68,9 @@ func (r *NBPolicyReconciler) getResources(ctx context.Context, nbPolicy *netbird // mapResources map each NBResource ports and protocols into one object to generate the policy // returns map[protocol] => ports, destination group IDs func (r *NBPolicyReconciler) mapResources(ctx context.Context, nbPolicy *netbirdiov1.NBPolicy, resources []netbirdiov1.NBResource, logger logr.Logger) (map[string][]int32, []string, error) { - portMapping := map[string]map[int32]interface{}{ - protocolTCP: make(map[int32]interface{}), - protocolUDP: make(map[int32]interface{}), + portMapping := map[string]map[int32]any{ + protocolTCP: make(map[int32]any), + protocolUDP: make(map[int32]any), } groups, err := r.groupNamesToIDs(ctx, nbPolicy.Spec.DestinationGroups, logger) if err != nil { @@ -85,11 +85,11 @@ func (r *NBPolicyReconciler) mapResources(ctx context.Context, nbPolicy *netbird } resourcePolicies := util.SplitTrim(*resource.Status.PolicyName, ",") - if generatedBy == "" && !util.Contains(resourcePolicies, nbPolicy.Name) { + if generatedBy == "" && !slices.Contains(resourcePolicies, nbPolicy.Name) { continue } - if generatedBy != "" && !util.Contains(resourcePolicies, strings.ReplaceAll(nbPolicy.Name, "-"+generatedBy, "")) { + if generatedBy != "" && !slices.Contains(resourcePolicies, strings.ReplaceAll(nbPolicy.Name, "-"+generatedBy, "")) { continue } // Groups @@ -282,7 +282,7 @@ func (r *NBPolicyReconciler) syncPolicy(ctx context.Context, nbPolicy *netbirdio return requeue, errUnknownProtocol } - if len(nbPolicy.Spec.Protocols) > 0 && !util.Contains(nbPolicy.Spec.Protocols, protocol) { + if len(nbPolicy.Spec.Protocols) > 0 && !slices.Contains(nbPolicy.Spec.Protocols, protocol) { if policyID != nil { logger.Info("Deleting protocol policy as NBPolicy has restricted protocols", "protocol", protocol) err := r.netbird.Policies.Delete(ctx, *policyID) @@ -363,7 +363,7 @@ func (r *NBPolicyReconciler) handleDelete(ctx context.Context, nbPolicy *netbird } nbPolicy.Status.UDPPolicyID = nil } - if util.Contains(nbPolicy.Finalizers, "netbird.io/cleanup") { + if slices.Contains(nbPolicy.Finalizers, "netbird.io/cleanup") { nbPolicy.Finalizers = util.Without(nbPolicy.Finalizers, "netbird.io/cleanup") err := r.Client.Update(ctx, nbPolicy) if err != nil { diff --git a/internal/controller/nbresource_controller.go b/internal/controller/nbresource_controller.go index ec1ea6d..551e426 100644 --- a/internal/controller/nbresource_controller.go +++ b/internal/controller/nbresource_controller.go @@ -217,7 +217,7 @@ func (r *NBResourceReconciler) handlePolicyAddUpdate(ctx context.Context, req ct return err } - if !util.Contains(nbPolicy.Status.ManagedServiceList, req.NamespacedName.String()) { + if !slices.Contains(nbPolicy.Status.ManagedServiceList, req.NamespacedName.String()) { nbPolicy.Status.ManagedServiceList = append(nbPolicy.Status.ManagedServiceList, req.NamespacedName.String()) updatePolicyStatus = true } @@ -293,7 +293,7 @@ func (r *NBResourceReconciler) handlePolicyAddUpdate(ctx context.Context, req ct func (r *NBResourceReconciler) handlePolicyDelete(ctx context.Context, req ctrl.Request, nbResource *netbirdiov1.NBResource, specPolicies []string, policy string, logger logr.Logger) error { var nbPolicy netbirdiov1.NBPolicy - if !util.Contains(specPolicies, policy) { + if !slices.Contains(specPolicies, policy) { kubeName := policy if v, ok := nbResource.Status.PolicyNameMapping[policy]; ok { kubeName = v @@ -314,7 +314,7 @@ func (r *NBResourceReconciler) handlePolicyDelete(ctx context.Context, req ctrl. } delete(nbResource.Status.PolicyNameMapping, policy) - } else if util.Contains(nbPolicy.Status.ManagedServiceList, req.NamespacedName.String()) { + } else if slices.Contains(nbPolicy.Status.ManagedServiceList, req.NamespacedName.String()) { nbPolicy.Status.ManagedServiceList = util.Without(nbPolicy.Status.ManagedServiceList, req.NamespacedName.String()) nbPolicy.Status.LastUpdatedAt = &v1.Time{Time: time.Now()} err := r.Client.Status().Update(ctx, &nbPolicy) @@ -364,7 +364,7 @@ func (r *NBResourceReconciler) handlePolicy(ctx context.Context, req ctrl.Reques // handleGroupUpdate update network resource groups func (r *NBResourceReconciler) handleGroupUpdate(ctx context.Context, nbResource *netbirdiov1.NBResource, groupIDs []string, resource *api.NetworkResource, logger logr.Logger) error { // Handle possible updated group IDs - groupIDMap := make(map[string]interface{}) + groupIDMap := make(map[string]any) for _, g := range groupIDs { groupIDMap[g] = nil } @@ -478,7 +478,7 @@ func (r *NBResourceReconciler) handleGroups(ctx context.Context, req ctrl.Reques if ownerIndex == -1 { continue } - if util.Contains(nbResource.Spec.Groups, g.Spec.Name) { + if slices.Contains(nbResource.Spec.Groups, g.Spec.Name) { continue } if len(g.OwnerReferences) > 1 { @@ -603,7 +603,7 @@ func (r *NBResourceReconciler) handleDelete(ctx context.Context, req ctrl.Reques return err } - if !errors.IsNotFound(err) && util.Contains(nbPolicy.Status.ManagedServiceList, req.NamespacedName.String()) { + if !errors.IsNotFound(err) && slices.Contains(nbPolicy.Status.ManagedServiceList, req.NamespacedName.String()) { nbPolicy.Status.ManagedServiceList = util.Without(nbPolicy.Status.ManagedServiceList, req.NamespacedName.String()) nbPolicy.Status.LastUpdatedAt = &v1.Time{Time: time.Now()} err = r.Client.Status().Update(ctx, &nbPolicy) diff --git a/internal/controller/nbroutingpeer_controller.go b/internal/controller/nbroutingpeer_controller.go index e9ebb1e..146c63e 100644 --- a/internal/controller/nbroutingpeer_controller.go +++ b/internal/controller/nbroutingpeer_controller.go @@ -3,6 +3,8 @@ package controller import ( "context" "fmt" + "maps" + "slices" "strings" "time" @@ -123,9 +125,7 @@ func (r *NBRoutingPeerReconciler) handleDeployment(ctx context.Context, req ctrl } labels := r.DefaultLabels - for k, v := range nbrp.Spec.Labels { - labels[k] = v - } + maps.Copy(labels, nbrp.Spec.Labels) podLabels := labels podLabels["app.kubernetes.io/name"] = "netbird-router" @@ -617,7 +617,7 @@ func (r *NBRoutingPeerReconciler) handleDelete(ctx context.Context, req ctrl.Req } } - if nbGroup.Spec.Name != "" && util.Contains(nbGroup.Finalizers, "netbird.io/routing-peer-cleanup") { + if nbGroup.Spec.Name != "" && slices.Contains(nbGroup.Finalizers, "netbird.io/routing-peer-cleanup") { nbGroup.Finalizers = util.Without(nbGroup.Finalizers, "netbird.io/routing-peer-cleanup") logger.Info("Removing netbird.io/routing-peer-cleanup finalizer NBGroup", "namespace", nbGroup.Namespace, "name", nbGroup.Name) err = r.Client.Update(ctx, &nbGroup) diff --git a/internal/controller/service_controller.go b/internal/controller/service_controller.go index f90469d..d3b5f8c 100644 --- a/internal/controller/service_controller.go +++ b/internal/controller/service_controller.go @@ -3,6 +3,7 @@ package controller import ( "context" "fmt" + "slices" "strconv" "strings" "time" @@ -96,7 +97,7 @@ func (r *ServiceReconciler) hideService(ctx context.Context, req ctrl.Request, s } } - if util.Contains(svc.Finalizers, "netbird.io/cleanup") { + if slices.Contains(svc.Finalizers, "netbird.io/cleanup") { svc.Finalizers = util.Without(svc.Finalizers, "netbird.io/cleanup") err := r.Client.Update(ctx, &svc) if err != nil { @@ -115,7 +116,7 @@ func (r *ServiceReconciler) exposeService(ctx context.Context, req ctrl.Request, routerNamespace = req.Namespace } - if !util.Contains(svc.Finalizers, "netbird.io/cleanup") { + if !slices.Contains(svc.Finalizers, "netbird.io/cleanup") { svc.Finalizers = append(svc.Finalizers, "netbird.io/cleanup") err := r.Client.Update(ctx, &svc) if err != nil { @@ -196,7 +197,7 @@ func (r *ServiceReconciler) reconcileNBResource(nbResource *netbirdiov1.NBResour if v, ok := svc.Annotations[serviceGroupsAnnotation]; ok { //nolint:prealloc groups = nil - for _, g := range strings.Split(v, ",") { + for g := range strings.SplitSeq(v, ",") { groups = append(groups, strings.TrimSpace(g)) } } @@ -237,7 +238,7 @@ func (r *ServiceReconciler) applyPolicy(nbResource *netbirdiov1.NBResource, svc } var filterPorts []int32 if v, ok := svc.Annotations[servicePortsAnnotation]; ok { - for _, v := range strings.Split(v, ",") { + for v := range strings.SplitSeq(v, ",") { port, err := strconv.ParseInt(v, 10, 64) if err != nil { return err @@ -267,23 +268,23 @@ func (r *ServiceReconciler) applyPolicy(nbResource *netbirdiov1.NBResource, svc for _, p := range svc.Spec.Ports { switch p.Protocol { case corev1.ProtocolTCP: - if (len(filterPorts) > 0 && !util.Contains(filterPorts, p.Port)) || (len(filterProtocols) > 0 && !util.Contains(filterProtocols, "tcp")) { - if util.Contains(nbResource.Spec.TCPPorts, p.Port) { + if (len(filterPorts) > 0 && !slices.Contains(filterPorts, p.Port)) || (len(filterProtocols) > 0 && !slices.Contains(filterProtocols, "tcp")) { + if slices.Contains(nbResource.Spec.TCPPorts, p.Port) { nbResource.Spec.TCPPorts = util.Without(nbResource.Spec.TCPPorts, p.Port) } continue } - if !util.Contains(nbResource.Spec.TCPPorts, p.Port) { + if !slices.Contains(nbResource.Spec.TCPPorts, p.Port) { nbResource.Spec.TCPPorts = append(nbResource.Spec.TCPPorts, p.Port) } case corev1.ProtocolUDP: - if (len(filterPorts) > 0 && !util.Contains(filterPorts, p.Port)) || (len(filterProtocols) > 0 && !util.Contains(filterProtocols, "udp")) { - if util.Contains(nbResource.Spec.UDPPorts, p.Port) { + if (len(filterPorts) > 0 && !slices.Contains(filterPorts, p.Port)) || (len(filterProtocols) > 0 && !slices.Contains(filterProtocols, "udp")) { + if slices.Contains(nbResource.Spec.UDPPorts, p.Port) { nbResource.Spec.UDPPorts = util.Without(nbResource.Spec.UDPPorts, p.Port) } continue } - if !util.Contains(nbResource.Spec.UDPPorts, p.Port) { + if !slices.Contains(nbResource.Spec.UDPPorts, p.Port) { nbResource.Spec.UDPPorts = append(nbResource.Spec.UDPPorts, p.Port) } default: diff --git a/internal/util/slices.go b/internal/util/slices.go index 19ef3d0..d1241be 100644 --- a/internal/util/slices.go +++ b/internal/util/slices.go @@ -2,16 +2,6 @@ package util import "strings" -// Contains return if y is in slice x -func Contains[T comparable](x []T, y T) bool { - for _, v := range x { - if v == y { - return true - } - } - return false -} - // Without return all of x in same order without y func Without[T comparable](x []T, y T) []T { var ret []T @@ -29,7 +19,7 @@ func Equivalent[T comparable](x, y []T) bool { return false } - mp := make(map[T]interface{}) + mp := make(map[T]any) for _, v := range x { mp[v] = nil } diff --git a/test/utils/utils.go b/test/utils/utils.go index 58c3815..8d337e6 100644 --- a/test/utils/utils.go +++ b/test/utils/utils.go @@ -153,8 +153,8 @@ func LoadImageToKindClusterWithName(name string) error { // according to line breakers, and ignores the empty elements in it. func GetNonEmptyLines(output string) []string { var res []string - elements := strings.Split(output, "\n") - for _, element := range elements { + elements := strings.SplitSeq(output, "\n") + for element := range elements { if element != "" { res = append(res, element) }