diff --git a/docs/kplane-cli-design.md b/docs/kplane-cli-design.md index 5680228..643d072 100644 --- a/docs/kplane-cli-design.md +++ b/docs/kplane-cli-design.md @@ -36,7 +36,7 @@ kplane up --provider kind --cluster-name kplane-management --namespace kplane-system - --apiserver-image docker.io/kplanedev/apiserver:v0.0.6 + --apiserver-image docker.io/kplanedev/apiserver:v0.0.7 --operator-image docker.io/kplanedev/controlplane-operator:v0.0.3 --etcd-image quay.io/coreos/etcd:v3.5.13 --install-crds @@ -192,7 +192,7 @@ profiles: kubeconfigPath: ~/.kube/config stackVersion: latest images: - apiserver: docker.io/kplanedev/apiserver:v0.0.6 + apiserver: docker.io/kplanedev/apiserver:v0.0.7 operator: docker.io/kplanedev/controlplane-operator:v0.0.3 etcd: quay.io/coreos/etcd:v3.5.13 auth: diff --git a/internal/cli/root.go b/internal/cli/root.go index 9b3192f..f002d23 100644 --- a/internal/cli/root.go +++ b/internal/cli/root.go @@ -43,6 +43,14 @@ func loadConfig() (config.Config, error) { return config.Config{}, err } + updated, changed := config.ApplyDefaultImageUpgrades(cfg) + if changed { + if err := config.Save(path, updated); err != nil { + return config.Config{}, err + } + cfg = updated + } + return cfg, nil } diff --git a/internal/config/config.go b/internal/config/config.go index 7c09d86..5fed8aa 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -77,7 +77,7 @@ func Default() Config { StackVersion: "latest", CRDSource: "https://github.com/kplane-dev/controlplane-operator//config/crd?ref=main", Images: Images{ - Apiserver: "docker.io/kplanedev/apiserver:v0.0.6", + Apiserver: "docker.io/kplanedev/apiserver:v0.0.7", Operator: "docker.io/kplanedev/controlplane-operator:v0.0.3", Etcd: "quay.io/coreos/etcd:v3.5.13", }, @@ -168,3 +168,43 @@ func userHomeDir() string { } return os.Getenv("HOME") } + +func ApplyDefaultImageUpgrades(cfg Config) (Config, bool) { + defaultProfile := Default().Profiles["default"] + changed := false + for name, profile := range cfg.Profiles { + updated := profile + updated.Images.Apiserver = upgradeApiserverImage(profile.Images.Apiserver, defaultProfile.Images.Apiserver) + if updated.Images.Apiserver != profile.Images.Apiserver { + changed = true + } + cfg.Profiles[name] = updated + } + return cfg, changed +} + +func upgradeApiserverImage(current, latest string) string { + if current == "" { + return latest + } + if isDefaultApiserverImage(current) { + return latest + } + return current +} + +func isDefaultApiserverImage(image string) bool { + switch image { + case + "docker.io/kplanedev/apiserver:v0.0.1", + "docker.io/kplanedev/apiserver:v0.0.2", + "docker.io/kplanedev/apiserver:v0.0.3", + "docker.io/kplanedev/apiserver:v0.0.4", + "docker.io/kplanedev/apiserver:v0.0.5", + "docker.io/kplanedev/apiserver:v0.0.6", + "docker.io/kplanedev/apiserver:v0.0.7": + return true + default: + return false + } +}