Skip to content

Commit 80feaf5

Browse files
feat: fix unsupported overrides and add e2e test (#222)
fix the unsupported overrides feature and adds an e2e test for it.
1 parent 9887df2 commit 80feaf5

File tree

5 files changed

+121
-6
lines changed

5 files changed

+121
-6
lines changed

.github/workflows/e2e.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ jobs:
1717
- TestMultiNodeInteractiveInstallation
1818
- TestInstallWithDisabledAddons
1919
- TestHostPreflight
20+
- TestUnsupportedOverrides
2021
steps:
2122
- name: Move Docker aside
2223
run: |

e2e/kots-release/config.yaml

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@ spec:
1818
name: xyz
1919
unsupportedOverrides:
2020
k0s: |
21-
metadata:
22-
name: foo
23-
spec:
24-
telemetry:
25-
enabled: false
21+
config:
22+
metadata:
23+
name: foo
24+
spec:
25+
telemetry:
26+
enabled: false
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
embedded_cluster_config="
5+
apiVersion: embeddedcluster.replicated.com/v1beta1
6+
kind: Config
7+
spec:
8+
unsupportedOverrides:
9+
k0s: |
10+
config:
11+
metadata:
12+
name: testing-overrides-k0s-name
13+
spec:
14+
telemetry:
15+
enabled: true
16+
"
17+
18+
embed_cluster_config() {
19+
content="$1"
20+
echo "$content" > /root/release.yaml
21+
tar -czvf /root/release.tar.gz /root/release.yaml
22+
objcopy --input-target binary --output-target binary --rename-section .data=sec_bundle /root/release.tar.gz /root/release.o
23+
objcopy --update-section sec_bundle=/root/release.o /usr/local/bin/embedded-cluster
24+
}
25+
26+
wait_for_healthy_node() {
27+
ready=$(kubectl get nodes | grep -v NotReady | grep -c Ready || true)
28+
counter=0
29+
while [ "$ready" -lt "1" ]; do
30+
if [ "$counter" -gt 36 ]; then
31+
return 1
32+
fi
33+
sleep 5
34+
counter=$((counter+1))
35+
echo "Waiting for node to be ready"
36+
ready=$(kubectl get nodes | grep -v NotReady | grep -c Ready || true)
37+
kubectl get nodes || true
38+
done
39+
return 0
40+
}
41+
42+
override_applied() {
43+
grep -A1 telemetry "$K0SCTLCONFIG" > /tmp/telemetry-section
44+
if ! grep -q "enabled: true" /tmp/telemetry-section; then
45+
echo "override not applied, expected telemetry true, actual config:"
46+
cat "$K0SCTLCONFIG"
47+
return 1
48+
fi
49+
if ! grep "testing-overrides-k0s-name" "$K0SCTLCONFIG"; then
50+
echo "override not applied, expected name testing-overrides-k0s-name, actual config:"
51+
cat "$K0SCTLCONFIG"
52+
return 1
53+
fi
54+
}
55+
56+
main() {
57+
cp -Rfp /usr/local/bin/embedded-cluster /usr/local/bin/embedded-cluster-copy
58+
embed_cluster_config "$embedded_cluster_config"
59+
if ! embedded-cluster install --no-prompt 2>&1 | tee /tmp/log ; then
60+
echo "Failed to install embedded-cluster"
61+
cat /tmp/log
62+
exit 1
63+
fi
64+
if ! grep -q "Admin Console is ready!" /tmp/log; then
65+
echo "Failed to install embedded-cluster"
66+
exit 1
67+
fi
68+
if ! override_applied; then
69+
echo "Expected override to be applied"
70+
exit 1
71+
fi
72+
}
73+
74+
export EMBEDDED_CLUSTER_METRICS_BASEURL="https://staging.replicated.app"
75+
export KUBECONFIG=/root/.config/.embedded-cluster/etc/kubeconfig
76+
export K0SCTLCONFIG=/root/.config/.embedded-cluster/etc/k0sctl.yaml
77+
export PATH=$PATH:/root/.config/.embedded-cluster/bin
78+
main

e2e/unsupported-overrides_test.go

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package e2e
2+
3+
import (
4+
"testing"
5+
6+
"github.com/replicatedhq/embedded-cluster/e2e/cluster"
7+
)
8+
9+
func TestUnsupportedOverrides(t *testing.T) {
10+
t.Parallel()
11+
tc := cluster.NewTestCluster(&cluster.Input{
12+
T: t,
13+
Nodes: 1,
14+
Image: "ubuntu/jammy",
15+
SSHPublicKey: "../output/tmp/id_rsa.pub",
16+
SSHPrivateKey: "../output/tmp/id_rsa",
17+
EmbeddedClusterPath: "../output/bin/embedded-cluster",
18+
})
19+
defer tc.Destroy()
20+
t.Log("installing dependencies on node 0")
21+
commands := [][]string{
22+
{"apt-get", "update", "-y"},
23+
{"apt-get", "install", "openssh-server", "binutils", "-y"},
24+
}
25+
if err := RunCommandsOnNode(t, tc, 0, commands); err != nil {
26+
t.Fatalf("fail to install ssh on node %s: %v", tc.Nodes[0], err)
27+
}
28+
t.Log("installing embedded-cluster with unsupported overrides on node 0")
29+
line := []string{"unsupported-overrides.sh"}
30+
if stdout, stderr, err := RunCommandOnNode(t, tc, 0, line); err != nil {
31+
t.Log(stdout)
32+
t.Log(stderr)
33+
t.Fatalf("fail to install embedded-cluster on node %s: %v", tc.Nodes[0], err)
34+
}
35+
}

pkg/config/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ func RenderClusterConfig(ctx context.Context, multi bool) (*v1beta1.Cluster, err
7171
return nil, fmt.Errorf("unable to render single-node config: %w", err)
7272
}
7373
ApplyEmbeddedUnsupportedOverrides(cfg, clusterConfig.Spec.UnsupportedOverrides.K0s)
74-
return renderSingleNodeConfig(ctx)
74+
return cfg, nil
7575
}
7676

7777
// listUserSSHKeys returns a list of private SSH keys in the user's ~/.ssh directory.

0 commit comments

Comments
 (0)