Skip to content

Commit 8f11a63

Browse files
authored
Merge pull request #641 from gianlucam76/main
Merge dev to main
2 parents b018472 + ac93741 commit 8f11a63

21 files changed

+220
-285
lines changed

controllers/funcmap.go

Lines changed: 0 additions & 178 deletions
This file was deleted.

controllers/handlers_helm.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1634,29 +1634,33 @@ func getInstantiatedValues(ctx context.Context, clusterSummary *configv1beta1.Cl
16341634
}
16351635

16361636
c := getManagementClusterClient()
1637-
valuesFrom, err := getHelmChartValuesFrom(ctx, c, clusterSummary, requestedChart, logger)
1637+
templatedValuesFrom, valuesFrom, err := getHelmChartValuesFrom(ctx, c, clusterSummary, requestedChart, logger)
16381638
if err != nil {
16391639
return nil, err
16401640
}
16411641

1642-
for k := range valuesFrom {
1642+
for k := range templatedValuesFrom {
16431643
instantiatedValuesFrom, err := instantiateTemplateValues(ctx, getManagementClusterConfig(), getManagementClusterClient(),
16441644
clusterSummary.Spec.ClusterType, clusterSummary.Spec.ClusterNamespace, clusterSummary.Spec.ClusterName,
1645-
requestedChart.ChartName, valuesFrom[k], mgmtResources, logger)
1645+
requestedChart.ChartName, templatedValuesFrom[k], mgmtResources, logger)
16461646
if err != nil {
16471647
return nil, err
16481648
}
16491649
instantiatedValues += fmt.Sprintf("\n\n%s", instantiatedValuesFrom)
16501650
}
16511651

1652-
logger.V(logs.LogVerbose).Info(fmt.Sprintf("Deploying helm charts with Values %q", instantiatedValues))
1652+
for k := range valuesFrom {
1653+
instantiatedValues += fmt.Sprintf("\n\n%s", valuesFrom[k])
1654+
}
1655+
1656+
logger.V(logs.LogDebug).Info(fmt.Sprintf("Deploying helm charts with Values %q", instantiatedValues))
16531657

16541658
return chartutil.ReadValues([]byte(instantiatedValues))
16551659
}
16561660

16571661
// getHelmChartValuesFrom return key-value pair from referenced ConfigMap/Secret
16581662
func getHelmChartValuesFrom(ctx context.Context, c client.Client, clusterSummary *configv1beta1.ClusterSummary,
1659-
helmChart *configv1beta1.HelmChart, logger logr.Logger) (map[string]string, error) {
1663+
helmChart *configv1beta1.HelmChart, logger logr.Logger) (templatedValues, nonTemplatedValues map[string]string, err error) {
16601664

16611665
return getValuesFrom(ctx, c, clusterSummary, helmChart.ValuesFrom, false, logger)
16621666
}

