Skip to content

Commit c667cef

Browse files
committed
Add controller tests
1 parent 7c92dab commit c667cef

File tree

7 files changed

+301
-69
lines changed

7 files changed

+301
-69
lines changed

api/v3/atom_types.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ type Service struct {
6464
ServiceMetadataLinks MetadataLink `json:"serviceMetadataLinks,omitempty"`
6565
Rights string `json:"rights,omitempty"`
6666
Author Author `json:"author,omitempty"`
67-
67+
6868
// +kubebuilder:validation:Optional
6969
GeneratorConfig string `json:"-"` // Skip this field in the CRD schema
7070
}
@@ -87,14 +87,14 @@ type Author struct {
8787

8888
// DatasetFeed represents individual dataset feeds within the Atom service
8989
type DatasetFeed struct {
90-
TechnicalName string `json:"technicalName"`
91-
Title string `json:"title"`
92-
Subtitle string `json:"subtitle,omitempty"`
93-
Links []Link `json:"links,omitempty"` // Todo kan weg?
94-
DatasetMetadataLinks MetadataLink `json:"datasetMetadataLinks,omitempty"`
95-
SpatialDatasetIdentifierCode string `json:"spatial_dataset_identifier_code,omitempty"`
96-
SpatialDatasetIdentifierNamespace string `json:"spatial_dataset_identifier_namespace,omitempty"`
97-
Entries []Entry `json:"entries,omitempty"`
90+
TechnicalName string `json:"technicalName"`
91+
Title string `json:"title"`
92+
Subtitle string `json:"subtitle,omitempty"`
93+
Links []Link `json:"links,omitempty"`
94+
DatasetMetadataLinks MetadataLink `json:"datasetMetadataLinks,omitempty"`
95+
SpatialDatasetIdentifierCode string `json:"spatial_dataset_identifier_code,omitempty"`
96+
SpatialDatasetIdentifierNamespace string `json:"spatial_dataset_identifier_namespace,omitempty"`
97+
Entries []Entry `json:"entries,omitempty"`
9898
}
9999

100100
// MetadataLink represents a link in the service or dataset feed

api/v3/zz_generated.deepcopy.go

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/bases/pdok.nl_atoms.yaml

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -351,19 +351,6 @@ spec:
351351
description: DatasetFeed represents individual dataset feeds within
352352
the Atom service
353353
properties:
354-
author:
355-
description: |-
356-
Author todo: move to higher level
357-
Author specifies the author or owner information
358-
properties:
359-
email:
360-
type: string
361-
name:
362-
type: string
363-
required:
364-
- email
365-
- name
366-
type: object
367354
datasetMetadataLinks:
368355
description: MetadataLink represents a link in the service or
369356
dataset feed
@@ -533,6 +520,17 @@ spec:
533520
description: Service defines the service configuration for the Atom
534521
feed
535522
properties:
523+
author:
524+
description: Author specifies the author or owner information
525+
properties:
526+
email:
527+
type: string
528+
name:
529+
type: string
530+
required:
531+
- email
532+
- name
533+
type: object
536534
baseUrl:
537535
type: string
538536
lang:

internal/controller/atom_controller.go

Lines changed: 27 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ const (
6565
)
6666

6767
const (
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
8186
type 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

569574
func getBareIngressRoute(obj metav1.Object) *traefikiov1alpha1.IngressRoute {

0 commit comments

Comments
 (0)