diff --git a/internal/controller/shared_controller.go b/internal/controller/shared_controller.go index 4cd3f7a..a48e8d3 100644 --- a/internal/controller/shared_controller.go +++ b/internal/controller/shared_controller.go @@ -1020,10 +1020,6 @@ func updateStatus[R Reconciler](ctx context.Context, r R, obj client.Object, con } } -func getFinalizerName[O pdoknlv3.WMSWFS](obj O) string { - return strings.ToLower(string(obj.Type())) + "." + pdoknlv3.GroupVersion.Group + "/finalizer" -} - // TODO fix linting (cyclop,funlen) // //nolint:cyclop,funlen @@ -1221,81 +1217,3 @@ func getConfigMap[O pdoknlv3.WMSWFS, R Reconciler](ctx context.Context, obj O, r } return cm, &or, nil } - -// TODO fix linting (funlen) -// -//nolint:funlen -func deleteAllForWMSWFS[R Reconciler, O pdoknlv3.WMSWFS](ctx context.Context, r R, obj O, ownerInfo *smoothoperatorv1.OwnerInfo) (err error) { - bareObjects := getSharedBareObjects(obj) - var objects []client.Object - - // Remove ConfigMaps as they have hashed names - for _, object := range bareObjects { - if _, ok := object.(*corev1.ConfigMap); !ok { - objects = append(objects, object) - } - } - - // ConfigMap - cm := getBareConfigMap(obj, MapserverName) - err = mutateConfigMap(r, obj, cm) - if err != nil { - return err - } - objects = append(objects, cm) - - // ConfigMap-MapfileGenerator - cmMg := getBareConfigMapMapfileGenerator(obj) - err = mutateConfigMapMapfileGenerator(r, obj, cmMg, ownerInfo) - if err != nil { - return err - } - objects = append(objects, cmMg) - - // ConfigMap-CapabilitiesGenerator - cmCg := getBareConfigMapCapabilitiesGenerator(obj) - err = mutateConfigMapCapabilitiesGenerator(r, obj, cmCg, ownerInfo) - if err != nil { - return err - } - objects = append(objects, cmCg) - - // ConfigMap-BlobDownload - cmBd := getBareConfigMapBlobDownload(obj) - err = mutateConfigMapBlobDownload(r, obj, cmBd) - if err != nil { - return err - } - objects = append(objects, cmBd) - - if obj.Type() == pdoknlv3.ServiceTypeWMS { - wms, _ := any(obj).(*pdoknlv3.WMS) - wmsReconciler := (*WMSReconciler)(r) - - // ConfigMap-LegendGenerator - cmLg := getBareConfigMap(wms, LegendGeneratorName) - err = mutateConfigMapLegendGenerator(wmsReconciler, wms, cmLg) - if err != nil { - return err - } - objects = append(objects, cmLg) - - // ConfigMap-FeatureInfo - cmFi := getBareConfigMap(wms, FeatureInfoGeneratorName) - err = mutateConfigMapFeatureinfoGenerator(wmsReconciler, wms, cmFi) - if err != nil { - return err - } - objects = append(objects, cmFi) - - // ConfigMap-OgcWebserviceProxy - cmOwp := getBareConfigMap(wms, OgcWebserviceProxyName) - err = mutateConfigMapOgcWebserviceProxy(wmsReconciler, wms, cmOwp) - if err != nil { - return err - } - objects = append(objects, cmOwp) - } - - return smoothoperatorutils.DeleteObjects(ctx, getReconcilerClient(r), objects) -} diff --git a/internal/controller/shared_controller_test.go b/internal/controller/shared_controller_test.go index 9c11769..cd85f0f 100644 --- a/internal/controller/shared_controller_test.go +++ b/internal/controller/shared_controller_test.go @@ -39,7 +39,7 @@ func getHashedConfigMapNameFromClient[O pdoknlv3.WMSWFS](ctx context.Context, ob return "", fmt.Errorf("configmap %s not found", volumeName) } -func getExpectedObjects[O pdoknlv3.WMSWFS](ctx context.Context, obj O, includeBlobDownload bool) ([]client.Object, error) { +func getExpectedObjects[O pdoknlv3.WMSWFS](ctx context.Context, obj O, includeBlobDownload bool, includeMapfileGeneratorConfigMap bool) ([]client.Object, error) { bareObjects := getSharedBareObjects(obj) var objects []client.Object @@ -59,13 +59,15 @@ func getExpectedObjects[O pdoknlv3.WMSWFS](ctx context.Context, obj O, includeBl cm.Name = hashedName objects = append(objects, cm) - cm = getBareConfigMapMapfileGenerator(obj) - hashedName, err = getHashedConfigMapNameFromClient(ctx, obj, mapserver.ConfigMapMapfileGeneratorVolumeName) - if err != nil { - return objects, err + if includeMapfileGeneratorConfigMap { + cm = getBareConfigMapMapfileGenerator(obj) + hashedName, err = getHashedConfigMapNameFromClient(ctx, obj, mapserver.ConfigMapMapfileGeneratorVolumeName) + if err != nil { + return objects, err + } + cm.Name = hashedName + objects = append(objects, cm) } - cm.Name = hashedName - objects = append(objects, cm) cm = getBareConfigMapCapabilitiesGenerator(obj) hashedName, err = getHashedConfigMapNameFromClient(ctx, obj, mapserver.ConfigMapCapabilitiesGeneratorVolumeName) diff --git a/internal/controller/wfs_controller.go b/internal/controller/wfs_controller.go index 0e112ea..f2072b9 100644 --- a/internal/controller/wfs_controller.go +++ b/internal/controller/wfs_controller.go @@ -29,7 +29,6 @@ import ( pdoknlv3 "github.com/pdok/mapserver-operator/api/v3" smoothoperatorv1 "github.com/pdok/smooth-operator/api/v1" - smoothoperatorutils "github.com/pdok/smooth-operator/pkg/util" apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime" ctrl "sigs.k8s.io/controller-runtime" @@ -100,17 +99,6 @@ func (r *WFSReconciler) Reconcile(ctx context.Context, req ctrl.Request) (result return result, client.IgnoreNotFound(err) } - lgr.Info("Get object full name") - fullName := smoothoperatorutils.GetObjectFullName(r.Client, wfs) - lgr.Info("Finalize if necessary") - shouldContinue, err := smoothoperatorutils.FinalizeIfNecessary(ctx, r.Client, wfs, getFinalizerName(wfs), func() error { - lgr.Info("deleting resources", "name", fullName) - return deleteAllForWMSWFS(ctx, r, wfs, ownerInfo) - }) - if !shouldContinue || err != nil { - return result, err - } - lgr.Info("creating resources for wfs", "wfs", wfs) operationResults, err := createOrUpdateAllForWMSWFS(ctx, r, wfs, ownerInfo) if err != nil { diff --git a/internal/controller/wfs_controller_test.go b/internal/controller/wfs_controller_test.go index a1b895f..78e0163 100644 --- a/internal/controller/wfs_controller_test.go +++ b/internal/controller/wfs_controller_test.go @@ -28,7 +28,6 @@ package controller import ( "context" _ "embed" - "errors" "fmt" "slices" @@ -73,6 +72,7 @@ var _ = Describe("WFS Controller", func() { Name: ownerInfoResourceName, } ownerInfo := &smoothoperatorv1.OwnerInfo{} + initScripts, includeMapfileGeneratorConfigMap := true, true BeforeEach(func() { pdoknlv3.SetHost("localhost") @@ -121,6 +121,20 @@ var _ = Describe("WFS Controller", func() { By("Cleanup the specific resource instance OwnerInfo") Expect(k8sClient.Delete(ctx, ownerInfoResource)).To(Succeed()) + + // the testEnv does not do garbage collection (https://book.kubebuilder.io/reference/envtest#testing-considerations) + By("Cleaning Owned Resources") + objects, err := getExpectedObjects(ctx, wfs, initScripts, includeMapfileGeneratorConfigMap) + Expect(err).NotTo(HaveOccurred()) + for _, o := range objects { + objectKey := client.ObjectKey{ + Namespace: o.GetNamespace(), + Name: o.GetName(), + } + err := k8sClient.Get(ctx, objectKey, o) + Expect(err).NotTo(HaveOccurred()) + Expect(k8sClient.Delete(ctx, o)).To(Succeed()) + } }) It("Should successfully reconcile the resource", func() { @@ -130,7 +144,8 @@ var _ = Describe("WFS Controller", func() { reconcileWFS(controllerReconciler, wfs, typeNamespacedNameWfs) By("Waiting for the owned resources to be created") - expectedBareObjects, err := getExpectedObjects(ctx, wfs, false) + initScripts = false + expectedBareObjects, err := getExpectedObjects(ctx, wfs, initScripts, includeMapfileGeneratorConfigMap) Expect(err).NotTo(HaveOccurred()) Eventually(func() error { @@ -149,32 +164,6 @@ var _ = Describe("WFS Controller", func() { // TODO fix Expect(len(wfs.Status.Conditions)).To(BeEquivalentTo(1)) Expect(wfs.Status.Conditions[0].Status).To(BeEquivalentTo(metav1.ConditionTrue)) - - By("Deleting the WFS") - Expect(k8sClient.Delete(ctx, wfs)).To(Succeed()) - - By("Reconciling the WFS again") - _, err = controllerReconciler.Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedNameWfs}) - Expect(err).NotTo(HaveOccurred()) - - By("Waiting for the owned resources to be deleted") - Eventually(func() error { - for _, o := range expectedBareObjects { - // TODO make finalizers work in the test environment - if len(o.GetFinalizers()) > 0 { - continue - } - - err := k8sClient.Get(ctx, types.NamespacedName{Namespace: namespace, Name: o.GetName()}, o) - if err == nil { - return errors.New("expected " + smoothoperatorutils.GetObjectFullName(k8sClient, o) + " to not be found") - } - if !k8serrors.IsNotFound(err) { - return err - } - } - return nil - }, "10s", "1s").Should(Not(HaveOccurred())) }) It("Should successfully reconcile after a change in an owned resource", func() { @@ -672,14 +661,6 @@ func reconcileWFS(r *WFSReconciler, wfs *pdoknlv3.WFS, typeNamespacedNameWfs typ // Check it's there err = k8sClient.Get(ctx, typeNamespacedNameWfs, wfs) Expect(err).NotTo(HaveOccurred()) - - // Check finalizers - finalizerName := getFinalizerName(wfs) - Expect(wfs.Finalizers).To(ContainElement(finalizerName)) - - // Reconcile again - _, err = r.Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedNameWfs}) - Expect(err).NotTo(HaveOccurred()) } //go:embed test_manifests/v3_wfs.yaml diff --git a/internal/controller/wms_controller.go b/internal/controller/wms_controller.go index 2ae2397..b016981 100644 --- a/internal/controller/wms_controller.go +++ b/internal/controller/wms_controller.go @@ -110,17 +110,6 @@ func (r *WMSReconciler) Reconcile(ctx context.Context, req ctrl.Request) (result return result, client.IgnoreNotFound(err) } - lgr.Info("Get object full name") - fullName := smoothoperatorutils.GetObjectFullName(r.Client, wms) - lgr.Info("Finalize if necessary") - shouldContinue, err := smoothoperatorutils.FinalizeIfNecessary(ctx, r.Client, wms, getFinalizerName(wms), func() error { - lgr.Info("deleting resources", "name", fullName) - return deleteAllForWMSWFS(ctx, r, wms, ownerInfo) - }) - if !shouldContinue || err != nil { - return result, err - } - lgr.Info("creating resources for wms", "wms", wms) operationResults, err := createOrUpdateAllForWMSWFS(ctx, r, wms, ownerInfo) if err != nil { diff --git a/internal/controller/wms_controller_test.go b/internal/controller/wms_controller_test.go index 5548970..aeff31c 100644 --- a/internal/controller/wms_controller_test.go +++ b/internal/controller/wms_controller_test.go @@ -28,7 +28,6 @@ package controller import ( "context" _ "embed" - "errors" "fmt" "slices" @@ -73,6 +72,7 @@ var _ = Describe("WMS Controller", func() { Name: ownerInfoResourceName, } ownerInfo := &smoothoperatorv1.OwnerInfo{} + initScripts, mapfileGenerator := true, true BeforeEach(func() { pdoknlv3.SetHost("localhost") @@ -118,6 +118,20 @@ var _ = Describe("WMS Controller", func() { By("Cleanup the specific resource instance OwnerInfo") Expect(k8sClient.Delete(ctx, ownerInfoResource)).To(Succeed()) + + // the testEnv does not do garbage collection (https://book.kubebuilder.io/reference/envtest#testing-considerations) + By("Cleaning Owned Resources") + objects, err := getExpectedObjects(ctx, wms, initScripts, mapfileGenerator) + Expect(err).NotTo(HaveOccurred()) + for _, o := range objects { + objectKey := client.ObjectKey{ + Namespace: o.GetNamespace(), + Name: o.GetName(), + } + err := k8sClient.Get(ctx, objectKey, o) + Expect(err).NotTo(HaveOccurred()) + Expect(k8sClient.Delete(ctx, o)).To(Succeed()) + } }) It("Should successfully reconcile the resource", func() { @@ -127,7 +141,8 @@ var _ = Describe("WMS Controller", func() { reconcileWMS(controllerReconciler, wms, typeNamespacedNameWms) By("Waiting for the owned resources to be created") - expectedBareObjects, err := getExpectedObjects(ctx, wms, false) + initScripts = false + expectedBareObjects, err := getExpectedObjects(ctx, wms, initScripts, mapfileGenerator) Expect(err).NotTo(HaveOccurred()) Eventually(func() error { @@ -146,32 +161,6 @@ var _ = Describe("WMS Controller", func() { Expect(len(wms.Status.Conditions)).To(BeEquivalentTo(1)) Expect(wms.Status.Conditions[0].Status).To(BeEquivalentTo(metav1.ConditionTrue)) - - By("Deleting the WMS") - Expect(k8sClient.Delete(ctx, wms)).To(Succeed()) - - By("Reconciling the WMS again") - _, err = controllerReconciler.Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedNameWms}) - Expect(err).NotTo(HaveOccurred()) - - By("Waiting for the owned resources to be deleted") - Eventually(func() error { - for _, o := range expectedBareObjects { - // TODO make finalizers work in the test environment - if len(o.GetFinalizers()) > 0 { - continue - } - - err := k8sClient.Get(ctx, types.NamespacedName{Namespace: namespace, Name: o.GetName()}, o) - if err == nil { - return errors.New("expected " + smoothoperatorutils.GetObjectFullName(k8sClient, o) + " to not be found") - } - if !k8serrors.IsNotFound(err) { - return err - } - } - return nil - }, "10s", "1s").Should(Not(HaveOccurred())) }) It("Should successfully reconcile after a change in an owned resource", func() { @@ -930,7 +919,7 @@ var _ = Describe("WMS Controller", func() { Expect(k8sClient.Get(ctx, typeNamespacedNameWms, wms)).To(Succeed()) controllerReconciler := getWMSReconciler() - + mapfileGenerator = false By("Reconciling the WMS and checking the configMap") reconcileWMS(controllerReconciler, wms, typeNamespacedNameWms) deployment := &appsv1.Deployment{} @@ -986,14 +975,6 @@ func reconcileWMS(r *WMSReconciler, wms *pdoknlv3.WMS, typeNamespacedNameWms typ // Check it's there err = k8sClient.Get(ctx, typeNamespacedNameWms, wms) Expect(err).NotTo(HaveOccurred()) - - // Check finalizers - finalizerName := getFinalizerName(wms) - Expect(wms.Finalizers).To(ContainElement(finalizerName)) - - // Reconcile again - _, err = r.Reconcile(ctx, reconcile.Request{NamespacedName: typeNamespacedNameWms}) - Expect(err).NotTo(HaveOccurred()) } //go:embed test_manifests/v3_wms.yaml