From ed4a88cea5aef3f521c1b30a827bc94b32932b17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Wilson=20J=C3=BAnior?= Date: Tue, 23 Jan 2024 09:58:34 -0300 Subject: [PATCH] WIP: merge plan config with instance config before render --- controllers/controller.go | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/controllers/controller.go b/controllers/controller.go index 967dea7a0..f1db206b1 100644 --- a/controllers/controller.go +++ b/controllers/controller.go @@ -941,9 +941,14 @@ func (r *RpaasInstanceReconciler) renderTemplate(ctx context.Context, instance * return "", err } + instanceWithMergedConfig, err := mergeInstanceWithConfig(instance, &plan.Spec.Config) + if err != nil { + return "", err + } + config := nginx.ConfigurationData{ - Instance: instance, - Config: &plan.Spec.Config, + Instance: instanceWithMergedConfig, + Config: &instanceWithMergedConfig.Spec.PlanTemplate.Config, } return cr.Render(config) @@ -1320,6 +1325,30 @@ func mergePlans(base v1alpha1.RpaasPlanSpec, override v1alpha1.RpaasPlanSpec) (m return } +func mergeConfig(base v1alpha1.NginxConfig, override v1alpha1.NginxConfig) (merged v1alpha1.NginxConfig, err error) { + err = genericMerge(&merged, base, override) + return +} + +func mergeInstanceWithConfig(instance *v1alpha1.RpaasInstance, config *v1alpha1.NginxConfig) (*v1alpha1.RpaasInstance, error) { + instanceConfig := v1alpha1.NginxConfig{} + if instance.Spec.PlanTemplate != nil { + instanceConfig = instance.Spec.PlanTemplate.Config + } + + mergedConfig, err := mergeConfig(*config, instanceConfig) + if err != nil { + return nil, err + } + instanceWithMergedConfig := instance.DeepCopy() + if instanceWithMergedConfig.Spec.PlanTemplate == nil { + instanceWithMergedConfig.Spec.PlanTemplate = &v1alpha1.RpaasPlanSpec{} + } + instanceWithMergedConfig.Spec.PlanTemplate.Config = mergedConfig + + return instanceWithMergedConfig, nil +} + func genericMerge(dst interface{}, overrides ...interface{}) error { transformers := []func(*mergo.Config){ mergo.WithOverride,