From 15a926ad3b82b68c6ac89f29da3f0004ee509293 Mon Sep 17 00:00:00 2001 From: Dimitris Karakasilis Date: Thu, 28 Sep 2023 15:55:14 +0300 Subject: [PATCH] Handle `--source` in install/manual-install/interactive-install the same way Signed-off-by: Dimitris Karakasilis --- internal/agent/install.go | 58 +++++++++++++-------------- internal/agent/interactive_install.go | 10 +++-- internal/agent/upgrade.go | 6 +-- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/internal/agent/install.go b/internal/agent/install.go index d2c99d0..3c23108 100644 --- a/internal/agent/install.go +++ b/internal/agent/install.go @@ -62,7 +62,12 @@ func ManualInstall(c, sourceImg, device string, reboot, poweroff, strictValidati return err } - cc, err := config.Scan(collector.Directories(ConfigSource), collector.MergeBootLine, collector.StrictValidation(strictValidations), collector.NoLogs) + cliConf := generateInstallConfForCLIArgs(sourceImg) + + cc, err := config.Scan(collector.Directories(ConfigSource), + collector.Readers(strings.NewReader(cliConf)), + collector.MergeBootLine, + collector.StrictValidation(strictValidations), collector.NoLogs) if err != nil { return err } @@ -80,7 +85,7 @@ func ManualInstall(c, sourceImg, device string, reboot, poweroff, strictValidati // Override from flags! cc.Install.Device = device } - return RunInstall(cc, sourceImg) + return RunInstall(cc) } func Install(sourceImg string, dir ...string) error { @@ -116,11 +121,14 @@ func Install(sourceImg string, dir ...string) error { ensureDataSourceReady() - // Reads config, and if present and offline is defined, - // runs the installation - cc, err = config.Scan(collector.Directories(dir...), collector.MergeBootLine) + cliConf := generateInstallConfForCLIArgs(sourceImg) + + // Reads config, and if present and offline is defined, runs the installation + cc, err = config.Scan(collector.Directories(dir...), + collector.Readers(strings.NewReader(cliConf)), + collector.MergeBootLine) if err == nil && cc.Install != nil && cc.Install.Auto { - err = RunInstall(cc, sourceImg) + err = RunInstall(cc) if err != nil { return err } @@ -184,7 +192,7 @@ func Install(sourceImg string, dir ...string) error { pterm.Info.Println("Starting installation") cc.Logger.Debugf("Runinstall with cc: %s\n", litter.Sdump(cc)) - if err := RunInstall(cc, sourceImg); err != nil { + if err := RunInstall(cc); err != nil { return err } @@ -213,7 +221,7 @@ func Install(sourceImg string, dir ...string) error { return nil } -func RunInstall(c *config.Config, sourceImg string) error { +func RunInstall(c *config.Config) error { utils.SetEnv(c.Env) utils.SetEnv(c.Install.Env) @@ -250,28 +258,7 @@ func RunInstall(c *config.Config, sourceImg string) error { // Set our cloud-init to the file we just created installSpec.CloudInit = append(installSpec.CloudInit, f.Name()) // Get the source of the installation if we are overriding it - if sourceImg != "" { - imgSource, err := v1.NewSrcFromURI(sourceImg) - if err != nil { - return err - } - installSpec.Active.Source = imgSource - - // TODO: Why only setting active source above? What about size? - // TODO: These 2 blocks are identical, DRY them. - - // size, err := GetSourceSize(cfg, imgSource) - // if err != nil { - // c.Logger.Warnf("Failed to infer size for images: %s", err.Error()) - // } - - // installSpec.Active.Source = imgSource - // installSpec.Passive.Source = imgSource - // installSpec.Recovery.Source = imgSource - // installSpec.Active.Size = uint(size) - // installSpec.Passive.Size = uint(size) - // installSpec.Recovery.Size = uint(size) - } else if c.Install.Image != "" { + if c.Install.Image != "" { imgSource, err := v1.NewSrcFromURI(c.Install.Image) if err != nil { return err @@ -352,3 +339,14 @@ func prepareConfiguration(ctx context.Context, source string) (string, error) { return f.Name(), nil } + +func generateInstallConfForCLIArgs(source string) string { + if source == "" { + return "" + } + + return fmt.Sprintf(`install: +system: +uri: %s +`, source) +} diff --git a/internal/agent/interactive_install.go b/internal/agent/interactive_install.go index 8b65b94..67c6fc7 100644 --- a/internal/agent/interactive_install.go +++ b/internal/agent/interactive_install.go @@ -282,9 +282,11 @@ func InteractiveInstall(debug, spawnShell bool, sourceImg string) error { if err != nil { fmt.Printf("could not write event cloud init: %s\n", err.Error()) } - // override cc with our new config object from the scan, so it's updated for the RunInstall function - // TODO: Alternative solution: pass a reader here (the new feature) and add the image source - cc, _ = config.Scan(collector.Directories(tmpdir), collector.MergeBootLine, collector.NoLogs) + + cliConf := generateInstallConfForCLIArgs(sourceImg) + cc, _ = config.Scan(collector.Directories(tmpdir), + collector.Readers(strings.NewReader(cliConf)), + collector.MergeBootLine, collector.NoLogs) } pterm.Info.Println("Starting installation") @@ -292,7 +294,7 @@ func InteractiveInstall(debug, spawnShell bool, sourceImg string) error { ccString, _ := cc.String() pterm.Info.Println(ccString) - err = RunInstall(cc, sourceImg) + err = RunInstall(cc) if err != nil { pterm.Error.Println(err.Error()) } diff --git a/internal/agent/upgrade.go b/internal/agent/upgrade.go index 7c0907a..e95eaf8 100644 --- a/internal/agent/upgrade.go +++ b/internal/agent/upgrade.go @@ -110,9 +110,9 @@ func determineUpgradeImage(version string) (*v1.ImageSource, error) { return v1.NewSrcFromURI(fmt.Sprintf("%s:%s", registry, version)) } -// generateConfForCLIArgs creates a kairos configuration for `--source` and `--recovery` +// generateUpgradeConfForCLIArgs creates a kairos configuration for `--source` and `--recovery` // command line arguments. It will be added to the rest of the configurations. -func generateConfForCLIArgs(source string, upgradeRecovery bool) (string, error) { +func generateUpgradeConfForCLIArgs(source string, upgradeRecovery bool) (string, error) { upgrade := map[string](map[string]interface{}){ "upgrade": {}, } @@ -198,7 +198,7 @@ func findLatestVersion(preReleases, force bool) (string, error) { } func generateUpgradeSpec(version, source string, force, strictValidations bool, dirs []string, preReleases, upgradeRecovery bool) (*v1.UpgradeSpec, *config.Config, error) { - cliConf, err := generateConfForCLIArgs(source, upgradeRecovery) + cliConf, err := generateUpgradeConfForCLIArgs(source, upgradeRecovery) if err != nil { return nil, nil, err }