Skip to content

Commit 0716711

Browse files
feat: apply built in overrides before end user overrides (#610)
we should apply the release built in overrides before applying the overrides we read from the command line. we were only applying the latter before this patch so this also solves a bug. this commit also adds unit tests for the built in overrides and an a validation after the installation e2e test.
1 parent fd0e9f2 commit 0716711

14 files changed

+296
-256
lines changed

cmd/embedded-cluster/install.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,7 @@ func ensureK0sConfig(c *cli.Context) error {
307307

308308
// applyUnsupportedOverrides applies overrides to the k0s configuration. Applies first the
309309
// overrides embedded into the binary and after the ones provided by the user (--overrides).
310+
// we first apply the k0s config override and then apply the built in overrides.
310311
func applyUnsupportedOverrides(c *cli.Context, cfg *k0sconfig.ClusterConfig) (*k0sconfig.ClusterConfig, error) {
311312
var err error
312313
if embcfg, err := release.GetEmbeddedClusterConfig(); err != nil {
@@ -316,6 +317,9 @@ func applyUnsupportedOverrides(c *cli.Context, cfg *k0sconfig.ClusterConfig) (*k
316317
if cfg, err = config.PatchK0sConfig(cfg, overrides); err != nil {
317318
return nil, fmt.Errorf("unable to patch k0s config: %w", err)
318319
}
320+
if cfg, err = config.ApplyBuiltInExtensionsOverrides(cfg, embcfg); err != nil {
321+
return nil, fmt.Errorf("unable to release built in overrides: %w", err)
322+
}
319323
}
320324
if c.String("overrides") == "" {
321325
return cfg, nil
@@ -328,6 +332,9 @@ func applyUnsupportedOverrides(c *cli.Context, cfg *k0sconfig.ClusterConfig) (*k
328332
if cfg, err = config.PatchK0sConfig(cfg, overrides); err != nil {
329333
return nil, fmt.Errorf("unable to apply overrides: %w", err)
330334
}
335+
if cfg, err = config.ApplyBuiltInExtensionsOverrides(cfg, eucfg); err != nil {
336+
return nil, fmt.Errorf("unable to end user built in overrides: %w", err)
337+
}
331338
return cfg, nil
332339
}
333340

e2e/kots-release-install/cluster-config.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,16 @@ spec:
1818
xyz-test-label: xyz-value
1919
name: xyz
2020
unsupportedOverrides:
21+
builtInExtensions:
22+
- name: admin-console
23+
values: |
24+
labels:
25+
release-custom-label: release-clustom-value
26+
- name: embedded-cluster-operator
27+
values: |
28+
global:
29+
labels:
30+
release-custom-label: release-clustom-value
2131
k0s: |
2232
config:
2333
metadata:

e2e/kots-release-upgrade/cluster-config.yaml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,16 @@ spec:
2121
final-test-label: final-value
2222
name: final
2323
unsupportedOverrides:
24+
builtInExtensions:
25+
- name: admin-console
26+
values: |
27+
labels:
28+
release-custom-label: release-clustom-value
29+
- name: embedded-cluster-operator
30+
values: |
31+
global:
32+
labels:
33+
release-custom-label: release-clustom-value
2434
k0s: |
2535
config:
2636
metadata:

e2e/scripts/single-node-install.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,21 @@ ensure_installation_label() {
248248
fi
249249
}
250250

251+
# ensure_release_builtin_overrides verifies if the built in overrides we provide as part
252+
# of the release have been applied to the helm charts.
253+
ensure_release_builtin_overrides() {
254+
if ! kubectl get charts.helm.k0sproject.io -n kube-system k0s-addon-chart-admin-console -o yaml | grep -q -E "^ +release-custom-label"; then
255+
echo "release-custom-label not found in k0s-addon-chart-admin-console"
256+
kubectl get charts.helm.k0sproject.io -n kube-system k0s-addon-chart-admin-console -o yaml
257+
return 1
258+
fi
259+
if ! kubectl get charts.helm.k0sproject.io -n kube-system k0s-addon-chart-embedded-cluster-operator -o yaml | grep -q -E "^ +release-custom-label"; then
260+
echo "release-custom-label not found in k0s-addon-chart-embedded-cluster-operator"
261+
kubectl get charts.helm.k0sproject.io -n kube-system k0s-addon-chart-embedded-cluster-operator -o yaml
262+
return 1
263+
fi
264+
}
265+
251266
main() {
252267
local app_deploy_method="$1"
253268

@@ -319,6 +334,9 @@ main() {
319334
if ! ensure_installation_label; then
320335
exit 1
321336
fi
337+
if ! ensure_release_builtin_overrides; then
338+
exit 1
339+
fi
322340
if ! systemctl status embedded-cluster; then
323341
echo "Failed to get status of embedded-cluster service"
324342
exit 1

pkg/addons/applier.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -115,15 +115,6 @@ func (a *Applier) GenerateHelmConfigs(additionalCharts []v1beta1.Chart, addition
115115

116116
// charts required by the application
117117
charts = append(charts, additionalCharts...)
118-
if a.endUserConfig != nil {
119-
for i, chart := range charts {
120-
values, err := a.endUserConfig.Spec.ApplyEndUserAddOnOverrides(chart.Name, chart.Values)
121-
if err != nil {
122-
return nil, nil, fmt.Errorf("unable to apply end user overrides for %s: %w", chart.Name, err)
123-
}
124-
charts[i].Values = values
125-
}
126-
}
127118
repositories = append(repositories, additionalRepositories...)
128119

129120
return charts, repositories, nil

pkg/addons/applier_test.go

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

pkg/addons/testdata/generate-helm-config-overrides-multiple-addons.yaml

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

pkg/addons/testdata/generate-helm-config-overrides-openebs.yaml

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

pkg/addons/testdata/generate-helm-config-overrides-registry.yaml

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

pkg/config/config.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
jsonpatch "github.com/evanphx/json-patch"
1010
"github.com/k0sproject/dig"
1111
k0sconfig "github.com/k0sproject/k0s/pkg/apis/k0s/v1beta1"
12+
embeddedclusterv1beta1 "github.com/replicatedhq/embedded-cluster-kinds/apis/v1beta1"
1213
"github.com/replicatedhq/embedded-cluster-operator/controllers"
1314
"gopkg.in/yaml.v2"
1415
k8syaml "sigs.k8s.io/yaml"
@@ -97,6 +98,22 @@ func extractK0sConfigPatch(raw string) (string, error) {
9798
return string(data), nil
9899
}
99100

101+
// ApplyBuiltIndExtensionsOverrides applies the cluster config built in extensions overrides on top
102+
// of the provided cluster configuration. Returns the changed configuration.
103+
func ApplyBuiltInExtensionsOverrides(cfg *k0sconfig.ClusterConfig, releaseConfig *embeddedclusterv1beta1.Config) (*k0sconfig.ClusterConfig, error) {
104+
if cfg.Spec == nil || cfg.Spec.Extensions == nil || cfg.Spec.Extensions.Helm == nil {
105+
return cfg, nil
106+
}
107+
for i, chart := range cfg.Spec.Extensions.Helm.Charts {
108+
values, err := releaseConfig.Spec.ApplyEndUserAddOnOverrides(chart.Name, chart.Values)
109+
if err != nil {
110+
return nil, fmt.Errorf("unable to apply end user overrides for %s: %w", chart.Name, err)
111+
}
112+
cfg.Spec.Extensions.Helm.Charts[i].Values = values
113+
}
114+
return cfg, nil
115+
}
116+
100117
// PatchK0sConfig patches a K0s config with the provided patch. Returns the patched config,
101118
// patch is expected to be a YAML encoded k0s configuration. We marshal the original config
102119
// and the patch into JSON and apply the latter as a merge patch to the former.

0 commit comments

Comments
 (0)