66 "fmt"
77 "os"
88
9+ k0sconfig "github.com/k0sproject/k0s/pkg/apis/k0s/v1beta1"
910 ecv1beta1 "github.com/replicatedhq/embedded-cluster/kinds/apis/v1beta1"
1011 "github.com/replicatedhq/embedded-cluster/pkg/configutils"
1112 "github.com/replicatedhq/embedded-cluster/pkg/helpers"
@@ -15,6 +16,7 @@ import (
1516 "github.com/replicatedhq/embedded-cluster/pkg/prompts"
1617 "github.com/replicatedhq/embedded-cluster/pkg/release"
1718 "github.com/replicatedhq/embedded-cluster/pkg/runtimeconfig"
19+ "github.com/replicatedhq/embedded-cluster/pkg/spinner"
1820 kotsv1beta1 "github.com/replicatedhq/kotskinds/apis/kots/v1beta1"
1921 "github.com/sirupsen/logrus"
2022 "github.com/spf13/cobra"
@@ -156,7 +158,7 @@ func runInstall2(cmd *cobra.Command, args []string, name string, flags Install2C
156158
157159 logrus .Debugf ("materializing binaries" )
158160 if err := materializeFiles (flags .airgapBundle ); err != nil {
159- metrics .ReportApplyFinished (cmd .Context (), flags .licenseFile , err )
161+ metrics .ReportApplyFinished (cmd .Context (), "" , flags .license , err )
160162 return err
161163 }
162164
@@ -175,13 +177,17 @@ func runInstall2(cmd *cobra.Command, args []string, name string, flags Install2C
175177 return fmt .Errorf ("unable to configure network manager: %w" , err )
176178 }
177179
178- if err := k0s .Install (flags .networkInterface ); err != nil {
179- return fmt .Errorf ("unable to install cluster: %w" , err )
180+ clusterConfig , err := installAndStartCluster (cmd .Context (), flags .networkInterface , flags .airgapBundle , flags .license , flags .proxy , flags .podCIDR , flags .serviceCIDR , flags .overrides )
181+ if err != nil {
182+ metrics .ReportApplyFinished (cmd .Context (), "" , flags .license , err )
183+ return err
180184 }
181185
186+ fmt .Printf ("%#v\n " , clusterConfig )
187+
182188 logrus .Debugf ("installing manager" )
183189 if err := installAndEnableManager (); err != nil {
184- metrics .ReportApplyFinished (cmd .Context (), flags .licenseFile , err )
190+ metrics .ReportApplyFinished (cmd .Context (), "" , flags .license , err )
185191 return err
186192 }
187193
@@ -221,7 +227,7 @@ func runInstallVerifyAndPrompt(ctx context.Context, name string, flags *Install2
221227 license , err := getLicenseFromFilepath (flags .licenseFile )
222228 if err != nil {
223229 metricErr := fmt .Errorf ("unable to get license: %w" , err )
224- metrics .ReportApplyFinished (ctx , flags .licenseFile , metricErr )
230+ metrics .ReportApplyFinished (ctx , "" , flags .license , metricErr )
225231 return err // do not return the metricErr, as we want the user to see the error message without a prefix
226232 }
227233 isAirgap := false
@@ -238,7 +244,7 @@ func runInstallVerifyAndPrompt(ctx context.Context, name string, flags *Install2
238244 if ! isAirgap {
239245 if err := maybePromptForAppUpdate (ctx , prompts .New (), license , flags .assumeYes ); err != nil {
240246 if errors .Is (err , ErrNothingElseToAdd ) {
241- metrics .ReportApplyFinished (ctx , flags .licenseFile , err )
247+ metrics .ReportApplyFinished (ctx , "" , flags .license , err )
242248 return err
243249 }
244250 // If we get an error other than ErrNothingElseToAdd, we warn and continue as
@@ -248,7 +254,7 @@ func runInstallVerifyAndPrompt(ctx context.Context, name string, flags *Install2
248254 }
249255
250256 if err := preflights .ValidateApp (); err != nil {
251- metrics .ReportApplyFinished (ctx , flags .licenseFile , err )
257+ metrics .ReportApplyFinished (ctx , "" , flags .license , err )
252258 return err
253259 }
254260
@@ -269,13 +275,14 @@ func runInstallVerifyAndPrompt(ctx context.Context, name string, flags *Install2
269275
270276 if validateAdminConsolePassword (promptA , promptB ) {
271277 flags .adminConsolePassword = promptA
278+ break
272279 }
273280 }
274281 }
275282 }
276283 if flags .adminConsolePassword == "" {
277284 err := fmt .Errorf ("no admin console password" )
278- metrics .ReportApplyFinished (ctx , flags .licenseFile , err )
285+ metrics .ReportApplyFinished (ctx , "" , flags .license , err )
279286 return err
280287 }
281288
@@ -295,3 +302,40 @@ func runInstallPreflights(ctx context.Context, license *kotsv1beta1.License, pro
295302
296303 return nil
297304}
305+
306+ func installAndStartCluster (ctx context.Context , networkInterface string , airgapBundle string , license * kotsv1beta1.License , proxy * ecv1beta1.ProxySpec , podCIDR string , serviceCIDR string , overrides string ) (* k0sconfig.ClusterConfig , error ) {
307+ loading := spinner .Start ()
308+ defer loading .Close ()
309+ loading .Infof ("Installing %s node" , runtimeconfig .BinaryName ())
310+ logrus .Debugf ("creating k0s configuration file" )
311+
312+ cfg , err := k0s .WriteK0sConfig (ctx , networkInterface , airgapBundle , podCIDR , serviceCIDR , overrides )
313+ if err != nil {
314+ err := fmt .Errorf ("unable to create config file: %w" , err )
315+ metrics .ReportApplyFinished (ctx , "" , license , err )
316+ return nil , err
317+ }
318+ logrus .Debugf ("creating systemd unit files" )
319+ if err := createSystemdUnitFiles (false , proxy ); err != nil {
320+ err := fmt .Errorf ("unable to create systemd unit files: %w" , err )
321+ metrics .ReportApplyFinished (ctx , "" , license , err )
322+ return nil , err
323+ }
324+
325+ logrus .Debugf ("installing k0s" )
326+ if err := k0s .Install (networkInterface ); err != nil {
327+ err := fmt .Errorf ("unable to install cluster: %w" , err )
328+ metrics .ReportApplyFinished (ctx , "" , license , err )
329+ return nil , err
330+ }
331+ loading .Infof ("Waiting for %s node to be ready" , runtimeconfig .BinaryName ())
332+ logrus .Debugf ("waiting for k0s to be ready" )
333+ if err := waitForK0s (); err != nil {
334+ err := fmt .Errorf ("unable to wait for node: %w" , err )
335+ metrics .ReportApplyFinished (ctx , "" , license , err )
336+ return nil , err
337+ }
338+
339+ loading .Infof ("Node installation finished!" )
340+ return cfg , nil
341+ }
0 commit comments