@@ -2,11 +2,13 @@ package config
2
2
3
3
import (
4
4
"embed"
5
+ "os"
5
6
"path/filepath"
6
7
"strings"
7
8
"testing"
8
9
9
10
k0sconfig "github.com/k0sproject/k0s/pkg/apis/k0s/v1beta1"
11
+ "github.com/replicatedhq/embedded-cluster/pkg/release"
10
12
"github.com/replicatedhq/embedded-cluster/pkg/runtimeconfig"
11
13
"github.com/stretchr/testify/assert"
12
14
"github.com/stretchr/testify/require"
@@ -101,3 +103,122 @@ func TestRenderK0sConfig(t *testing.T) {
101
103
assert .Equal (t , DefaultServiceNodePortRange , cfg .Spec .API .ExtraArgs ["service-node-port-range" ])
102
104
assert .Contains (t , cfg .Spec .API .SANs , "kubernetes.default.svc.cluster.local" )
103
105
}
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