@@ -65,6 +65,7 @@ const (
6565)
6666
6767const (
68+ controllerName = "atom-controller"
6869 appLabelKey = "app"
6970 atomName = "atom"
7071 configFileName = "values.yaml"
@@ -77,6 +78,10 @@ const (
7778 srvDir = "/srv"
7879)
7980
81+ var (
82+ finalizerName = controllerName + "." + pdoknlv3 .GroupVersion .Group + "/finalizer"
83+ )
84+
8085// AtomReconciler reconciles a Atom object
8186type AtomReconciler struct {
8287 client.Client
@@ -140,15 +145,14 @@ func (r *AtomReconciler) Reconcile(ctx context.Context, req ctrl.Request) (resul
140145 atom .Spec .Service .GeneratorConfig = atomGeneratorConfig
141146 }
142147
143- // Todo finalizeIfNecessary()?
144- //fullName := getObjectFullName(r.Client, atom)
145- //shouldContinue, err := finalizeIfNecessary(ctx, r.Client, atom, finalizerName, func() error {
146- // lgr.Info("deleting resources", "name", fullName)
147- // return r.deleteAllForAtom(ctx, atom)
148- //})
149- //if !shouldContinue || err != nil {
150- // return result, err
151- //}
148+ fullName := getObjectFullName (r .Client , atom )
149+ shouldContinue , err := finalizeIfNecessary (ctx , r .Client , atom , finalizerName , func () error {
150+ lgr .Info ("deleting resources" , "name" , fullName )
151+ return r .deleteAllForAtom (ctx , atom )
152+ })
153+ if ! shouldContinue || err != nil {
154+ return result , err
155+ }
152156
153157 operationResults , err := r .createOrUpdateAllForAtom (ctx , atom )
154158 if err != nil {
@@ -194,7 +198,7 @@ func (r *AtomReconciler) createOrUpdateAllForAtom(ctx context.Context, atom *pdo
194198 // region Create or update Deployment
195199 deployment := getBareDeployment (atom )
196200 operationResults [getObjectFullName (r .Client , deployment )], err = controllerutil .CreateOrUpdate (ctx , r .Client , deployment , func () error {
197- return r .mutateDeployment (atom , deployment )
201+ return r .mutateDeployment (atom , deployment , configMap . GetName () )
198202 })
199203 if err != nil {
200204 return operationResults , fmt .Errorf ("unable to create/update resource %s: %w" , getObjectFullName (c , deployment ), err )
@@ -261,7 +265,7 @@ func (r *AtomReconciler) createOrUpdateAllForAtom(ctx context.Context, atom *pdo
261265
262266 // region Create or update PodDisruptionBudget
263267 podDisruptionBudget := getBarePodDisruptionBudget (atom )
264- operationResults [getObjectFullName (r .Client , podDisruptionBudget )], err = controllerutil .CreateOrUpdate (ctx , r .Client , service , func () error {
268+ operationResults [getObjectFullName (r .Client , podDisruptionBudget )], err = controllerutil .CreateOrUpdate (ctx , r .Client , podDisruptionBudget , func () error {
265269 return r .mutatePodDisruptionBudget (atom , podDisruptionBudget )
266270 })
267271 if err != nil {
@@ -286,6 +290,8 @@ func (r *AtomReconciler) deleteAllForAtom(ctx context.Context, atom *pdoknlv3.At
286290 getBareCorsHeadersMiddleware (atom ),
287291 getBareIngressRoute (atom ),
288292 getBarePodDisruptionBudget (atom ),
293+
294+ // Todo delete extra middleware, per datasetFeed?
289295 })
290296}
291297
@@ -327,7 +333,7 @@ func getBareDeployment(obj metav1.Object) *appsv1.Deployment {
327333 }
328334}
329335
330- func (r * AtomReconciler ) mutateDeployment (atom * pdoknlv3.Atom , deployment * appsv1.Deployment ) error {
336+ func (r * AtomReconciler ) mutateDeployment (atom * pdoknlv3.Atom , deployment * appsv1.Deployment , configMapName string ) error {
331337 labels := cloneOrEmptyMap (atom .GetLabels ())
332338 labels [appLabelKey ] = atomName
333339 if err := setImmutableLabels (r .Client , deployment , labels ); err != nil {
@@ -363,7 +369,7 @@ func (r *AtomReconciler) mutateDeployment(atom *pdoknlv3.Atom, deployment *appsv
363369 {Name : "data" , VolumeSource : corev1.VolumeSource {EmptyDir : & corev1.EmptyDirVolumeSource {}}},
364370 {Name : "socket" , VolumeSource : corev1.VolumeSource {EmptyDir : & corev1.EmptyDirVolumeSource {}}},
365371 {Name : "config" , VolumeSource : corev1.VolumeSource {ConfigMap : & corev1.ConfigMapVolumeSource {
366- LocalObjectReference : corev1.LocalObjectReference {Name : atom . Name + "-atom-generator" }}},
372+ LocalObjectReference : corev1.LocalObjectReference {Name : configMapName }}},
367373 },
368374 },
369375 InitContainers : []corev1.Container {
@@ -429,14 +435,13 @@ func (r *AtomReconciler) mutateDeployment(atom *pdoknlv3.Atom, deployment *appsv
429435 },
430436 }
431437
432- // Todo strategicMergePatch()?
433- //if atom.Spec.PodSpecPatch != nil {
434- // patchedPod, err := strategicMergePatch(&podTemplateSpec.Spec, &atom.Spec.PodSpecPatch)
435- // if err != nil {
436- // return err
437- // }
438- // podTemplateSpec.Spec = *patchedPod
439- //}
438+ if atom .Spec .PodSpecPatch != nil {
439+ patchedPod , err := strategicMergePatch (& podTemplateSpec .Spec , & atom .Spec .PodSpecPatch )
440+ if err != nil {
441+ return err
442+ }
443+ podTemplateSpec .Spec = * patchedPod
444+ }
440445 podTemplateSpec .Spec .InitContainers [0 ].Image = r .AtomGeneratorImage
441446 podTemplateSpec .Spec .Containers [0 ].Image = r .LighttpdImage
442447 deployment .Spec .Template = podTemplateSpec
@@ -563,7 +568,7 @@ func (r *AtomReconciler) mutateDownloadLinkMiddleware(atom *pdoknlv3.Atom, downl
563568 if err := ensureSetGVK (r .Client , middleware , middleware ); err != nil {
564569 return err
565570 }
566- return ctrl .SetControllerReference (middleware , middleware , r .Scheme )
571+ return ctrl .SetControllerReference (atom , middleware , r .Scheme )
567572}
568573
569574func getBareIngressRoute (obj metav1.Object ) * traefikiov1alpha1.IngressRoute {
0 commit comments