controllers/handlers_kustomize.go

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ import (
5151
libsveltosv1beta1 "github.com/projectsveltos/libsveltos/api/v1beta1"
5252
"github.com/projectsveltos/libsveltos/lib/clusterproxy"
5353
"github.com/projectsveltos/libsveltos/lib/deployer"
54+
"github.com/projectsveltos/libsveltos/lib/funcmap"
5455
logs "github.com/projectsveltos/libsveltos/lib/logsettings"
5556
libsveltostemplate "github.com/projectsveltos/libsveltos/lib/template"
5657
"github.com/projectsveltos/libsveltos/lib/utils"
@@ -415,27 +416,30 @@ func instantiateKustomizeSubstituteValues(ctx context.Context, clusterSummary *c
415416

416417
// getKustomizeSubstituteValues returns all key-value pair looking at both Values and ValuesFrom
417418
func getKustomizeSubstituteValues(ctx context.Context, c client.Client, clusterSummary *configv1beta1.ClusterSummary,
418-
kustomizationRef *configv1beta1.KustomizationRef, logger logr.Logger) (map[string]string, error) {
419+
kustomizationRef *configv1beta1.KustomizationRef, logger logr.Logger) (templatedValues, nonTemplatedValues map[string]string, err error) {
419420

420421
values := make(map[string]string)
421422
for k := range kustomizationRef.Values {
422423
values[k] = kustomizationRef.Values[k]
423424
}
425+
424426
// Get key-value pairs from ValuesFrom
425-
valuesFrom, err := getKustomizeSubstituteValuesFrom(ctx, c, clusterSummary, kustomizationRef, logger)
427+
templatedValues, nonTemplatedValues, err = getKustomizeSubstituteValuesFrom(ctx, c, clusterSummary, kustomizationRef, logger)
426428
if err != nil {
427-
return nil, err
429+
return nil, nil, err
428430
}
429-
for k := range valuesFrom {
430-
values[k] = valuesFrom[k]
431+
432+
// Values are always treated as templates. So copy the templated values here
433+
for k := range templatedValues {
434+
values[k] = templatedValues[k]
431435
}
432436

433-
return values, nil
437+
return values, nonTemplatedValues, nil
434438
}
435439

436440
// getKustomizeSubstituteValuesFrom return key-value pair from referenced ConfigMap/Secret
437441
func getKustomizeSubstituteValuesFrom(ctx context.Context, c client.Client, clusterSummary *configv1beta1.ClusterSummary,
438-
kustomizationRef *configv1beta1.KustomizationRef, logger logr.Logger) (map[string]string, error) {
442+
kustomizationRef *configv1beta1.KustomizationRef, logger logr.Logger) (templatedValues, nonTemplatedValues map[string]string, err error) {
439443

440444
return getValuesFrom(ctx, c, clusterSummary, kustomizationRef.ValuesFrom, true, logger)
441445
}
@@ -615,18 +619,21 @@ func getKustomizedResources(ctx context.Context, c client.Client, clusterSummary
615619
}
616620

617621
// Get key-value pairs from ValuesFrom
618-
values, err := getKustomizeSubstituteValues(ctx, c, clusterSummary, kustomizationRef, logger)
622+
templatedValues, nonTemplatedValues, err := getKustomizeSubstituteValues(ctx, c, clusterSummary, kustomizationRef, logger)
619623
if err != nil {
620624
return nil, nil, nil, err
621625
}
622626

623627
// Get substitute values. Those are collected from Data sections of referenced ConfigMap/Secret instances.
624-
// Those values can be expressed as template. This method collects them and instantiate those using resources in
628+
// Those values can be expressed as template. This method instantiates those using resources in
625629
// the managemenet cluster
626-
instantiateSubstituteValues, err := instantiateKustomizeSubstituteValues(ctx, clusterSummary, mgmtResources, values, logger)
630+
instantiatedSubstituteValues, err := instantiateKustomizeSubstituteValues(ctx, clusterSummary, mgmtResources, templatedValues, logger)
627631
if err != nil {
628632
return nil, nil, nil, err
629633
}
634+
for k := range nonTemplatedValues {
635+
instantiatedSubstituteValues[k] = nonTemplatedValues[k]
636+
}
630637

631638
resources := resMap.Resources()
632639
for i := range resources {
@@ -638,11 +645,11 @@ func getKustomizedResources(ctx context.Context, c client.Client, clusterSummary
638645
}
639646

640647
// Assume it is a template only if there are values to substitute
641-
if len(instantiateSubstituteValues) > 0 {
648+
if len(instantiatedSubstituteValues) > 0 {
642649
// All objects coming from Kustomize output can be expressed as template. Those will be instantiated using
643650
// substitute values first, and the resource in the management cluster later.
644651
templateName := fmt.Sprintf("%s-substitutevalues", clusterSummary.Name)
645-
yaml, err = instantiateResourceWithSubstituteValues(templateName, yaml, instantiateSubstituteValues, logger)
652+
yaml, err = instantiateResourceWithSubstituteValues(templateName, yaml, instantiatedSubstituteValues, logger)
646653
if err != nil {
647654
msg := fmt.Sprintf("failed to instantiate resource with substitute values: %v", err)
648655
logger.V(logs.LogInfo).Info(msg)
@@ -882,7 +889,7 @@ func extractTarGz(src, dest string) error {
882889
func instantiateResourceWithSubstituteValues(templateName string, resource []byte,
883890
substituteValues map[string]string, logger logr.Logger) ([]byte, error) {
884891

885-
tmpl, err := template.New(templateName).Option("missingkey=error").Funcs(ExtraFuncMap()).Parse(string(resource))
892+
tmpl, err := template.New(templateName).Option("missingkey=error").Funcs(funcmap.SveltosFuncMap()).Parse(string(resource))
886893
if err != nil {
887894
return nil, err
888895
}

controllers/handlers_kustomize_test.go

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ var _ = Describe("Hash methods", func() {
352352
Name: randomString(),
353353
},
354354
Data: map[string]string{
355-
randomString(): randomString(),
355+
"cluster-name": "{{ .Cluster.metadata.namespace }}-{{ .Cluster.metadata.name }}",
356356
randomString(): randomString(),
357357
},
358358
}
@@ -568,41 +568,56 @@ var _ = Describe("Hash methods", func() {
568568
c := fake.NewClientBuilder().WithScheme(scheme).WithObjects(initObjects...).Build()
569569

570570
// This will get alll substitute values considering only ValuesFrom
571-
values, err := controllers.GetKustomizeSubstituteValuesFrom(context.TODO(), c, clusterSummary, kustomizationRef,
571+
templatedValues, nonTemplatedValues, err := controllers.GetKustomizeSubstituteValuesFrom(context.TODO(), c, clusterSummary, kustomizationRef,
572572
textlogger.NewLogger(textlogger.NewConfig()))
573573
Expect(err).To(BeNil())
574574

575575
for k := range configMap.Data {
576-
v, ok := values[k]
576+
v, ok := templatedValues[k]
577+
if !ok {
578+
v, ok = nonTemplatedValues[k]
579+
}
577580
Expect(ok).To(BeTrue())
578581
Expect(v).To(Equal(configMap.Data[k]))
579582
}
580583

581584
for k := range secret.Data {
582-
v, ok := values[k]
585+
v, ok := templatedValues[k]
586+
if !ok {
587+
v, ok = nonTemplatedValues[k]
588+
}
583589
Expect(ok).To(BeTrue())
584590
Expect(v).To(Equal(string(secret.Data[k])))
585591
}
586592

587593
// This will get alll substitute values considering both Values and ValuesFrom
588-
values, err = controllers.GetKustomizeSubstituteValues(context.TODO(), c, clusterSummary, kustomizationRef,
594+
templatedValues, nonTemplatedValues, err = controllers.GetKustomizeSubstituteValues(context.TODO(), c, clusterSummary, kustomizationRef,
589595
textlogger.NewLogger(textlogger.NewConfig()))
590596
Expect(err).To(BeNil())
591597

592598
for k := range configMap.Data {
593-
v, ok := values[k]
599+
v, ok := templatedValues[k]
600+
if !ok {
601+
v, ok = nonTemplatedValues[k]
602+
}
594603
Expect(ok).To(BeTrue())
595604
Expect(v).To(Equal(configMap.Data[k]))
596605
}
597606

598607
for k := range secret.Data {
599-
v, ok := values[k]
608+
v, ok := templatedValues[k]
609+
if !ok {
610+
v, ok = nonTemplatedValues[k]
611+
}
600612
Expect(ok).To(BeTrue())
601613
Expect(v).To(Equal(string(secret.Data[k])))
602614
}
603615

604616
for k := range kustomizationRef.Values {
605-
v, ok := values[k]
617+
v, ok := templatedValues[k]
618+
if !ok {
619+
v, ok = nonTemplatedValues[k]
620+
}
606621
Expect(ok).To(BeTrue())
607622
Expect(v).To(Equal(kustomizationRef.Values[k]))
608623
}

0 commit comments

Comments
 (0)