From 5ea4becfcbb9a0b07ac1810dda903800a7ecb616 Mon Sep 17 00:00:00 2001 From: Oliver Walsh Date: Wed, 20 Nov 2024 01:54:55 +0000 Subject: [PATCH] Inherit top-level nodeSelector in galera template --- apis/go.mod | 2 + apis/go.sum | 4 +- go.mod | 2 + go.sum | 4 +- pkg/openstack/galera.go | 4 + .../openstackoperator_controller_test.go | 96 +++++++++++++++++++ 6 files changed, 108 insertions(+), 4 deletions(-) diff --git a/apis/go.mod b/apis/go.mod index bc49aec74..e1f997166 100644 --- a/apis/go.mod +++ b/apis/go.mod @@ -115,3 +115,5 @@ replace github.com/openshift/api => github.com/openshift/api v0.0.0-202408300231 // custom RabbitmqClusterSpecCore for OpenStackControlplane (v2.9.0_patches_tag) replace github.com/rabbitmq/cluster-operator/v2 => github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20241017142550-a3524acedd49 //allow-merging + +replace github.com/openstack-k8s-operators/mariadb-operator/api => github.com/olliewalsh/mariadb-operator/api v0.0.0-20241120005220-32fb0cf70317 diff --git a/apis/go.sum b/apis/go.sum index 603caef52..40e76ec04 100644 --- a/apis/go.sum +++ b/apis/go.sum @@ -88,6 +88,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/olliewalsh/mariadb-operator/api v0.0.0-20241120005220-32fb0cf70317 h1:11V1kv1lK7bRCKhy+3qWZ7q5QKnDAj6nsAWykKuxLqk= +github.com/olliewalsh/mariadb-operator/api v0.0.0-20241120005220-32fb0cf70317/go.mod h1:348EPtAdpE2LxHAH4bHdCMNP7HyX6DevwEsF9DQ0S2k= github.com/onsi/ginkgo/v2 v2.20.1 h1:YlVIbqct+ZmnEph770q9Q7NVAz4wwIiVNahee6JyUzo= github.com/onsi/ginkgo/v2 v2.20.1/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= @@ -120,8 +122,6 @@ github.com/openstack-k8s-operators/lib-common/modules/storage v0.5.1-0.202411140 github.com/openstack-k8s-operators/lib-common/modules/storage v0.5.1-0.20241114091812-6dc9fd0961dc/go.mod h1:tfgBeLRqmlH/NQkLPe7396rj+t0whv2wPuMb8Ttvh8w= github.com/openstack-k8s-operators/manila-operator/api v0.5.1-0.20241117150431-21b7f58d9ddf h1:UsAefjZBqFl0dYMg/efe75ECm8cAwc/2FCEBPYjQfIY= github.com/openstack-k8s-operators/manila-operator/api v0.5.1-0.20241117150431-21b7f58d9ddf/go.mod h1:0/qgnjufYIqe439/3aUU/cwnjDwdUlNR3jnRubLTD5o= -github.com/openstack-k8s-operators/mariadb-operator/api v0.5.1-0.20241106141725-340c4d78fef0 h1:XrJID4tPlR1JCO7A7MPONGfVRmhgf6ktglmE1v7UlHM= -github.com/openstack-k8s-operators/mariadb-operator/api v0.5.1-0.20241106141725-340c4d78fef0/go.mod h1:348EPtAdpE2LxHAH4bHdCMNP7HyX6DevwEsF9DQ0S2k= github.com/openstack-k8s-operators/neutron-operator/api v0.5.1-0.20241114104932-eae3f8cd032b h1:JMMPYDierS4YZdG9O/50kLihPQqmDz7p72btLy7Ibew= github.com/openstack-k8s-operators/neutron-operator/api v0.5.1-0.20241114104932-eae3f8cd032b/go.mod h1:Kfuu3g4PSFpEowdWhbnTgSlDpsBGswQf/WU/kKQKK7s= github.com/openstack-k8s-operators/nova-operator/api v0.5.1-0.20241119125634-42b7b8417b48 h1:eCvn/lCMqWTvlN74nFr7nG2EvZdvJPdSR9Ts2eTaM6c= diff --git a/go.mod b/go.mod index 54d5f2a86..4bece61ac 100644 --- a/go.mod +++ b/go.mod @@ -126,3 +126,5 @@ replace github.com/openshift/api => github.com/openshift/api v0.0.0-202408300231 // custom RabbitmqClusterSpecCore for OpenStackControlplane (v2.9.0_patches_tag) replace github.com/rabbitmq/cluster-operator/v2 => github.com/openstack-k8s-operators/rabbitmq-cluster-operator/v2 v2.6.1-0.20241017142550-a3524acedd49 //allow-merging + +replace github.com/openstack-k8s-operators/mariadb-operator/api => github.com/olliewalsh/mariadb-operator/api v0.0.0-20241120005220-32fb0cf70317 diff --git a/go.sum b/go.sum index 42821ec1a..4163c0999 100644 --- a/go.sum +++ b/go.sum @@ -94,6 +94,8 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/olliewalsh/mariadb-operator/api v0.0.0-20241120005220-32fb0cf70317 h1:11V1kv1lK7bRCKhy+3qWZ7q5QKnDAj6nsAWykKuxLqk= +github.com/olliewalsh/mariadb-operator/api v0.0.0-20241120005220-32fb0cf70317/go.mod h1:348EPtAdpE2LxHAH4bHdCMNP7HyX6DevwEsF9DQ0S2k= github.com/onsi/ginkgo/v2 v2.20.1 h1:YlVIbqct+ZmnEph770q9Q7NVAz4wwIiVNahee6JyUzo= github.com/onsi/ginkgo/v2 v2.20.1/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= @@ -132,8 +134,6 @@ github.com/openstack-k8s-operators/lib-common/modules/test v0.5.1-0.202411140918 github.com/openstack-k8s-operators/lib-common/modules/test v0.5.1-0.20241114091812-6dc9fd0961dc/go.mod h1:LV0jo5etIsGyINpmB37i4oWR8zU6ApIuh7fsqGGA41o= github.com/openstack-k8s-operators/manila-operator/api v0.5.1-0.20241117150431-21b7f58d9ddf h1:UsAefjZBqFl0dYMg/efe75ECm8cAwc/2FCEBPYjQfIY= github.com/openstack-k8s-operators/manila-operator/api v0.5.1-0.20241117150431-21b7f58d9ddf/go.mod h1:0/qgnjufYIqe439/3aUU/cwnjDwdUlNR3jnRubLTD5o= -github.com/openstack-k8s-operators/mariadb-operator/api v0.5.1-0.20241106141725-340c4d78fef0 h1:XrJID4tPlR1JCO7A7MPONGfVRmhgf6ktglmE1v7UlHM= -github.com/openstack-k8s-operators/mariadb-operator/api v0.5.1-0.20241106141725-340c4d78fef0/go.mod h1:348EPtAdpE2LxHAH4bHdCMNP7HyX6DevwEsF9DQ0S2k= github.com/openstack-k8s-operators/neutron-operator/api v0.5.1-0.20241114104932-eae3f8cd032b h1:JMMPYDierS4YZdG9O/50kLihPQqmDz7p72btLy7Ibew= github.com/openstack-k8s-operators/neutron-operator/api v0.5.1-0.20241114104932-eae3f8cd032b/go.mod h1:Kfuu3g4PSFpEowdWhbnTgSlDpsBGswQf/WU/kKQKK7s= github.com/openstack-k8s-operators/nova-operator/api v0.5.1-0.20241119125634-42b7b8417b48 h1:eCvn/lCMqWTvlN74nFr7nG2EvZdvJPdSR9Ts2eTaM6c= diff --git a/pkg/openstack/galera.go b/pkg/openstack/galera.go index 7cea8a6d1..2e957063c 100644 --- a/pkg/openstack/galera.go +++ b/pkg/openstack/galera.go @@ -168,6 +168,10 @@ func reconcileGalera( return galeraReady, nil } + if spec.NodeSelector == nil { + spec.NodeSelector = &instance.Spec.NodeSelector + } + Log.Info("Reconciling Galera", "Galera.Namespace", instance.Namespace, "Galera.Name", name) op, err := controllerutil.CreateOrPatch(ctx, helper.GetClient(), galera, func() error { spec.DeepCopyInto(&galera.Spec.GaleraSpecCore) diff --git a/tests/functional/ctlplane/openstackoperator_controller_test.go b/tests/functional/ctlplane/openstackoperator_controller_test.go index 2c58391ef..d718b845b 100644 --- a/tests/functional/ctlplane/openstackoperator_controller_test.go +++ b/tests/functional/ctlplane/openstackoperator_controller_test.go @@ -1804,6 +1804,102 @@ var _ = Describe("OpenStackOperator controller", func() { }) }) + When("An OpenStackControlplane instance is created with nodeSelector", func() { + BeforeEach(func() { + spec := GetDefaultOpenStackControlPlaneSpec() + spec["tls"] = GetTLSPublicSpec() + nodeSelector := map[string]string{ + "foo": "bar", + } + spec["nodeSelector"] = nodeSelector + DeferCleanup( + th.DeleteInstance, + CreateOpenStackControlPlane(names.OpenStackControlplaneName, spec), + ) + }) + + It("should set the galera nodeSelector", func() { + Eventually(func(g Gomega) { + db := mariadb.GetGalera(names.DBName) + g.Expect(*db.Spec.NodeSelector).To(Equal(map[string]string{"foo": "bar"})) + }, timeout, interval).Should(Succeed()) + Eventually(func(g Gomega) { + db := mariadb.GetGalera(names.DBCell1Name) + g.Expect(*db.Spec.NodeSelector).To(Equal(map[string]string{"foo": "bar"})) + }, timeout, interval).Should(Succeed()) + }) + + It("should update the galera nodeSelector", func() { + Eventually(func(g Gomega) { + db := mariadb.GetGalera(names.DBName) + g.Expect(*db.Spec.NodeSelector).To(Equal(map[string]string{"foo": "bar"})) + }, timeout, interval).Should(Succeed()) + Eventually(func(g Gomega) { + db := mariadb.GetGalera(names.DBCell1Name) + g.Expect(*db.Spec.NodeSelector).To(Equal(map[string]string{"foo": "bar"})) + }, timeout, interval).Should(Succeed()) + + Eventually(func(g Gomega) { + OSCtlplane := GetOpenStackControlPlane(names.OpenStackControlplaneName) + newNodeSelector := map[string]string{ + "foo2": "bar2", + } + OSCtlplane.Spec.NodeSelector = newNodeSelector + g.Expect(k8sClient.Update(ctx, OSCtlplane)).Should(Succeed()) + }, timeout, interval).Should(Succeed()) + + Eventually(func(g Gomega) { + db := mariadb.GetGalera(names.DBName) + g.Expect(*db.Spec.NodeSelector).To(Equal(map[string]string{"foo2": "bar2"})) + }, timeout, interval).Should(Succeed()) + Eventually(func(g Gomega) { + db := mariadb.GetGalera(names.DBCell1Name) + g.Expect(*db.Spec.NodeSelector).To(Equal(map[string]string{"foo2": "bar2"})) + }, timeout, interval).Should(Succeed()) + }) + + It("should allow the galera nodeSelector to be overridden", func() { + Eventually(func(g Gomega) { + db := mariadb.GetGalera(names.DBName) + g.Expect(*db.Spec.NodeSelector).To(Equal(map[string]string{"foo": "bar"})) + }, timeout, interval).Should(Succeed()) + Eventually(func(g Gomega) { + db := mariadb.GetGalera(names.DBCell1Name) + g.Expect(*db.Spec.NodeSelector).To(Equal(map[string]string{"foo": "bar"})) + }, timeout, interval).Should(Succeed()) + + Eventually(func(g Gomega) { + OSCtlplane := GetOpenStackControlPlane(names.OpenStackControlplaneName) + + newNodeSelector := map[string]string{ + "foo2": "bar2", + } + galeraTemplates := *(OSCtlplane.Spec.Galera.Templates) + dbTemplate := galeraTemplates[names.DBName.Name] + dbTemplate.NodeSelector = &newNodeSelector + galeraTemplates[names.DBName.Name] = dbTemplate + + emptyNodeSelector := map[string]string{} + cell1Template := galeraTemplates[names.DBCell1Name.Name] + cell1Template.NodeSelector = &emptyNodeSelector + galeraTemplates[names.DBCell1Name.Name] = cell1Template + + OSCtlplane.Spec.Galera.Templates = &galeraTemplates + + g.Expect(k8sClient.Update(ctx, OSCtlplane)).Should(Succeed()) + }, timeout, interval).Should(Succeed()) + + Eventually(func(g Gomega) { + db := mariadb.GetGalera(names.DBName) + g.Expect(*db.Spec.NodeSelector).To(Equal(map[string]string{"foo2": "bar2"})) + }, timeout, interval).Should(Succeed()) + Eventually(func(g Gomega) { + db := mariadb.GetGalera(names.DBCell1Name) + g.Expect(*db.Spec.NodeSelector).To(Equal(map[string]string{})) + }, timeout, interval).Should(Succeed()) + }) + }) + }) var _ = Describe("OpenStackOperator Webhook", func() {