From feab74585c926b84ea4b27e20331578b5d933b5b Mon Sep 17 00:00:00 2001 From: m-terra Date: Tue, 16 Jan 2024 14:50:15 +0100 Subject: [PATCH 1/2] sort file contents to avoid unnecessary reloads --- controllers/instance/config.go | 7 +++++++ .../instance/instance_controller_test.go | 19 +++++++++++-------- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/controllers/instance/config.go b/controllers/instance/config.go index 04d33a3..89d5e56 100644 --- a/controllers/instance/config.go +++ b/controllers/instance/config.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "path/filepath" + "sort" "strings" haproxy "github.com/haproxytech/client-native/v5/configuration/options" @@ -357,6 +358,7 @@ func (r *Reconciler) generateBackendMappingFiles(ctx context.Context, instance * mappings = append(mappings, fmt.Sprintf("^%s$ %s", strings.TrimPrefix(strings.TrimSuffix(backend.Spec.HostRegex, "$"), "^"), backend.Name)) } + sort.Strings(mappings) files[rules.Backend.RegexMapping.FilePath()] = strings.Join(mappings, "\n") } } @@ -409,6 +411,7 @@ func (r *Reconciler) generateACLValuesFiles(_ context.Context, listens *configv1 for _, frontend := range frontends.Items { for _, acl := range frontend.Spec.ACL { if len(acl.Values) > defaults.MaxLineArgs-3 { + sort.Strings(acl.Values) files[acl.FilePath()] = strings.Join(acl.Values, "\n") } } @@ -417,6 +420,7 @@ func (r *Reconciler) generateACLValuesFiles(_ context.Context, listens *configv1 for _, backend := range backends.Items { for _, acl := range backend.Spec.ACL { if len(acl.Values) > defaults.MaxLineArgs-3 { + sort.Strings(acl.Values) files[acl.FilePath()] = strings.Join(acl.Values, "\n") } } @@ -425,6 +429,7 @@ func (r *Reconciler) generateACLValuesFiles(_ context.Context, listens *configv1 for _, listen := range listens.Items { for _, acl := range listen.Spec.ACL { if len(acl.Values) > defaults.MaxLineArgs-3 { + sort.Strings(acl.Values) files[acl.FilePath()] = strings.Join(acl.Values, "\n") } } @@ -566,6 +571,7 @@ func (r *Reconciler) generateCustomCertificatesFile(ctx context.Context, instanc mappings = append(mappings, strings.Join([]string{element.Certificate.FilePath(), alpn, element.SNIFilter, "\n"}, " ")) } + sort.Strings(mappings) files[bind.SSLCertificateList.FilePath()] = strings.Join(mappings, "") } } @@ -596,6 +602,7 @@ func (r *Reconciler) generateCustomCertificatesFile(ctx context.Context, instanc mappings = append(mappings, strings.Join([]string{element.Certificate.FilePath(), alpn, element.SNIFilter, "\n"}, " ")) } + sort.Strings(mappings) files[bind.SSLCertificateList.FilePath()] = strings.Join(mappings, "") } } diff --git a/controllers/instance/instance_controller_test.go b/controllers/instance/instance_controller_test.go index b8368f0..444a1b8 100644 --- a/controllers/instance/instance_controller_test.go +++ b/controllers/instance/instance_controller_test.go @@ -444,15 +444,18 @@ var _ = Describe("Reconcile", Label("controller"), func() { "backend foo-back2\n server server localhost:80 check ssl alpn h2,http/1.0 ca-file /usr/local/etc/haproxy/test-ca.crt inter 5000 verify required verifyhost routername.namespace.svc weight 256\n\n" + "backend foo-listen\n server routeName routeName.routeNamespace.svc.cluster.local:8443 check ssl alpn http/1.1,h2 init-addr none inter 500 resolvers dns-routeNamespace verify required verifyhost routeName.routeName.svc weight 256\n")) - Ω(secret.Data["cert_list.map"]).Should(Equal([]byte("/usr/local/etc/haproxy/route.name4.crt [alpn h2,http/1.0] route.host4 \n" + + Ω(string(secret.Data["cert_list.map"])).Should(Equal( "/usr/local/etc/haproxy/route.name.crt route.host \n" + - "/usr/local/etc/haproxy/route.name2.crt [alpn h2,http/1.0] route.host2 \n" + - "/usr/local/etc/haproxy/route.name.tcp.crt [alpn h2,http/1.0] route.host.tcp \n"))) - - Ω(secret.Data["route.name.crt"]).Should(Equal([]byte("Key\n\nCertificate\n\nCAcertificate"))) - Ω(secret.Data["route.name2.crt"]).Should(Equal([]byte("Key2\n\nCertificate2\n\nCAcertificate2"))) - Ω(secret.Data["route.name.tcp.crt"]).Should(Equal([]byte("Key2\n\nCertificate2\n\nCAcertificate2"))) - Ω(secret.Data["route.name4.crt"]).Should(Equal([]byte("Key\n\nCertificate\n\nCAcertificate"))) + "/usr/local/etc/haproxy/route.name.tcp.crt [alpn h2,http/1.0] route.host.tcp \n" + + "/usr/local/etc/haproxy/route.name2.crt [alpn h2,http/1.0] route.host2 \n" + + "/usr/local/etc/haproxy/route.name4.crt [alpn h2,http/1.0] route.host4 \n", + ), + ) + + Ω(string(secret.Data["route.name.crt"])).Should(Equal("Key\n\nCertificate\n\nCAcertificate")) + Ω(string(secret.Data["route.name2.crt"])).Should(Equal("Key2\n\nCertificate2\n\nCAcertificate2")) + Ω(string(secret.Data["route.name.tcp.crt"])).Should(Equal("Key2\n\nCertificate2\n\nCAcertificate2")) + Ω(string(secret.Data["route.name4.crt"])).Should(Equal("Key\n\nCertificate\n\nCAcertificate")) }) }) }) From 179419faf247d119da3ddf607d70f90c59e4f946 Mon Sep 17 00:00:00 2001 From: m-terra Date: Tue, 16 Jan 2024 14:52:02 +0100 Subject: [PATCH 2/2] replace deprecated functions --- apis/proxy/v1alpha1/instance_types.go | 6 +++--- controllers/instance/route.go | 2 +- controllers/instance/service.go | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/apis/proxy/v1alpha1/instance_types.go b/apis/proxy/v1alpha1/instance_types.go index 4fd5d3c..50c7dd8 100644 --- a/apis/proxy/v1alpha1/instance_types.go +++ b/apis/proxy/v1alpha1/instance_types.go @@ -238,12 +238,12 @@ func (g *GlobalConfiguration) Model() (models.Global, error) { if err != nil { return global, err } - ptr, err := configuration.ParseGlobalSection(p) + ptrr, err := configuration.ParseGlobalSection(p) if err != nil { return global, err } - if ptr != nil { - global = *ptr + if ptrr != nil { + global = *ptrr } } diff --git a/controllers/instance/route.go b/controllers/instance/route.go index 475d35d..1fedc04 100644 --- a/controllers/instance/route.go +++ b/controllers/instance/route.go @@ -63,7 +63,7 @@ func (r *Reconciler) createOrUpdateRouteForFrontend(ctx context.Context, instanc } route.Spec.Port = &routev1.RoutePort{ - TargetPort: intstr.FromInt(int(bind.Port)), + TargetPort: intstr.FromInt32(int32(bind.Port)), } route.Spec.TLS = instance.Spec.Network.Route.TLS diff --git a/controllers/instance/service.go b/controllers/instance/service.go index b3e76e6..9ee37fb 100644 --- a/controllers/instance/service.go +++ b/controllers/instance/service.go @@ -47,7 +47,7 @@ func (r *Reconciler) reconcileService(ctx context.Context, instance *proxyv1alph service.Spec.Ports = append(service.Spec.Ports, corev1.ServicePort{ Name: fmt.Sprintf("tcp-%d", bind.Port), Port: int32(bind.Port), - TargetPort: intstr.FromInt(int(bind.Port)), + TargetPort: intstr.FromInt32(int32(bind.Port)), Protocol: corev1.ProtocolTCP, }) } @@ -62,7 +62,7 @@ func (r *Reconciler) reconcileService(ctx context.Context, instance *proxyv1alph service.Spec.Ports = append(service.Spec.Ports, corev1.ServicePort{ Name: fmt.Sprintf("tcp-%d", bind.Port), Port: int32(bind.Port), - TargetPort: intstr.FromInt(int(bind.Port)), + TargetPort: intstr.FromInt32(int32(bind.Port)), Protocol: corev1.ProtocolTCP, }) } @@ -72,7 +72,7 @@ func (r *Reconciler) reconcileService(ctx context.Context, instance *proxyv1alph service.Spec.Ports = append(service.Spec.Ports, corev1.ServicePort{ Name: "metrics", Port: int32(instance.Spec.Metrics.Port), - TargetPort: intstr.FromInt(int(instance.Spec.Metrics.Port)), + TargetPort: intstr.FromInt32(int32(instance.Spec.Metrics.Port)), Protocol: corev1.ProtocolTCP, }) }