Skip to content

Commit c0663d4

Browse files
[bug] don't set profiles flag if no profiles (#2086)
* don't set profiles flag if no profiles * no worker profiles for stable test * Revert "no worker profiles for stable test" This reverts commit f593470. * no worker profiles for overrides tests * remove ip-forward profile check from unsupported overrides test * add unit test for flag generation function, covering both with and without profile flags --------- Co-authored-by: Andrew Lavery <[email protected]>
1 parent cdb5f10 commit c0663d4

File tree

4 files changed

+136
-12
lines changed

4 files changed

+136
-12
lines changed

e2e/kots-release-unsupported-overrides/cluster-config.yaml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,3 @@ spec:
2727
spec:
2828
telemetry:
2929
enabled: true
30-
workerProfiles:
31-
- name: ip-forward
32-
values:
33-
allowedUnsafeSysctls:
34-
- net.ipv4.ip_forward

e2e/scripts/unsupported-overrides.sh

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,6 @@ override_applied() {
1616
cat "$K0SCONFIG"
1717
return 1
1818
fi
19-
if ! grep "net.ipv4.ip_forward" "$K0SCONFIG"; then
20-
echo "override not applied, expected worker profile not found, actual config:"
21-
cat "$K0SCONFIG"
22-
return 1
23-
fi
2419
}
2520

