Skip to content

Commit 386984a

Browse files
feat: fixes unsupported overrides for extensions (#254)
fixes the unsupported overrides being overwritten. adds a more complete end to end test case.
1 parent 78417c1 commit 386984a

File tree

3 files changed

+100
-40
lines changed

3 files changed

+100
-40
lines changed

cmd/embedded-cluster/install.go

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import (
1212
"strings"
1313
"time"
1414

15+
k0sv1beta1 "github.com/k0sproject/k0sctl/pkg/apis/k0sctl.k0sproject.io/v1beta1"
1516
"github.com/k0sproject/k0sctl/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster"
1617
"github.com/k0sproject/rig"
1718
"github.com/k0sproject/rig/log"
@@ -24,6 +25,7 @@ import (
2425

2526
"github.com/replicatedhq/embedded-cluster/pkg/addons"
2627
"github.com/replicatedhq/embedded-cluster/pkg/config"
28+
"github.com/replicatedhq/embedded-cluster/pkg/customization"
2729
"github.com/replicatedhq/embedded-cluster/pkg/defaults"
2830
"github.com/replicatedhq/embedded-cluster/pkg/goods"
2931
"github.com/replicatedhq/embedded-cluster/pkg/metrics"
@@ -153,18 +155,6 @@ func updateConfig(c *cli.Context) error {
153155
if err != nil {
154156
return fmt.Errorf("unable to read cluster config: %w", err)
155157
}
156-
cfg.Spec.K0s.Version = k0sversion.MustParse(defaults.K0sVersion)
157-
if c.String("overrides") != "" {
158-
eucfg, err := parseEndUserConfig(c.String("overrides"))
159-
if err != nil {
160-
return fmt.Errorf("unable to process overrides file: %w", err)
161-
}
162-
if err := config.ApplyEmbeddedUnsupportedOverrides(
163-
cfg, eucfg.Spec.UnsupportedOverrides.K0s,
164-
); err != nil {
165-
return fmt.Errorf("unable to apply overrides: %w", err)
166-
}
167-
}
168158
opts := []addons.Option{}
169159
if c.Bool("no-prompt") {
170160
opts = append(opts, addons.WithoutPrompt())
@@ -175,6 +165,10 @@ func updateConfig(c *cli.Context) error {
175165
if err := config.UpdateHelmConfigs(cfg, opts...); err != nil {
176166
return fmt.Errorf("unable to update helm configs: %w", err)
177167
}
168+
cfg.Spec.K0s.Version = k0sversion.MustParse(defaults.K0sVersion)
169+
if err := applyUnsupportedOverrides(c, cfg); err != nil {
170+
return fmt.Errorf("unable to apply unsupported overrides: %w", err)
171+
}
178172
fp, err := os.OpenFile(cfgpath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
179173
if err != nil {
180174
return fmt.Errorf("unable to create config file: %w", err)
@@ -186,6 +180,31 @@ func updateConfig(c *cli.Context) error {
186180
return nil
187181
}
188182

183+
// applyUnsupportedOverrides applies overrides to the k0s configuration. Applies first the
184+
// overrides embedded into the binary and after the ones provided by the user (--overrides).
185+
func applyUnsupportedOverrides(c *cli.Context, cfg *k0sv1beta1.Cluster) error {
186+
if embcfg, err := customization.GetEmbeddedClusterConfig(); err != nil {
187+
return fmt.Errorf("unable to get embedded cluster config: %w", err)
188+
} else if embcfg != nil {
189+
overrides := embcfg.Spec.UnsupportedOverrides.K0s
190+
if err := config.ApplyEmbeddedUnsupportedOverrides(cfg, overrides); err != nil {
191+
return fmt.Errorf("unable to apply embedded overrides: %w", err)
192+
}
193+
}
194+
if c.String("overrides") == "" {
195+
return nil
196+
}
197+
eucfg, err := parseEndUserConfig(c.String("overrides"))
198+
if err != nil {
199+
return fmt.Errorf("unable to process overrides file: %w", err)
200+
}
201+
overrides := eucfg.Spec.UnsupportedOverrides.K0s
202+
if err := config.ApplyEmbeddedUnsupportedOverrides(cfg, overrides); err != nil {
203+
return fmt.Errorf("unable to apply overrides: %w", err)
204+
}
205+
return nil
206+
}
207+
189208
// copyUserProvidedConfig copies the user provided configuration to the config dir.
190209
func copyUserProvidedConfig(c *cli.Context) error {
191210
usercfg := c.String("config")
@@ -249,17 +268,6 @@ func ensureK0sctlConfig(c *cli.Context, useprompt bool) error {
249268
if err != nil {
250269
return fmt.Errorf("unable to render config: %w", err)
251270
}
252-
if c.String("overrides") != "" {
253-
eucfg, err := parseEndUserConfig(c.String("overrides"))
254-
if err != nil {
255-
return fmt.Errorf("unable to process overrides file: %w", err)
256-
}
257-
if err := config.ApplyEmbeddedUnsupportedOverrides(
258-
cfg, eucfg.Spec.UnsupportedOverrides.K0s,
259-
); err != nil {
260-
return fmt.Errorf("unable to apply overrides: %w", err)
261-
}
262-
}
263271
opts := []addons.Option{}
264272
if c.Bool("no-prompt") {
265273
opts = append(opts, addons.WithoutPrompt())
@@ -270,6 +278,9 @@ func ensureK0sctlConfig(c *cli.Context, useprompt bool) error {
270278
if err := config.UpdateHelmConfigs(cfg, opts...); err != nil {
271279
return fmt.Errorf("unable to update helm configs: %w", err)
272280
}
281+
if err := applyUnsupportedOverrides(c, cfg); err != nil {
282+
return fmt.Errorf("unable to apply unsupported overrides: %w", err)
283+
}
273284
fp, err := os.OpenFile(cfgpath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
274285
if err != nil {
275286
return fmt.Errorf("unable to create config file: %w", err)

e2e/scripts/unsupported-overrides.sh

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,47 @@ spec:
1818
values:
1919
allowedUnsafeSysctls:
2020
- net.ipv4.ip_forward
21+
extensions:
22+
helm:
23+
charts:
24+
- chartname: openebs/openebs
25+
name: openebs
26+
namespace: openebs
27+
order: 1
28+
values: |
29+
localprovisioner:
30+
hostpathClass:
31+
isDefaultClass: true
32+
ndm:
33+
enabled: false
34+
ndmOperator:
35+
enabled: false
36+
version: 3.10.0
37+
- chartname: oci://registry.replicated.com/library/embedded-cluster-operator
38+
name: embedded-cluster-operator
39+
namespace: embedded-cluster
40+
order: 2
41+
version: 0.13.0
42+
- chartname: oci://registry.replicated.com/library/admin-console
43+
name: admin-console
44+
namespace: embedded-cluster
45+
order: 3
46+
version: 1.105.1
47+
values: |
48+
isHelmManaged: false
49+
kotsApplication: default value
50+
minimalRBAC: false
51+
service:
52+
nodePort: 30000
53+
type: NodePort
54+
- chartname: oci://registry-1.docker.io/bitnamicharts/memcached
55+
name: memcached
56+
namespace: embedded-cluster
57+
order: 4
58+
version: 6.6.2
59+
repositories:
60+
- name: openebs
61+
url: https://openebs.github.io/charts
2162
"
2263

2364
embed_cluster_config() {
@@ -61,6 +102,27 @@ override_applied() {
61102
cat "$K0SCTLCONFIG"
62103
return 1
63104
fi
105+
if ! grep "memcached" "$K0SCTLCONFIG"; then
106+
echo "override not applied, expected memcached helmchart not found, actual config:"
107+
cat "$K0SCTLCONFIG"
108+
return 1
109+
fi
110+
}
111+
112+
wait_for_memcached_pods() {
113+
ready=$(kubectl get pods -n embedded-cluster | grep -c memcached || true)
114+
counter=0
115+
while [ "$ready" -lt "1" ]; do
116+
if [ "$counter" -gt 36 ]; then
117+
return 1
118+
fi
119+
sleep 5
120+
counter=$((counter+1))
121+
echo "Waiting for memcached pods"
122+
ready=$(kubectl get pods -n embedded-cluster | grep -c memcached || true)
123+
kubectl get pods -n embedded-cluster 2>&1 || true
124+
echo "$ready"
125+
done
64126
}
65127

66128
main() {
@@ -79,6 +141,10 @@ main() {
79141
echo "Expected override to be applied"
80142
exit 1
81143
fi
144+
if ! wait_for_memcached_pods; then
145+
echo "Failed waiting for memcached pods"
146+
exit 1
147+
fi
82148
}
83149

84150
export EMBEDDED_CLUSTER_METRICS_BASEURL="https://staging.replicated.app"

pkg/config/config.go

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import (
1919
"github.com/k0sproject/k0sctl/pkg/apis/k0sctl.k0sproject.io/v1beta1"
2020
"github.com/k0sproject/k0sctl/pkg/apis/k0sctl.k0sproject.io/v1beta1/cluster"
2121
k0sversion "github.com/k0sproject/version"
22-
embeddedclusterv1beta1 "github.com/replicatedhq/embedded-cluster-operator/api/v1beta1"
2322
"github.com/sirupsen/logrus"
2423
"gopkg.in/yaml.v2"
2524
k8syaml "sigs.k8s.io/yaml"
@@ -52,33 +51,17 @@ func ReadConfigFile(cfgPath string) (*v1beta1.Cluster, error) {
5251

5352
// RenderClusterConfig renders a cluster configuration interactively.
5453
func RenderClusterConfig(ctx context.Context, multi bool) (*v1beta1.Cluster, error) {
55-
clusterConfig, err := customization.GetEmbeddedClusterConfig()
56-
if err != nil {
57-
return nil, fmt.Errorf("unable to get embedded cluster config: %w", err)
58-
} else if clusterConfig == nil {
59-
clusterConfig = &embeddedclusterv1beta1.Config{}
60-
}
6154
if multi {
6255
cfg, err := renderMultiNodeConfig(ctx)
6356
if err != nil {
6457
return nil, fmt.Errorf("unable to render multi-node config: %w", err)
6558
}
66-
if err := ApplyEmbeddedUnsupportedOverrides(
67-
cfg, clusterConfig.Spec.UnsupportedOverrides.K0s,
68-
); err != nil {
69-
return nil, fmt.Errorf("unable to apply unsupported overrides: %w", err)
70-
}
7159
return cfg, nil
7260
}
7361
cfg, err := renderSingleNodeConfig(ctx)
7462
if err != nil {
7563
return nil, fmt.Errorf("unable to render single-node config: %w", err)
7664
}
77-
if err := ApplyEmbeddedUnsupportedOverrides(
78-
cfg, clusterConfig.Spec.UnsupportedOverrides.K0s,
79-
); err != nil {
80-
return nil, fmt.Errorf("unable to apply unsupported overrides: %w", err)
81-
}
8265
return cfg, nil
8366
}
8467

0 commit comments

Comments
 (0)