diff --git a/pkg/cli/install/install.go b/pkg/cli/install/install.go index ab71fdea6..fe737aabe 100644 --- a/pkg/cli/install/install.go +++ b/pkg/cli/install/install.go @@ -230,12 +230,28 @@ func (o *Install) setVersionInfo(ctx context.Context) error { if err != nil { return err } + + supVer, err := common.NewSupportedVersion(latestMeta) + if err != nil { + return err + } + if err := o.checkRequirements(supVer); err != nil { + return err + } + o.l.Debugf("Everest latest version available: %s", latest) o.l.Debugf("Everest version information %#v", latestMeta) o.installVersion = latest.String() return nil } +func (o *Install) checkRequirements(supVer *common.SupportedVersion) error { + if err := cliutils.VerifyCLIVersion(supVer); err != nil { + return err + } + return nil +} + func (o *Install) setupHelmInstaller(ctx context.Context) error { nsExists, err := o.namespaceExists(ctx, common.SystemNamespace) if err != nil { diff --git a/pkg/cli/upgrade/upgrade.go b/pkg/cli/upgrade/upgrade.go index a278fe5e2..680fbb68b 100644 --- a/pkg/cli/upgrade/upgrade.go +++ b/pkg/cli/upgrade/upgrade.go @@ -377,25 +377,9 @@ func (u *Upgrade) verifyRequirements(ctx context.Context, meta *version.Metadata func (u *Upgrade) checkRequirements(ctx context.Context, supVer *common.SupportedVersion) error { // TODO: olm, catalog to be implemented. - // cli version check. - if cliVersion.Version != "" { - u.l.Infof("Checking cli version requirements") - cli, err := goversion.NewVersion(cliVersion.Version) - if err != nil { - return errors.Join(err, fmt.Errorf("invalid cli version %s", cliVersion.Version)) - } - - if !supVer.Cli.Check(cli.Core()) { - return fmt.Errorf( - "cli version %q does not meet minimum requirements of %q", - cli, supVer.Cli.String(), - ) - } - u.l.Debugf("cli version %q meets requirements %q", cli, supVer.Cli.String()) - } else { - u.l.Debug("cli version is empty") + if err := cliutils.VerifyCLIVersion(supVer); err != nil { + return err } - // Operator version check. if err := u.checkOperatorRequirements(ctx, supVer); err != nil { return err diff --git a/pkg/cli/utils/utils.go b/pkg/cli/utils/utils.go index 740bee75c..3e4febeb1 100644 --- a/pkg/cli/utils/utils.go +++ b/pkg/cli/utils/utils.go @@ -4,9 +4,11 @@ package utils import ( "context" "errors" + "fmt" "net/url" "path" + goversion "github.com/hashicorp/go-version" "go.uber.org/zap" k8serrors "k8s.io/apimachinery/pkg/api/errors" @@ -61,3 +63,21 @@ func NewKubeclient(l *zap.SugaredLogger, kubeconfigPath string) (*kubernetes.Kub } return k, nil } + +// VerifyCLIVersion checks if the CLI version satisfies the constraints. +func VerifyCLIVersion(supVer *common.SupportedVersion) error { + if version.Version == "" { + return nil + } + cli, err := goversion.NewVersion(version.Version) + if err != nil { + return fmt.Errorf("failed to parse CLI version: %w", err) + } + if !supVer.Cli.Check(cli.Core()) { + return fmt.Errorf( + "cli version %q does not satisfy the constraints %q", + cli, supVer.Cli.String(), + ) + } + return nil +}