2621
main() {

pkg/config/config.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ const (
2121
DefaultVendorChartOrder = 10
2222
)
2323

24+
// k0sConfigPathOverride is used during tests to override the path to the k0s config file.
25+
var k0sConfigPathOverride string
26+
2427
// RenderK0sConfig renders a k0s cluster configuration.
2528
func RenderK0sConfig(proxyRegistryDomain string) *k0sconfig.ClusterConfig {
2629
cfg := k0sconfig.DefaultClusterConfig()
@@ -109,7 +112,9 @@ func InstallFlags(nodeIP string) ([]string, error) {
109112
if err != nil {
110113
return nil, fmt.Errorf("unable to get profile install flag: %w", err)
111114
}
112-
flags = append(flags, profile)
115+
if profile != "" {
116+
flags = append(flags, profile)
117+
}
113118
flags = append(flags, AdditionalInstallFlags(nodeIP)...)
114119
flags = append(flags, AdditionalInstallFlagsController()...)
115120
return flags, nil
@@ -136,6 +141,9 @@ func ProfileInstallFlag() (string, error) {
136141
if err != nil {
137142
return "", fmt.Errorf("unable to get controller worker profile: %w", err)
138143
}
144+
if controllerProfile == "" {
145+
return "", nil
146+
}
139147
return "--profile=" + controllerProfile, nil
140148
}
141149

@@ -184,7 +192,12 @@ func additionalControllerLabels() map[string]string {
184192

185193
func controllerWorkerProfile() (string, error) {
186194
// Read the k0s config file
187-
data, err := os.ReadFile(runtimeconfig.PathToK0sConfig())
195+
k0sPath := runtimeconfig.PathToK0sConfig()
196+
if k0sConfigPathOverride != "" {
197+
k0sPath = k0sConfigPathOverride
198+
}
199+
200+
data, err := os.ReadFile(k0sPath)
188201
if err != nil {
189202
return "", fmt.Errorf("unable to read k0s config: %w", err)
190203
}

pkg/config/config_test.go

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ package config
22

33
import (
44
"embed"
5+
"os"
56
"path/filepath"
67
"strings"
78
"testing"
89

910
k0sconfig "github.com/k0sproject/k0s/pkg/apis/k0s/v1beta1"
11+
"github.com/replicatedhq/embedded-cluster/pkg/release"
1012
"github.com/replicatedhq/embedded-cluster/pkg/runtimeconfig"
1113
"github.com/stretchr/testify/assert"
1214
"github.com/stretchr/testify/require"
@@ -101,3 +103,122 @@ func TestRenderK0sConfig(t *testing.T) {
101103
assert.Equal(t, DefaultServiceNodePortRange, cfg.Spec.API.ExtraArgs["service-node-port-range"])
102104
assert.Contains(t, cfg.Spec.API.SANs, "kubernetes.default.svc.cluster.local")
103105
}
106+
107+
func TestInstallFlags(t *testing.T) {
108+
// Create a pair of temporary k0s config files
109+
k0sCfg := k0sconfig.DefaultClusterConfig()
110+
k0sDefaultConfigBytes, err := k8syaml.Marshal(k0sCfg)
111+
require.NoError(t, err)
112+
113+
defaultTmpFile, err := os.CreateTemp("", "k0s-*.yaml")
114+
require.NoError(t, err)
115+
defer os.Remove(defaultTmpFile.Name())
116+
117+
err = os.WriteFile(defaultTmpFile.Name(), k0sDefaultConfigBytes, 0644)
118+
require.NoError(t, err)
119+
120+
k0sCfg.Spec.WorkerProfiles = []k0sconfig.WorkerProfile{
121+
{
122+
Name: "test-profile",
123+
},
124+
}
125+
k0sProfileConfigBytes, err := k8syaml.Marshal(k0sCfg)
126+
require.NoError(t, err)
127+
128+
profileTmpFile, err := os.CreateTemp("", "k0s-*.yaml")
129+
require.NoError(t, err)
130+
defer os.Remove(profileTmpFile.Name())
131+
132+
err = os.WriteFile(profileTmpFile.Name(), k0sProfileConfigBytes, 0644)
133+
require.NoError(t, err)
134+
135+
tests := []struct {
136+
name string
137+
nodeIP string
138+
releaseData map[string][]byte
139+
expectedFlags []string
140+
expectedError bool
141+
expectedErrMsg string
142+
k0sConfigPath string
143+
}{
144+
{
145+
name: "default configuration",
146+
nodeIP: "192.168.1.10",
147+
k0sConfigPath: defaultTmpFile.Name(),
148+
releaseData: map[string][]byte{},
149+
expectedFlags: []string{
150+
"install",
151+
"controller",
152+
"--labels", "kots.io/embedded-cluster-role-0=controller,kots.io/embedded-cluster-role=total-1",
153+
"--enable-worker",
154+
"--no-taints",
155+
"-c", runtimeconfig.PathToK0sConfig(),
156+
"--kubelet-extra-args", "--node-ip=192.168.1.10",
157+
"--data-dir", runtimeconfig.EmbeddedClusterK0sSubDir(),
158+
"--disable-components", "konnectivity-server",
159+
"--enable-dynamic-config",
160+
},
161+
expectedError: false,
162+
},
163+
{
164+
name: "custom controller role name with worker profile",
165+
nodeIP: "192.168.1.10",
166+
k0sConfigPath: profileTmpFile.Name(),
167+
releaseData: map[string][]byte{
168+
"cluster-config.yaml": []byte(`
169+
apiVersion: embeddedcluster.replicated.com/v1beta1
170+
kind: Config
171+
metadata:
172+
name: embedded-cluster
173+
spec:
174+
roles:
175+
controller:
176+
name: custom-controller
177+
labels:
178+
environment: test
179+
`),
180+
},
181+
expectedFlags: []string{
182+
"install",
183+
"controller",
184+
"--labels", "environment=test,kots.io/embedded-cluster-role-0=custom-controller,kots.io/embedded-cluster-role=total-1",
185+
"--enable-worker",
186+
"--no-taints",
187+
"-c", runtimeconfig.PathToK0sConfig(),
188+
"--profile=test-profile",
189+
"--kubelet-extra-args", "--node-ip=192.168.1.10",
190+
"--data-dir", runtimeconfig.EmbeddedClusterK0sSubDir(),
191+
"--disable-components", "konnectivity-server",
192+
"--enable-dynamic-config",
193+
},
194+
expectedError: false,
195+
},
196+
}
197+
198+
for _, tt := range tests {
199+
t.Run(tt.name, func(t *testing.T) {
200+
// Setup test data
201+
err := release.SetReleaseDataForTests(tt.releaseData)
202+
require.NoError(t, err)
203+
204+
// Set the override for the k0s config path
205+
k0sConfigPathOverride = tt.k0sConfigPath
206+
207+
// Cleanup after test
208+
t.Cleanup(func() {
209+
release.SetReleaseDataForTests(nil)
210+
k0sConfigPathOverride = ""
211+
})
212+
213+
// Run test
214+
flags, err := InstallFlags(tt.nodeIP)
215+
if tt.expectedError {
216+
require.Error(t, err)
217+
assert.Contains(t, err.Error(), tt.expectedErrMsg)
218+
} else {
219+
require.NoError(t, err)
220+
assert.Equal(t, tt.expectedFlags, flags)
221+
}
222+
})
223+
}
224+
}

0 commit comments

Comments
 (0)