diff --git a/pkg/controller/external_gw.go b/pkg/controller/external_gw.go index 916e304ff81..e797580cb26 100644 --- a/pkg/controller/external_gw.go +++ b/pkg/controller/external_gw.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "reflect" + "slices" "strings" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -234,7 +235,7 @@ func (c *Controller) getGatewayChassis(config map[string]string) ([]string, erro if name == "" { continue } - if !util.ContainsString(gwNodes, name) { + if !slices.Contains(gwNodes, name) { gwNodes = append(gwNodes, name) } } diff --git a/pkg/controller/external_vpc.go b/pkg/controller/external_vpc.go index 3f357c17ab6..7f58a1aa848 100644 --- a/pkg/controller/external_vpc.go +++ b/pkg/controller/external_vpc.go @@ -2,6 +2,7 @@ package controller import ( "context" + "slices" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" @@ -125,7 +126,7 @@ func (c *Controller) getRouterStatus() (logicalRouters map[string]util.LogicalRo } lsp := peerPorts[0] switches, err := c.OVNNbClient.ListLogicalSwitch(false, func(ls *ovnnb.LogicalSwitch) bool { - return util.ContainsString(ls.Ports, lsp.UUID) + return slices.Contains(ls.Ports, lsp.UUID) }) if err != nil || len(switches) > 1 { klog.Errorf("failed to get logical switch of LSP %s: %v", lsp.Name, err) diff --git a/pkg/controller/gc.go b/pkg/controller/gc.go index beee37fc092..444314ee626 100644 --- a/pkg/controller/gc.go +++ b/pkg/controller/gc.go @@ -3,6 +3,7 @@ package controller import ( "context" "fmt" + "slices" "strings" "unicode" @@ -102,7 +103,7 @@ func (c *Controller) gcVpcNatGateway() error { return err } for _, sts := range stss.Items { - if !util.ContainsString(gwStsNames, sts.Name) { + if !slices.Contains(gwStsNames, sts.Name) { err = c.config.KubeClient.AppsV1().StatefulSets(c.config.PodNamespace).Delete(context.Background(), sts.Name, metav1.DeleteOptions{}) if err != nil { klog.Errorf("failed to delete vpc nat gateway statefulset, %v", err) @@ -199,7 +200,7 @@ func (c *Controller) gcCustomLogicalRouter() error { if lr.Name == c.config.ClusterRouter { continue } - if !util.ContainsString(vpcNames, lr.Name) { + if !slices.Contains(vpcNames, lr.Name) { klog.Infof("gc router %s", lr.Name) if err := c.deleteVpcRouter(lr.Name); err != nil { klog.Errorf("failed to delete router %s, %v", lr.Name, err) @@ -233,7 +234,7 @@ func (c *Controller) gcNode() error { } } for _, no := range ipNodeNames { - if !util.ContainsString(nodeNames, no) { + if !slices.Contains(nodeNames, no) { klog.Infof("gc node %s", no) if err := c.handleDeleteNode(no); err != nil { klog.Errorf("failed to gc node %s, %v", no, err) @@ -586,7 +587,7 @@ func (c *Controller) gcLoadBalancer() error { // delete lbs if err = c.OVNNbClient.DeleteLoadBalancers( func(lb *ovnnb.LoadBalancer) bool { - return !util.ContainsString(vpcLbs, lb.Name) + return !slices.Contains(vpcLbs, lb.Name) }, ); err != nil { klog.Errorf("delete load balancers: %v", err) diff --git a/pkg/controller/init.go b/pkg/controller/init.go index 262f19da50e..b89fa91e207 100644 --- a/pkg/controller/init.go +++ b/pkg/controller/init.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "slices" "strings" "time" @@ -577,7 +578,7 @@ func (c *Controller) syncIPCR() error { for _, ipCR := range ips { ip := ipCR.DeepCopy() - if ip.DeletionTimestamp != nil && util.ContainsString(ip.Finalizers, util.ControllerName) { + if ip.DeletionTimestamp != nil && slices.Contains(ip.Finalizers, util.ControllerName) { klog.Infof("enqueue update for deleting ip %s", ip.Name) c.updateIPQueue.Add(ip.Name) } diff --git a/pkg/controller/ip.go b/pkg/controller/ip.go index 2e6c88df527..acea7b7fe6a 100644 --- a/pkg/controller/ip.go +++ b/pkg/controller/ip.go @@ -6,6 +6,7 @@ import ( "fmt" "net" "reflect" + "slices" "strings" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -342,7 +343,7 @@ func (c *Controller) handleDelIP(ip *kubeovnv1.IP) error { func (c *Controller) handleAddIPFinalizer(cachedIP *kubeovnv1.IP, finalizer string) error { if cachedIP.DeletionTimestamp.IsZero() { - if util.ContainsString(cachedIP.Finalizers, finalizer) { + if slices.Contains(cachedIP.Finalizers, finalizer) { return nil } } diff --git a/pkg/controller/namespace.go b/pkg/controller/namespace.go index 7f4df556df1..2e49411fc14 100644 --- a/pkg/controller/namespace.go +++ b/pkg/controller/namespace.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "reflect" + "slices" "strings" v1 "k8s.io/api/core/v1" @@ -143,7 +144,7 @@ func (c *Controller) handleAddNamespace(key string) error { } for _, p := range ippools { - if util.ContainsString(p.Spec.Namespaces, key) { + if slices.Contains(p.Spec.Namespaces, key) { ippool = p.Name break } @@ -162,7 +163,7 @@ func (c *Controller) handleAddNamespace(key string) error { return err } for _, v := range vpcs { - if util.ContainsString(v.Spec.Namespaces, key) { + if slices.Contains(v.Spec.Namespaces, key) { vpc = v break } diff --git a/pkg/controller/network_policy.go b/pkg/controller/network_policy.go index 20e15706ada..21dc5140260 100644 --- a/pkg/controller/network_policy.go +++ b/pkg/controller/network_policy.go @@ -3,6 +3,7 @@ package controller import ( "fmt" "reflect" + "slices" "strconv" "strings" "unicode" @@ -558,7 +559,7 @@ func (c *Controller) fetchSelectedPorts(namespace string, selector *metav1.Label } } } - subnets = util.UniqString(subnets) + subnets = slices.Compact(subnets) return ports, subnets, nil } diff --git a/pkg/controller/node.go b/pkg/controller/node.go index cb01d539295..a628337a14d 100644 --- a/pkg/controller/node.go +++ b/pkg/controller/node.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "reflect" + "slices" "strconv" "strings" "time" @@ -393,7 +394,7 @@ func (c *Controller) handleNodeAnnotationsForProviderNetworks(node *v1.Node) err interfaceAnno := fmt.Sprintf(util.ProviderNetworkInterfaceTemplate, pn.Name) var newPn *kubeovnv1.ProviderNetwork - excluded := util.ContainsString(pn.Spec.ExcludeNodes, node.Name) + excluded := slices.Contains(pn.Spec.ExcludeNodes, node.Name) if !excluded && len(node.Annotations) != 0 && node.Annotations[excludeAnno] == "true" { newPn = pn.DeepCopy() newPn.Spec.ExcludeNodes = append(newPn.Spec.ExcludeNodes, node.Name) @@ -402,7 +403,7 @@ func (c *Controller) handleNodeAnnotationsForProviderNetworks(node *v1.Node) err var customInterface string for _, v := range pn.Spec.CustomInterfaces { - if util.ContainsString(v.Nodes, node.Name) { + if slices.Contains(v.Nodes, node.Name) { customInterface = v.Interface break } @@ -547,7 +548,7 @@ func (c *Controller) updateProviderNetworkForNodeDeletion(pn *kubeovnv1.Provider // update provider network status var needUpdate bool newPn := pn.DeepCopy() - if util.ContainsString(newPn.Status.ReadyNodes, node) { + if slices.Contains(newPn.Status.ReadyNodes, node) { newPn.Status.ReadyNodes = util.RemoveString(newPn.Status.ReadyNodes, node) needUpdate = true } diff --git a/pkg/controller/ovn_dnat.go b/pkg/controller/ovn_dnat.go index 30efb7ac91a..77b6bbf5f89 100644 --- a/pkg/controller/ovn_dnat.go +++ b/pkg/controller/ovn_dnat.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "net" + "slices" "github.com/ovn-org/libovsdb/ovsdb" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -661,7 +662,7 @@ func (c *Controller) DelDnatRule(vpcName, dnatName, externalIP, externalPort str func (c *Controller) handleAddOvnDnatFinalizer(cachedDnat *kubeovnv1.OvnDnatRule, finalizer string) error { if cachedDnat.DeletionTimestamp.IsZero() { - if util.ContainsString(cachedDnat.Finalizers, finalizer) { + if slices.Contains(cachedDnat.Finalizers, finalizer) { return nil } } diff --git a/pkg/controller/ovn_eip.go b/pkg/controller/ovn_eip.go index c17fa3f38c3..a18fcc465d0 100644 --- a/pkg/controller/ovn_eip.go +++ b/pkg/controller/ovn_eip.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "slices" "strings" "time" @@ -585,7 +586,7 @@ func (c *Controller) natLabelAndAnnoOvnEip(eipName, natName, vpcName string) err func (c *Controller) handleAddOvnEipFinalizer(cachedEip *kubeovnv1.OvnEip, finalizer string) error { if cachedEip.DeletionTimestamp.IsZero() { - if util.ContainsString(cachedEip.Finalizers, finalizer) { + if slices.Contains(cachedEip.Finalizers, finalizer) { return nil } } diff --git a/pkg/controller/ovn_fip.go b/pkg/controller/ovn_fip.go index 0ecce7e5f36..a78a6d37b1b 100644 --- a/pkg/controller/ovn_fip.go +++ b/pkg/controller/ovn_fip.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "slices" "strconv" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -600,7 +601,7 @@ func (c *Controller) GetOvnEip(eipName string) (*kubeovnv1.OvnEip, error) { func (c *Controller) handleAddOvnFipFinalizer(cachedFip *kubeovnv1.OvnFip, finalizer string) error { if cachedFip.DeletionTimestamp.IsZero() { - if util.ContainsString(cachedFip.Finalizers, finalizer) { + if slices.Contains(cachedFip.Finalizers, finalizer) { return nil } } diff --git a/pkg/controller/ovn_snat.go b/pkg/controller/ovn_snat.go index 2973f5f4c72..a49b3af2a1a 100644 --- a/pkg/controller/ovn_snat.go +++ b/pkg/controller/ovn_snat.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "slices" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -543,7 +544,7 @@ func (c *Controller) ovnSnatChangeEip(snat *kubeovnv1.OvnSnatRule, eip *kubeovnv func (c *Controller) handleAddOvnSnatFinalizer(cachedSnat *kubeovnv1.OvnSnatRule, finalizer string) error { if cachedSnat.DeletionTimestamp.IsZero() { - if util.ContainsString(cachedSnat.Finalizers, finalizer) { + if slices.Contains(cachedSnat.Finalizers, finalizer) { return nil } } diff --git a/pkg/controller/pod.go b/pkg/controller/pod.go index 2f072b14ecc..2963e83fc08 100644 --- a/pkg/controller/pod.go +++ b/pkg/controller/pod.go @@ -1868,7 +1868,7 @@ func appendCheckPodToDel(c *Controller, pod *v1.Pod, ownerRefName, ownerRefKind if !ownerRefSubnetExist { nsSubnetNames := podNs.Annotations[util.LogicalSwitchAnnotation] // check if pod use the subnet of its ns - if nsSubnetNames != "" && podSwitch != "" && !util.ContainsString(strings.Split(nsSubnetNames, ","), podSwitch) { + if nsSubnetNames != "" && podSwitch != "" && !slices.Contains(strings.Split(nsSubnetNames, ","), podSwitch) { klog.Infof("ns %s annotation subnet is %s, which is inconstant with subnet for pod %s, delete pod", pod.Namespace, nsSubnetNames, pod.Name) return true, nil } @@ -2022,7 +2022,7 @@ func (c *Controller) getVirtualIPs(pod *v1.Pod, podNets []*kubeovnNet) map[strin vipsListMap := make(map[string][]string) var vipNamesList []string for _, vipName := range strings.Split(strings.TrimSpace(pod.Annotations[util.AAPsAnnotation]), ",") { - if !util.ContainsString(vipNamesList, vipName) { + if !slices.Contains(vipNamesList, vipName) { vipNamesList = append(vipNamesList, vipName) } } @@ -2072,7 +2072,7 @@ func (c *Controller) getVirtualIPs(pod *v1.Pod, podNets []*kubeovnNet) map[strin } for _, vip := range strings.Split(vipStr, ",") { - if util.IsValidIP(vip) && !util.ContainsString(vipsList, vip) { + if util.IsValidIP(vip) && !slices.Contains(vipsList, vip) { vipsList = append(vipsList, vip) } } diff --git a/pkg/controller/provider_network.go b/pkg/controller/provider_network.go index 12df64dd2c9..f2f1194a6c3 100644 --- a/pkg/controller/provider_network.go +++ b/pkg/controller/provider_network.go @@ -3,6 +3,7 @@ package controller import ( "context" "fmt" + "slices" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -45,7 +46,7 @@ func (c *Controller) resyncProviderNetworkStatus() { var conditionsUpdated bool for _, node := range nodes { - if util.ContainsString(pn.Spec.ExcludeNodes, node.Name) { + if slices.Contains(pn.Spec.ExcludeNodes, node.Name) { if pn.Status.RemoveNodeConditions(node.Name) { conditionsUpdated = true } @@ -79,7 +80,7 @@ func (c *Controller) resyncProviderNetworkStatus() { expectNodes = append(readyNodes, notReadyNodes...) for _, c := range pn.Status.Conditions { - if !util.ContainsString(expectNodes, c.Node) { + if !slices.Contains(expectNodes, c.Node) { if pn.Status.RemoveNodeConditions(c.Node) { conditionsUpdated = true } diff --git a/pkg/controller/qos_policy.go b/pkg/controller/qos_policy.go index 780c3f9c144..a0f667f55cd 100644 --- a/pkg/controller/qos_policy.go +++ b/pkg/controller/qos_policy.go @@ -5,6 +5,7 @@ import ( "fmt" "net" "reflect" + "slices" "sort" "strings" @@ -520,7 +521,7 @@ func (c *Controller) handleAddQoSPolicyFinalizer(key string) error { return err } if cachedQoSPolicy.DeletionTimestamp.IsZero() { - if util.ContainsString(cachedQoSPolicy.Finalizers, util.ControllerName) { + if slices.Contains(cachedQoSPolicy.Finalizers, util.ControllerName) { return nil } } diff --git a/pkg/controller/security_group.go b/pkg/controller/security_group.go index 594ea93df20..2098b9f86e0 100644 --- a/pkg/controller/security_group.go +++ b/pkg/controller/security_group.go @@ -5,6 +5,7 @@ import ( "fmt" "net" "reflect" + "slices" "strings" "github.com/cnf/structhash" @@ -498,7 +499,7 @@ func (c *Controller) reconcilePortSg(portName, securityGroups string) error { continue } needAssociated := "false" - if util.ContainsString(newSgList, sgName) { + if slices.Contains(newSgList, sgName) { needAssociated = "true" } diff --git a/pkg/controller/service.go b/pkg/controller/service.go index 02602117107..22aa111e14c 100644 --- a/pkg/controller/service.go +++ b/pkg/controller/service.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net" + "slices" "strings" "time" @@ -111,7 +112,7 @@ func (c *Controller) enqueueUpdateService(oldObj, newObj interface{}) { newClusterIps := getVipIps(newSvc) var ipsToDel []string for _, oldClusterIP := range oldClusterIps { - if !util.ContainsString(newClusterIps, oldClusterIP) { + if !slices.Contains(newClusterIps, oldClusterIP) { ipsToDel = append(ipsToDel, oldClusterIP) } } @@ -270,7 +271,7 @@ func (c *Controller) handleDeleteService(service *vpcService) error { ip = parseVipAddr(vip) for _, svc := range svcs { - if util.ContainsString(util.ServiceClusterIPs(*svc), ip) { + if slices.Contains(util.ServiceClusterIPs(*svc), ip) { found = true break } @@ -389,7 +390,7 @@ func (c *Controller) handleUpdateService(key string) error { } } for vip := range lb.Vips { - if ip := parseVipAddr(vip); (util.ContainsString(ips, ip) && !util.ContainsString(svcVips, vip)) || util.ContainsString(ipsToDel, ip) { + if ip := parseVipAddr(vip); (slices.Contains(ips, ip) && !slices.Contains(svcVips, vip)) || slices.Contains(ipsToDel, ip) { klog.Infof("remove stale vip %s from LB %s", vip, lbName) if err := c.OVNNbClient.LoadBalancerDeleteVip(lbName, vip, ignoreHealthCheck); err != nil { klog.Errorf("failed to delete vip %s from LB %s: %v", vip, lbName, err) @@ -409,7 +410,7 @@ func (c *Controller) handleUpdateService(key string) error { } klog.V(3).Infof("existing vips of LB %s: %v", oLbName, lb.Vips) for vip := range oLb.Vips { - if ip := parseVipAddr(vip); util.ContainsString(ips, ip) || util.ContainsString(ipsToDel, ip) { + if ip := parseVipAddr(vip); slices.Contains(ips, ip) || slices.Contains(ipsToDel, ip) { klog.Infof("remove stale vip %s from LB %s", vip, oLbName) if err = c.OVNNbClient.LoadBalancerDeleteVip(oLbName, vip, ignoreHealthCheck); err != nil { klog.Errorf("failed to delete vip %s from LB %s: %v", vip, oLbName, err) diff --git a/pkg/controller/subnet.go b/pkg/controller/subnet.go index e3e1c5974a5..f95994d18f2 100644 --- a/pkg/controller/subnet.go +++ b/pkg/controller/subnet.go @@ -6,6 +6,7 @@ import ( "fmt" "net" "reflect" + "slices" "sort" "strings" "time" @@ -479,7 +480,7 @@ func checkAndUpdateExcludeIPs(subnet *kubeovnv1.Subnet) bool { } func (c *Controller) handleSubnetFinalizer(subnet *kubeovnv1.Subnet) (bool, error) { - if subnet.DeletionTimestamp.IsZero() && !util.ContainsString(subnet.Finalizers, util.ControllerName) { + if subnet.DeletionTimestamp.IsZero() && !slices.Contains(subnet.Finalizers, util.ControllerName) { newSubnet := subnet.DeepCopy() newSubnet.Finalizers = append(newSubnet.Finalizers, util.ControllerName) patch, err := util.GenerateMergePatchPayload(subnet, newSubnet) @@ -562,7 +563,7 @@ func (c *Controller) validateVpcBySubnet(subnet *kubeovnv1.Subnet) (*kubeovnv1.V if !vpc.Status.Default { for _, ns := range subnet.Spec.Namespaces { - if !util.ContainsString(vpc.Spec.Namespaces, ns) { + if !slices.Contains(vpc.Spec.Namespaces, ns) { err = fmt.Errorf("namespace '%s' is out of range to custom vpc '%s'", ns, vpc.Name) klog.Error(err) return vpc, err @@ -975,7 +976,7 @@ func (c *Controller) handleDeleteLogicalSwitch(key string) (err error) { continue } - if util.ContainsString(strings.Split(annotations[util.LogicalSwitchAnnotation], ","), key) { + if slices.Contains(strings.Split(annotations[util.LogicalSwitchAnnotation], ","), key) { c.enqueueAddNamespace(ns) } } @@ -1062,7 +1063,7 @@ func (c *Controller) handleDeleteSubnet(subnet *kubeovnv1.Subnet) error { } func (c *Controller) updateVlanStatusForSubnetDeletion(vlan *kubeovnv1.Vlan, subnet string) error { - if !util.ContainsString(vlan.Status.Subnets, subnet) { + if !slices.Contains(vlan.Status.Subnets, subnet) { return nil } @@ -1244,7 +1245,7 @@ func (c *Controller) reconcileNamespaces(subnet *kubeovnv1.Subnet) error { for _, ns := range namespaces { // when subnet cidr changed, the ns annotation with the subnet should be updated - if ns.Annotations != nil && util.ContainsString(strings.Split(ns.Annotations[util.LogicalSwitchAnnotation], ","), subnet.Name) { + if ns.Annotations != nil && slices.Contains(strings.Split(ns.Annotations[util.LogicalSwitchAnnotation], ","), subnet.Name) { c.addNamespaceQueue.Add(ns.Name) } } @@ -1845,7 +1846,7 @@ func (c *Controller) reconcileVlan(subnet *kubeovnv1.Subnet) error { return err } - if !util.ContainsString(vlan.Status.Subnets, subnet.Name) { + if !slices.Contains(vlan.Status.Subnets, subnet.Name) { newVlan := vlan.DeepCopy() newVlan.Status.Subnets = append(newVlan.Status.Subnets, subnet.Name) _, err = c.config.KubeOvnClient.KubeovnV1().Vlans().UpdateStatus(context.Background(), newVlan, metav1.UpdateOptions{}) diff --git a/pkg/controller/switch_lb_rule.go b/pkg/controller/switch_lb_rule.go index 2f76b928466..32411567ea1 100644 --- a/pkg/controller/switch_lb_rule.go +++ b/pkg/controller/switch_lb_rule.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "reflect" + "slices" "strconv" "strings" @@ -275,7 +276,7 @@ func (c *Controller) handleDelSwitchLBRule(info *SlrInfo) error { if lbhcs, err = c.OVNNbClient.ListLoadBalancerHealthChecks( func(lbhc *ovnnb.LoadBalancerHealthCheck) bool { - return util.ContainsString(info.Vips, lbhc.Vip) + return slices.Contains(info.Vips, lbhc.Vip) }, ); err != nil && !k8serrors.IsNotFound(err) { klog.Errorf("failed to list load balancer health checks matched vips %s, err: %v", info.Vips, err) @@ -292,7 +293,7 @@ func (c *Controller) handleDelSwitchLBRule(info *SlrInfo) error { if lbs, err = c.OVNNbClient.ListLoadBalancers( func(lb *ovnnb.LoadBalancer) bool { - return util.ContainsString(lb.HealthCheck, lbhc.UUID) + return slices.Contains(lb.HealthCheck, lbhc.UUID) }, ); err != nil && !k8serrors.IsNotFound(err) { klog.Errorf("failed to list load balancer matched vips %s, err: %v", lbhc.Vip, err) @@ -320,7 +321,7 @@ func (c *Controller) handleDelSwitchLBRule(info *SlrInfo) error { if err = c.OVNNbClient.DeleteLoadBalancerHealthChecks( func(lbhc *ovnnb.LoadBalancerHealthCheck) bool { - return util.ContainsString(info.Vips, lbhc.Vip) + return slices.Contains(info.Vips, lbhc.Vip) }, ); err != nil && !k8serrors.IsNotFound(err) { klog.Errorf("delete load balancer health checks matched vip %s, err: %v", info.Vips, err) diff --git a/pkg/controller/vip.go b/pkg/controller/vip.go index 644797df00f..6ce1aebbd85 100644 --- a/pkg/controller/vip.go +++ b/pkg/controller/vip.go @@ -637,7 +637,7 @@ func (c *Controller) handleAddVipFinalizer(key string) error { return err } if cachedVip.DeletionTimestamp.IsZero() { - if util.ContainsString(cachedVip.Finalizers, util.ControllerName) { + if slices.Contains(cachedVip.Finalizers, util.ControllerName) { return nil } } diff --git a/pkg/controller/vlan.go b/pkg/controller/vlan.go index 1ca43ee7dfa..313ed047ecb 100644 --- a/pkg/controller/vlan.go +++ b/pkg/controller/vlan.go @@ -3,6 +3,7 @@ package controller import ( "context" "fmt" + "slices" k8serrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -192,7 +193,7 @@ func (c *Controller) handleAddVlan(key string) error { var needUpdate bool for _, subnet := range subnets { - if subnet.Spec.Vlan == vlan.Name && !util.ContainsString(vlan.Status.Subnets, subnet.Name) { + if subnet.Spec.Vlan == vlan.Name && !slices.Contains(vlan.Status.Subnets, subnet.Name) { vlan.Status.Subnets = append(vlan.Status.Subnets, subnet.Name) needUpdate = true } @@ -212,7 +213,7 @@ func (c *Controller) handleAddVlan(key string) error { return err } - if !util.ContainsString(pn.Status.Vlans, vlan.Name) { + if !slices.Contains(pn.Status.Vlans, vlan.Name) { newPn := pn.DeepCopy() newPn.Status.Vlans = append(newPn.Status.Vlans, vlan.Name) _, err = c.config.KubeOvnClient.KubeovnV1().ProviderNetworks().UpdateStatus(context.Background(), newPn, metav1.UpdateOptions{}) @@ -296,7 +297,7 @@ func (c *Controller) handleDelVlan(key string) error { } func (c *Controller) updateProviderNetworkStatusForVlanDeletion(pn *kubeovnv1.ProviderNetwork, vlan string) error { - if !util.ContainsString(pn.Status.Vlans, vlan) { + if !slices.Contains(pn.Status.Vlans, vlan) { return nil } diff --git a/pkg/controller/vpc.go b/pkg/controller/vpc.go index 5c3be03017d..a53fd47f07e 100644 --- a/pkg/controller/vpc.go +++ b/pkg/controller/vpc.go @@ -297,7 +297,7 @@ func (c *Controller) handleAddOrUpdateVpc(key string) error { } } for _, oldPeer := range vpc.Status.VpcPeerings { - if !util.ContainsString(newPeers, oldPeer) { + if !slices.Contains(newPeers, oldPeer) { if err = c.OVNNbClient.DeleteLogicalRouterPort(fmt.Sprintf("%s-%s", vpc.Name, oldPeer)); err != nil { klog.Errorf("delete peer router port for vpc %s, %v", vpc.Name, err) return err diff --git a/pkg/controller/vpc_nat_gateway.go b/pkg/controller/vpc_nat_gateway.go index 456ae972891..9f0bc2ee36d 100644 --- a/pkg/controller/vpc_nat_gateway.go +++ b/pkg/controller/vpc_nat_gateway.go @@ -7,6 +7,7 @@ import ( "fmt" "reflect" "regexp" + "slices" "strings" "time" @@ -656,7 +657,7 @@ func (c *Controller) handleUpdateNatGwSubnetRoute(natGwKey string) error { } } for _, old := range oldCIDRs { - if !util.ContainsString(newCIDRS, old) { + if !slices.Contains(newCIDRS, old) { toBeDelCIDRs = append(toBeDelCIDRs, old) } } diff --git a/pkg/controller/vpc_nat_gw_eip.go b/pkg/controller/vpc_nat_gw_eip.go index 562df443a54..017a4eacfdb 100644 --- a/pkg/controller/vpc_nat_gw_eip.go +++ b/pkg/controller/vpc_nat_gw_eip.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net" + "slices" "strings" "time" @@ -759,7 +760,7 @@ func (c *Controller) handleAddIptablesEipFinalizer(key string) error { return err } if cachedIptablesEip.DeletionTimestamp.IsZero() { - if util.ContainsString(cachedIptablesEip.Finalizers, util.ControllerName) { + if slices.Contains(cachedIptablesEip.Finalizers, util.ControllerName) { return nil } } diff --git a/pkg/controller/vpc_nat_gw_nat.go b/pkg/controller/vpc_nat_gw_nat.go index a635dee461a..44328254394 100644 --- a/pkg/controller/vpc_nat_gw_nat.go +++ b/pkg/controller/vpc_nat_gw_nat.go @@ -4,6 +4,7 @@ import ( "context" "encoding/json" "fmt" + "slices" "time" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -1053,7 +1054,7 @@ func (c *Controller) handleAddIptablesFipFinalizer(key string) error { return err } if cachedIptablesFip.DeletionTimestamp.IsZero() { - if util.ContainsString(cachedIptablesFip.Finalizers, util.ControllerName) { + if slices.Contains(cachedIptablesFip.Finalizers, util.ControllerName) { return nil } } @@ -1115,7 +1116,7 @@ func (c *Controller) handleAddIptablesDnatFinalizer(key string) error { return err } if cachedIptablesDnat.DeletionTimestamp.IsZero() { - if util.ContainsString(cachedIptablesDnat.Finalizers, util.ControllerName) { + if slices.Contains(cachedIptablesDnat.Finalizers, util.ControllerName) { return nil } } @@ -1228,7 +1229,7 @@ func (c *Controller) handleAddIptablesSnatFinalizer(key string) error { return err } if cachedIptablesSnat.DeletionTimestamp.IsZero() { - if util.ContainsString(cachedIptablesSnat.Finalizers, util.ControllerName) { + if slices.Contains(cachedIptablesSnat.Finalizers, util.ControllerName) { return nil } } diff --git a/pkg/daemon/config.go b/pkg/daemon/config.go index bfcfb8f689b..87716db506a 100644 --- a/pkg/daemon/config.go +++ b/pkg/daemon/config.go @@ -10,6 +10,7 @@ import ( "os/exec" "regexp" "runtime" + "slices" "strings" "github.com/sirupsen/logrus" @@ -238,7 +239,7 @@ func (config *Configuration) initNicConfig(nicBridgeMappings map[string]string) if ip := net.ParseIP(ipStr); ip == nil || ip.IsLinkLocalUnicast() { continue } - if len(srcIPs) == 0 || util.ContainsString(srcIPs, ipStr) { + if len(srcIPs) == 0 || slices.Contains(srcIPs, ipStr) { encapIP = ipStr break } diff --git a/pkg/daemon/controller.go b/pkg/daemon/controller.go index 5fbcbfbde15..f65f439c74d 100644 --- a/pkg/daemon/controller.go +++ b/pkg/daemon/controller.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "os/exec" + "slices" "strconv" "time" @@ -256,7 +257,7 @@ func (c *Controller) handleAddOrUpdateProviderNetwork(key string) error { return err } - if util.ContainsString(pn.Spec.ExcludeNodes, node.Name) { + if slices.Contains(pn.Spec.ExcludeNodes, node.Name) { c.recordProviderNetworkErr(pn.Name, "") return c.cleanProviderNetwork(pn.DeepCopy(), node.DeepCopy()) } @@ -266,7 +267,7 @@ func (c *Controller) handleAddOrUpdateProviderNetwork(key string) error { func (c *Controller) initProviderNetwork(pn *kubeovnv1.ProviderNetwork, node *v1.Node) error { nic := pn.Spec.DefaultInterface for _, item := range pn.Spec.CustomInterfaces { - if util.ContainsString(item.Nodes, node.Name) { + if slices.Contains(item.Nodes, node.Name) { nic = item.Interface break } diff --git a/pkg/daemon/controller_linux.go b/pkg/daemon/controller_linux.go index 7d1ed8ce983..901be78c19c 100644 --- a/pkg/daemon/controller_linux.go +++ b/pkg/daemon/controller_linux.go @@ -10,6 +10,7 @@ import ( "path/filepath" "reflect" "regexp" + "slices" "strings" "syscall" @@ -306,7 +307,7 @@ func routeDiff(nodeNicRoutes, allRoutes []netlink.Route, cidrs, joinCIDR []strin ipv4, ipv6 := util.SplitStringIP(gateway) gwV4, gwV6 := net.ParseIP(ipv4), net.ParseIP(ipv6) for _, c := range cidrs { - if util.ContainsString(joinCIDR, c) { + if slices.Contains(joinCIDR, c) { continue } diff --git a/pkg/daemon/gateway_linux.go b/pkg/daemon/gateway_linux.go index 94bcfa725a5..c9777a6d4e1 100644 --- a/pkg/daemon/gateway_linux.go +++ b/pkg/daemon/gateway_linux.go @@ -7,6 +7,7 @@ import ( "net" "os" "reflect" + "slices" "sort" "strconv" "strings" @@ -698,7 +699,7 @@ func (c *Controller) setIptables() error { var inUse bool for name := range subnetCidrs { - if util.ContainsString(util.DoubleQuotedFields(rule), fmt.Sprintf("%s,%s", util.OvnSubnetGatewayIptables, name)) { + if slices.Contains(util.DoubleQuotedFields(rule), fmt.Sprintf("%s,%s", util.OvnSubnetGatewayIptables, name)) { inUse = true break } @@ -716,7 +717,7 @@ func (c *Controller) setIptables() error { for _, rule := range iptablesRules { if rule.Table == NAT { if c.k8siptables[protocol].HasRandomFully() && - (rule.Rule[len(rule.Rule)-1] == "MASQUERADE" || util.ContainsString(rule.Rule, "SNAT")) { + (rule.Rule[len(rule.Rule)-1] == "MASQUERADE" || slices.Contains(rule.Rule, "SNAT")) { rule.Rule = append(rule.Rule, "--random-fully") } @@ -1648,7 +1649,7 @@ func (c *Controller) ipsetExists(name string) (bool, error) { return false, fmt.Errorf("failed to list ipset names: %v", err) } - return util.ContainsString(sets, name), nil + return slices.Contains(sets, name), nil } func getNatOutGoingPolicyRuleIPSetName(ruleID, srcOrDst, protocol string, hasPrefix bool) string { diff --git a/pkg/daemon/init.go b/pkg/daemon/init.go index 951f517a115..271245ac1af 100644 --- a/pkg/daemon/init.go +++ b/pkg/daemon/init.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net" + "slices" "strings" "time" @@ -152,7 +153,7 @@ func (c *Controller) ovsCleanProviderNetwork(provider string) error { return fmt.Errorf("failed to list OVS bridges: %v, %q", err, output) } - if !util.ContainsString(strings.Split(output, "\n"), brName) { + if !slices.Contains(strings.Split(output, "\n"), brName) { klog.V(3).Infof("ovs bridge %s not found", brName) return nil } diff --git a/pkg/daemon/init_linux.go b/pkg/daemon/init_linux.go index d6f55be79d0..c1bd7bc2d77 100644 --- a/pkg/daemon/init_linux.go +++ b/pkg/daemon/init_linux.go @@ -1,12 +1,11 @@ package daemon import ( + "slices" "time" "github.com/vishvananda/netlink" "k8s.io/klog/v2" - - "github.com/kubeovn/kube-ovn/pkg/util" ) var routeScopeOrders = [...]netlink.Scope{ @@ -131,7 +130,7 @@ func (c *Controller) changeProvideNicName(current, target string) (bool, error) return false, err } - if util.ContainsString(link.Attrs().Properties.AlternativeIfnames, current) { + if slices.Contains(link.Attrs().Properties.AlternativeIfnames, current) { if err = netlink.LinkDelAltName(link, current); err != nil { klog.Errorf("failed to delete alternative name %s from link %s: %v", current, link.Attrs().Name, err) return false, err diff --git a/pkg/ipam/subnet.go b/pkg/ipam/subnet.go index db28c7ded86..9dbd5fb9cb5 100644 --- a/pkg/ipam/subnet.go +++ b/pkg/ipam/subnet.go @@ -3,6 +3,7 @@ package ipam import ( "fmt" "net" + "slices" "strings" "sync" @@ -160,7 +161,7 @@ func (s *Subnet) GetStaticMac(podName, nicName, mac string, checkConflict bool) func (s *Subnet) pushPodNic(podName, nicName string) { if s.V4NicToIP[nicName] != nil || s.V6NicToIP[nicName] != nil || s.NicToMac[nicName] != "" { - s.PodToNicList[podName] = util.UniqString(append(s.PodToNicList[podName], nicName)) + s.PodToNicList[podName] = slices.Compact(append(s.PodToNicList[podName], nicName)) } } @@ -211,7 +212,7 @@ func (s *Subnet) getV4RandomAddress(ippoolName, podName, nicName string, mac *st // controller will re-enqueue the new pod then wait for old pod deleted and address released. // here will return only if both ip and mac exist, otherwise only ip without mac returned will trigger CreatePort error. if s.V4NicToIP[nicName] != nil && s.NicToMac[nicName] != "" { - if !util.ContainsString(skippedAddrs, s.V4NicToIP[nicName].String()) { + if !slices.Contains(skippedAddrs, s.V4NicToIP[nicName].String()) { return s.V4NicToIP[nicName], nil, s.NicToMac[nicName], nil } s.releaseAddr(podName, nicName) @@ -265,7 +266,7 @@ func (s *Subnet) getV6RandomAddress(ippoolName, podName, nicName string, mac *st // controller will re-enqueue the new pod then wait for old pod deleted and address released. // here will return only if both ip and mac exist, otherwise only ip without mac returned will trigger CreatePort error. if s.V6NicToIP[nicName] != nil && s.NicToMac[nicName] != "" { - if !util.ContainsString(skippedAddrs, s.V6NicToIP[nicName].String()) { + if !slices.Contains(skippedAddrs, s.V6NicToIP[nicName].String()) { return nil, s.V6NicToIP[nicName], s.NicToMac[nicName], nil } s.releaseAddr(podName, nicName) @@ -379,7 +380,7 @@ func (s *Subnet) GetStaticAddress(podName, nicName string, ip IP, mac *string, f if v4 { if existPod, ok := s.V4IPToPod[ip.String()]; ok { pods := strings.Split(existPod, ",") - if !util.ContainsString(pods, podName) { + if !slices.Contains(pods, podName) { if !checkConflict { s.V4NicToIP[nicName] = ip s.V4IPToPod[ip.String()] = fmt.Sprintf("%s,%s", s.V4IPToPod[ip.String()], podName) @@ -416,7 +417,7 @@ func (s *Subnet) GetStaticAddress(podName, nicName string, ip IP, mac *string, f } else if v6 { if existPod, ok := s.V6IPToPod[ip.String()]; ok { pods := strings.Split(existPod, ",") - if !util.ContainsString(pods, podName) { + if !slices.Contains(pods, podName) { if !checkConflict { s.V6NicToIP[nicName] = ip s.V6IPToPod[ip.String()] = fmt.Sprintf("%s,%s", s.V6IPToPod[ip.String()], podName) @@ -586,14 +587,14 @@ func (s *Subnet) isIPAssignedToOtherPod(ip, podName string) (string, bool) { if existPod, ok := s.V4IPToPod[ip]; ok { klog.V(4).Infof("v4 check ip assigned, existPod %s, podName %s", existPod, podName) pods := strings.Split(existPod, ",") - if !util.ContainsString(pods, podName) { + if !slices.Contains(pods, podName) { return existPod, true } } if existPod, ok := s.V6IPToPod[ip]; ok { klog.V(4).Infof("v6 check ip assigned, existPod %s, podName %s", existPod, podName) pods := strings.Split(existPod, ",") - if !util.ContainsString(pods, podName) { + if !slices.Contains(pods, podName) { return existPod, true } } diff --git a/pkg/ovs/ovn-nb-acl.go b/pkg/ovs/ovn-nb-acl.go index 45574ee76ed..ccb78f63c9d 100644 --- a/pkg/ovs/ovn-nb-acl.go +++ b/pkg/ovs/ovn-nb-acl.go @@ -3,6 +3,7 @@ package ovs import ( "context" "fmt" + "slices" "strconv" "strings" @@ -227,7 +228,7 @@ func (c *OVNNbClient) CreateNodeACL(pgName, nodeIPStr, joinIPStr string) error { } for _, joinIP := range strings.Split(joinIPStr, ",") { - if util.ContainsString(nodeIPs, joinIP) { + if slices.Contains(nodeIPs, joinIP) { continue } diff --git a/pkg/ovs/ovn-nb-load_balancer.go b/pkg/ovs/ovn-nb-load_balancer.go index 371d7856894..99ffd91cb50 100644 --- a/pkg/ovs/ovn-nb-load_balancer.go +++ b/pkg/ovs/ovn-nb-load_balancer.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net" + "slices" "sort" "strconv" "strings" @@ -14,7 +15,6 @@ import ( ovsclient "github.com/kubeovn/kube-ovn/pkg/ovsdb/client" "github.com/kubeovn/kube-ovn/pkg/ovsdb/ovnnb" - "github.com/kubeovn/kube-ovn/pkg/util" ) // CreateLoadBalancer create loadbalancer @@ -539,7 +539,7 @@ func (c *OVNNbClient) LoadBalancerDeleteHealthCheck(lbName, uuid string) error { return err } - if util.ContainsString(lb.HealthCheck, uuid) { + if slices.Contains(lb.HealthCheck, uuid) { ops, err = c.LoadBalancerOp( lbName, func(lb *ovnnb.LoadBalancer) []model.Mutation { diff --git a/pkg/ovs/ovn-nb-load_balancer_test.go b/pkg/ovs/ovn-nb-load_balancer_test.go index 0479689993f..896c09ed2fe 100644 --- a/pkg/ovs/ovn-nb-load_balancer_test.go +++ b/pkg/ovs/ovn-nb-load_balancer_test.go @@ -3,6 +3,7 @@ package ovs import ( "fmt" "net" + "slices" "strconv" "strings" "testing" @@ -11,7 +12,6 @@ import ( "github.com/stretchr/testify/require" "github.com/kubeovn/kube-ovn/pkg/ovsdb/ovnnb" - "github.com/kubeovn/kube-ovn/pkg/util" ) func (suite *OvnClientTestSuite) testCreateLoadBalancer() { @@ -99,7 +99,7 @@ func (suite *OvnClientTestSuite) testDeleteLoadBalancers() { } err := ovnClient.DeleteLoadBalancers(func(lb *ovnnb.LoadBalancer) bool { - return util.ContainsString(lbNames, lb.Name) + return slices.Contains(lbNames, lb.Name) }) require.NoError(t, err) @@ -202,7 +202,7 @@ func (suite *OvnClientTestSuite) testListLoadBalancers() { except := lbNames[1:] lbs, err := ovnClient.ListLoadBalancers(func(lb *ovnnb.LoadBalancer) bool { - return !util.ContainsString(except, lb.Name) + return !slices.Contains(except, lb.Name) }) require.NoError(t, err) require.NotEmpty(t, lbs) diff --git a/pkg/ovs/ovn-nb-logical_router.go b/pkg/ovs/ovn-nb-logical_router.go index 958e2014ab4..4506e721229 100644 --- a/pkg/ovs/ovn-nb-logical_router.go +++ b/pkg/ovs/ovn-nb-logical_router.go @@ -3,6 +3,7 @@ package ovs import ( "context" "fmt" + "slices" "strings" "github.com/ovn-org/libovsdb/model" @@ -209,7 +210,7 @@ func (c *OVNNbClient) LogicalRouterUpdatePortOp(lrName, lrpUUID string, op ovsdb if lrName == "" && op == ovsdb.MutateOperationDelete { lrList, err := c.ListLogicalRouter(false, func(lr *ovnnb.LogicalRouter) bool { - return util.ContainsString(lr.Ports, lrpUUID) + return slices.Contains(lr.Ports, lrpUUID) }) if err != nil { klog.Error(err) diff --git a/pkg/ovs/ovn-nb-logical_router_policy.go b/pkg/ovs/ovn-nb-logical_router_policy.go index fc40b31b84b..0ee68f9fc00 100644 --- a/pkg/ovs/ovn-nb-logical_router_policy.go +++ b/pkg/ovs/ovn-nb-logical_router_policy.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "reflect" + "slices" "github.com/ovn-org/libovsdb/client" "github.com/ovn-org/libovsdb/model" @@ -14,7 +15,6 @@ import ( ovsclient "github.com/kubeovn/kube-ovn/pkg/ovsdb/client" "github.com/kubeovn/kube-ovn/pkg/ovsdb/ovnnb" - "github.com/kubeovn/kube-ovn/pkg/util" ) // AddLogicalRouterPolicy add a policy route to logical router @@ -151,7 +151,7 @@ func (c *OVNNbClient) DeleteLogicalRouterPolicyByNexthop(lrName string, priority if route.Priority != priority { return false } - return (route.Nexthop != nil && *route.Nexthop == nexthop) || util.ContainsString(route.Nexthops, nexthop) + return (route.Nexthop != nil && *route.Nexthop == nexthop) || slices.Contains(route.Nexthops, nexthop) }) if err != nil { klog.Error(err) diff --git a/pkg/ovs/ovn-nb-logical_router_route.go b/pkg/ovs/ovn-nb-logical_router_route.go index 290b3cdeda9..4c4afefd8ce 100644 --- a/pkg/ovs/ovn-nb-logical_router_route.go +++ b/pkg/ovs/ovn-nb-logical_router_route.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "slices" "github.com/ovn-org/libovsdb/client" "github.com/ovn-org/libovsdb/model" @@ -79,7 +80,7 @@ func (c *OVNNbClient) AddLogicalRouterStaticRoute(lrName, routeTable, policy, ip existing := strset.New() var toDel []string for _, route := range routes { - if util.ContainsString(nexthops, route.Nexthop) { + if slices.Contains(nexthops, route.Nexthop) { existing.Add(route.Nexthop) } else { if route.BFD != nil && bfdID != nil && *route.BFD != *bfdID { diff --git a/pkg/ovs/ovn-nb-logical_switch.go b/pkg/ovs/ovn-nb-logical_switch.go index b48f58a4a6d..e2b248fc0b6 100644 --- a/pkg/ovs/ovn-nb-logical_switch.go +++ b/pkg/ovs/ovn-nb-logical_switch.go @@ -3,6 +3,7 @@ package ovs import ( "context" "fmt" + "slices" "strings" "github.com/ovn-org/libovsdb/model" @@ -278,7 +279,7 @@ func (c *OVNNbClient) LogicalSwitchUpdatePortOp(lsName, lspUUID string, op ovsdb if lsName == "" && op == ovsdb.MutateOperationDelete { lsList, err := c.ListLogicalSwitch(false, func(ls *ovnnb.LogicalSwitch) bool { - return util.ContainsString(ls.Ports, lspUUID) + return slices.Contains(ls.Ports, lspUUID) }) if err != nil { klog.Error(err) diff --git a/pkg/ovs/ovn-nb-logical_switch_port.go b/pkg/ovs/ovn-nb-logical_switch_port.go index 814229973de..bb7a94e5f47 100644 --- a/pkg/ovs/ovn-nb-logical_switch_port.go +++ b/pkg/ovs/ovn-nb-logical_switch_port.go @@ -3,6 +3,7 @@ package ovs import ( "context" "fmt" + "slices" "strconv" "strings" @@ -502,7 +503,7 @@ func (c *OVNNbClient) EnablePortLayer2forward(lspName string) error { return fmt.Errorf("get logical switch port %s: %v", lspName, err) } - if util.ContainsString(lsp.Addresses, "unknown") { + if slices.Contains(lsp.Addresses, "unknown") { return nil } diff --git a/pkg/ovs/ovs-vsctl.go b/pkg/ovs/ovs-vsctl.go index 4f2488b3f45..a5ff137add5 100644 --- a/pkg/ovs/ovs-vsctl.go +++ b/pkg/ovs/ovs-vsctl.go @@ -5,6 +5,7 @@ import ( "fmt" "os/exec" "regexp" + "slices" "strconv" "strings" "time" @@ -158,7 +159,7 @@ func BridgeExists(name string) (bool, error) { klog.Error(err) return false, err } - return util.ContainsString(bridges, name), nil + return slices.Contains(bridges, name), nil } // PortExists checks whether the port already exists @@ -288,7 +289,7 @@ func SetPortTag(port, tag string) error { // ValidatePortVendor returns true if the port's external_ids:vendor=kube-ovn func ValidatePortVendor(port string) (bool, error) { output, err := ovsFind("Port", "name", "external_ids:vendor="+util.CniTypeName) - return util.ContainsString(output, port), err + return slices.Contains(output, port), err } func GetInterfacePodNs(iface string) (string, error) { diff --git a/pkg/pinger/ovn.go b/pkg/pinger/ovn.go index 5270d9acda7..8cd14029607 100644 --- a/pkg/pinger/ovn.go +++ b/pkg/pinger/ovn.go @@ -4,11 +4,10 @@ import ( "fmt" "os" "os/exec" + "slices" "strings" "k8s.io/klog/v2" - - "github.com/kubeovn/kube-ovn/pkg/util" ) func checkOvs(config *Configuration) error { @@ -51,7 +50,7 @@ func checkPortBindings(config *Configuration) error { klog.Infof("port in sb is %v", sbBindings) misMatch := []string{} for _, port := range ovsBindings { - if !util.ContainsString(sbBindings, port) { + if !slices.Contains(sbBindings, port) { misMatch = append(misMatch, port) } } diff --git a/pkg/pinger/ping.go b/pkg/pinger/ping.go index 944f305d518..c4043dc3bcd 100644 --- a/pkg/pinger/ping.go +++ b/pkg/pinger/ping.go @@ -6,6 +6,7 @@ import ( "math" "net" "os" + "slices" "strings" "time" @@ -97,7 +98,7 @@ func pingNodes(config *Configuration) error { var pingErr error for _, no := range nodes.Items { for _, addr := range no.Status.Addresses { - if addr.Type == v1.NodeInternalIP && util.ContainsString(config.PodProtocols, util.CheckProtocol(addr.Address)) { + if addr.Type == v1.NodeInternalIP && slices.Contains(config.PodProtocols, util.CheckProtocol(addr.Address)) { func(nodeIP, nodeName string) { if config.EnableVerboseConnCheck { if err := util.TCPConnectivityCheck(fmt.Sprintf("%s:%d", nodeIP, config.TCPConnCheckPort)); err != nil { @@ -168,7 +169,7 @@ func pingPods(config *Configuration) error { var pingErr error for _, pod := range pods.Items { for _, podIP := range pod.Status.PodIPs { - if util.ContainsString(config.PodProtocols, util.CheckProtocol(podIP.IP)) { + if slices.Contains(config.PodProtocols, util.CheckProtocol(podIP.IP)) { func(podIP, podName, nodeIP, nodeName string) { if config.EnableVerboseConnCheck { if err := util.TCPConnectivityCheck(fmt.Sprintf("%s:%d", podIP, config.TCPConnCheckPort)); err != nil { @@ -233,7 +234,7 @@ func pingExternal(config *Configuration) error { addresses := strings.Split(config.ExternalAddress, ",") for _, addr := range addresses { - if !util.ContainsString(config.PodProtocols, util.CheckProtocol(addr)) { + if !slices.Contains(config.PodProtocols, util.CheckProtocol(addr)) { continue } @@ -288,7 +289,7 @@ func checkAccessTargetIPPorts(config *Configuration) error { addr := items[1] port := items[2] - if !util.ContainsString(config.PodProtocols, util.CheckProtocol(addr)) { + if !slices.Contains(config.PodProtocols, util.CheckProtocol(addr)) { continue } if util.CheckProtocol(addr) == kubeovnv1.ProtocolIPv6 { diff --git a/pkg/util/slice.go b/pkg/util/slice.go index 9924664d966..bfa25d5d6dc 100644 --- a/pkg/util/slice.go +++ b/pkg/util/slice.go @@ -27,28 +27,6 @@ func DiffStringSlice(slice1, slice2 []string) []string { return diff } -// UniqString creates an array of string with unique values. -func UniqString(a []string) []string { - length := len(a) - - seen := make(map[string]struct{}, length) - j := 0 - - for i := 0; i < length; i++ { - v := a[i] - - if _, ok := seen[v]; ok { - continue - } - - seen[v] = struct{}{} - a[j] = v - j++ - } - - return a[0:j] -} - // IsStringsOverlap check if two string slices are overlapped func IsStringsOverlap(a, b []string) bool { for _, sa := range a { @@ -61,22 +39,13 @@ func IsStringsOverlap(a, b []string) bool { return false } -// ContainsString Helper functions to check if a slice contains string. -func ContainsString(slice []string, s string) bool { - for _, item := range slice { - if item == s { - return true - } - } - return false -} - -func RemoveString(slice []string, s string) (result []string) { +func RemoveString(slice []string, s string) []string { + result := make([]string, 0, len(slice)) for _, item := range slice { if item == s { continue } result = append(result, item) } - return + return result } diff --git a/pkg/util/slice_test.go b/pkg/util/slice_test.go index 33d4acaf956..d6d27d0e8db 100644 --- a/pkg/util/slice_test.go +++ b/pkg/util/slice_test.go @@ -37,32 +37,6 @@ func TestDiffStringSlice(t *testing.T) { } } -func TestUniqString(t *testing.T) { - tests := []struct { - name string - slice1 []string - want []string - }{ - { - name: "base", - slice1: []string{"a", "b", "c", "d", "a", "b", "c"}, - want: []string{"a", "b", "c", "d"}, - }, - { - name: "baseWithBlank", - slice1: []string{" a", "b", "c", "d", "a", "b", "c"}, - want: []string{" a", "b", "c", "d", "a"}, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if ret := UniqString(tt.slice1); !reflect.DeepEqual(ret, tt.want) { - t.Errorf("got %v, want %v", ret, tt.want) - } - }) - } -} - func TestIsStringsOverlap(t *testing.T) { tests := []struct { name string @@ -98,35 +72,6 @@ func TestIsStringsOverlap(t *testing.T) { } } -func TestContainsString(t *testing.T) { - tests := []struct { - name string - a string - b []string - want bool - }{ - { - name: "base", - a: "a", - b: []string{"a", "b"}, - want: true, - }, - { - name: "baseWithDiff", - a: "c", - b: []string{"a", "b"}, - want: false, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - if ret := ContainsString(tt.b, tt.a); ret != tt.want { - t.Errorf("got %v, want %v", ret, tt.want) - } - }) - } -} - func TestRemoveString(t *testing.T) { tests := []struct { name string diff --git a/pkg/webhook/subnet.go b/pkg/webhook/subnet.go index 91d505db631..365fb640550 100644 --- a/pkg/webhook/subnet.go +++ b/pkg/webhook/subnet.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "net/http" + "slices" ctrlwebhook "sigs.k8s.io/controller-runtime/pkg/webhook" "sigs.k8s.io/controller-runtime/pkg/webhook/admission" @@ -42,7 +43,7 @@ func (v *ValidatingHook) SubnetCreateHook(ctx context.Context, req admission.Req if o.Spec.Vpc == item.Name && item.Status.Standby && !item.Status.Default { for _, ns := range o.Spec.Namespaces { - if !util.ContainsString(item.Spec.Namespaces, ns) { + if !slices.Contains(item.Spec.Namespaces, ns) { err := fmt.Errorf("namespace '%s' is out of range to custom vpc '%s'", ns, item.Name) return ctrlwebhook.Errored(http.StatusBadRequest, err) } diff --git a/test/e2e/framework/kind/kind.go b/test/e2e/framework/kind/kind.go index c9ca3c7dfd3..b19c39ade37 100644 --- a/test/e2e/framework/kind/kind.go +++ b/test/e2e/framework/kind/kind.go @@ -5,13 +5,13 @@ import ( "errors" "net" "net/url" + "slices" "strings" "time" "github.com/docker/docker/api/types" "k8s.io/apimachinery/pkg/util/wait" - "github.com/kubeovn/kube-ovn/pkg/util" "github.com/kubeovn/kube-ovn/test/e2e/framework" "github.com/kubeovn/kube-ovn/test/e2e/framework/docker" "github.com/kubeovn/kube-ovn/test/e2e/framework/iproute" @@ -117,7 +117,7 @@ func ListClusters() ([]string, error) { var clusters []string for _, node := range nodeList { - if cluster := node.Labels[labelCluster]; !util.ContainsString(clusters, cluster) { + if cluster := node.Labels[labelCluster]; !slices.Contains(clusters, cluster) { clusters = append(clusters, node.Labels[labelCluster]) } } diff --git a/test/e2e/kube-ovn/subnet/subnet.go b/test/e2e/kube-ovn/subnet/subnet.go index 33112a23700..9ed15b84676 100644 --- a/test/e2e/kube-ovn/subnet/subnet.go +++ b/test/e2e/kube-ovn/subnet/subnet.go @@ -7,6 +7,7 @@ import ( "math/rand/v2" "net" "os/exec" + "slices" "strconv" "strings" "time" @@ -640,7 +641,7 @@ var _ = framework.Describe("[group:subnet]", func() { framework.ExpectNotEmpty(kindNodes) for _, node := range kindNodes { - shouldHavePolicyRoute := util.ContainsString(gatewayNodes, node.Name()) + shouldHavePolicyRoute := slices.Contains(gatewayNodes, node.Name()) ginkgo.By("Getting ip rules in node " + node.Name()) rules, err := iproute.RuleShow("", node.Exec) framework.ExpectNoError(err)