diff --git a/internal/agent/install_test.go b/internal/agent/install_test.go index a7321f6..b5fdd79 100644 --- a/internal/agent/install_test.go +++ b/internal/agent/install_test.go @@ -3,13 +3,14 @@ package agent import ( "context" "fmt" - "github.com/jaypipes/ghw/pkg/block" - "github.com/kairos-io/kairos-agent/v2/pkg/constants" "os" "path/filepath" + "github.com/jaypipes/ghw/pkg/block" + "github.com/kairos-io/kairos-agent/v2/pkg/constants" + "github.com/kairos-io/kairos-agent/v2/pkg/config" - "github.com/kairos-io/kairos-agent/v2/pkg/utils/fs" + fsutils "github.com/kairos-io/kairos-agent/v2/pkg/utils/fs" v1mock "github.com/kairos-io/kairos-agent/v2/tests/mocks" "github.com/twpayne/go-vfs" "github.com/twpayne/go-vfs/vfst" @@ -196,7 +197,7 @@ var _ = Describe("RunInstall", func() { It("runs the install", func() { Skip("Not ready yet") - err = RunInstall(options) + err = RunInstall(options, "") // TODO Expect(err).ToNot(HaveOccurred()) }) }) diff --git a/internal/agent/upgrade.go b/internal/agent/upgrade.go index 4c6d5db..7c0907a 100644 --- a/internal/agent/upgrade.go +++ b/internal/agent/upgrade.go @@ -60,6 +60,11 @@ func Upgrade( return err } + err = upgradeSpec.Sanitize() + if err != nil { + return err + } + upgradeAction := action.NewUpgradeAction(c, upgradeSpec) err = upgradeAction.Run() @@ -105,9 +110,9 @@ func determineUpgradeImage(version string) (*v1.ImageSource, error) { return v1.NewSrcFromURI(fmt.Sprintf("%s:%s", registry, version)) } -// generateUpgradeConf creates a kairos configuration for `--source` and `--recovery` +// generateConfForCLIArgs creates a kairos configuration for `--source` and `--recovery` // command line arguments. It will be added to the rest of the configurations. -func generateUpgradeConf(source string, upgradeRecovery bool) (string, error) { +func generateConfForCLIArgs(source string, upgradeRecovery bool) (string, error) { upgrade := map[string](map[string]interface{}){ "upgrade": {}, } @@ -193,13 +198,13 @@ 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) { - upgradeConf, err := generateUpgradeConf(source, upgradeRecovery) + cliConf, err := generateConfForCLIArgs(source, upgradeRecovery) if err != nil { return nil, nil, err } c, err := config.Scan(collector.Directories(dirs...), - collector.Readers(strings.NewReader(upgradeConf)), + collector.Readers(strings.NewReader(cliConf)), collector.StrictValidation(strictValidations)) if err != nil { return nil, nil, err @@ -218,11 +223,5 @@ func generateUpgradeSpec(version, source string, force, strictValidations bool, return nil, nil, err } - // Sanitize - err = upgradeSpec.Sanitize() - if err != nil { - return nil, nil, err - } - return upgradeSpec, c, nil } diff --git a/internal/agent/upgrade_test.go b/internal/agent/upgrade_test.go new file mode 100644 index 0000000..ffa4da8 --- /dev/null +++ b/internal/agent/upgrade_test.go @@ -0,0 +1,47 @@ +package agent + +import ( + "fmt" + "os" + "path" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var _ = Describe("generateUpgradeSpec", func() { + When("there are command line arguments", func() { + var configDir string + var upgradeRecovery bool + + BeforeEach(func() { + upgradeRecovery = false + configDir, err := os.MkdirTemp("", "upgrade-test") + Expect(err).ToNot(HaveOccurred()) + + config := fmt.Sprintf(`upgrade: + recovery: %t + recovery-system: + uri: oci://image-in-conf +`, upgradeRecovery) + + configFilePath := path.Join(configDir, "config.yaml") + err = os.WriteFile(configFilePath, []byte(config), os.ModePerm) + Expect(err).ToNot(HaveOccurred()) + }) + + AfterEach(func() { + os.RemoveAll(configDir) + }) + + It("overrides kairos config yaml values", func() { + spec, _, err := generateUpgradeSpec("", "oci:myimage", false, false, + []string{}, false, !upgradeRecovery) + + Expect(err).ToNot(HaveOccurred()) + Expect(spec.Active.Source.String()).To(Equal("oci://myimage:latest")) + Expect(spec.Recovery.Source.String()).To(Equal("oci://myimage:latest")) + Expect(spec.RecoveryUpgrade).To(Equal(!upgradeRecovery)) + }) + }) +}) diff --git a/pkg/config/spec.go b/pkg/config/spec.go index cda731d..261c723 100644 --- a/pkg/config/spec.go +++ b/pkg/config/spec.go @@ -544,8 +544,6 @@ func ReadUpgradeSpecFromConfig(c *Config) (*v1.UpgradeSpec, error) { // ReadSpecFromCloudConfig returns a v1.Spec for the given spec func ReadSpecFromCloudConfig(r *Config, spec string) (v1.Spec, error) { - fmt.Printf("litter.Sdump(r) before = %+v\n", litter.Sdump(r)) - var sp v1.Spec var err error @@ -563,8 +561,6 @@ func ReadSpecFromCloudConfig(r *Config, spec string) (v1.Spec, error) { return nil, fmt.Errorf("failed initializing spec: %v", err) } - fmt.Printf("litter.Sdump(sp) before = %+v\n", litter.Sdump(sp)) - // Load the config into viper from the raw cloud config string ccString, err := r.String() if err != nil { @@ -582,10 +578,6 @@ func ReadSpecFromCloudConfig(r *Config, spec string) (v1.Spec, error) { r.Logger.Warnf("error unmarshalling %s Spec: %s", spec, err) } - fmt.Println("---------------------------------") - fmt.Printf("litter.Sdump(sp) after = %+v\n", litter.Sdump(sp)) - fmt.Println("---------------------------------") - r.Logger.Debugf("Loaded %s spec: %s", spec, litter.Sdump(sp)) return sp, nil }