Chore: swtich between old and new registry in vela install (#6173)

* Chore: swtich between old and new registry in vela install

Signed-off-by: Qiaozp <qiaozhongpei.qzp@alibaba-inc.com>

* add comments

Signed-off-by: Qiaozp <qiaozhongpei.qzp@alibaba-inc.com>

* minor fix

Signed-off-by: Qiaozp <qiaozhongpei.qzp@alibaba-inc.com>

---------

Signed-off-by: Qiaozp <qiaozhongpei.qzp@alibaba-inc.com>
This commit is contained in:
qiaozp
2023-07-04 12:15:30 +08:00
committed by GitHub
parent 64e4ab813d
commit dabaf03e73
5 changed files with 94 additions and 13 deletions

View File

@@ -190,7 +190,7 @@ func NewVersionListCommand(ioStream util.IOStreams) *cobra.Command {
Args: cobra.ExactArgs(0), Args: cobra.ExactArgs(0),
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
helmHelper := helm.NewHelper() helmHelper := helm.NewHelper()
versions, err := helmHelper.ListVersions(kubevelaInstallerHelmRepoURL, kubeVelaChartName, true, nil) versions, err := helmHelper.ListVersions(LegacyKubeVelaInstallerHelmRepoURL, kubeVelaChartName, true, nil)
if err != nil { if err != nil {
return err return err
} }

View File

@@ -46,11 +46,14 @@ import (
innerVersion "github.com/oam-dev/kubevela/version" innerVersion "github.com/oam-dev/kubevela/version"
) )
// defaultConstraint
// const defaultConstraint = ">= 1.19, <= 1.24"
const defaultConstraint = ">= 1.19" const defaultConstraint = ">= 1.19"
const kubevelaInstallerHelmRepoURL = "https://kubevela.github.io/charts/" const (
// LegacyKubeVelaInstallerHelmRepoURL is used for kubevela version < v1.9.0
LegacyKubeVelaInstallerHelmRepoURL = "https://charts.kubevela.net/core/"
// KubeVelaInstallerHelmRepoURL is used for kubevela version >= v1.9.0
KubeVelaInstallerHelmRepoURL = "https://kubevela.github.io/charts/"
)
// kubeVelaReleaseName release name // kubeVelaReleaseName release name
const kubeVelaReleaseName = "kubevela" const kubeVelaReleaseName = "kubevela"
@@ -106,10 +109,14 @@ func NewInstallCommand(c common.Args, order string, ioStreams util.IOStreams) *c
return nil return nil
}, },
RunE: func(cmd *cobra.Command, args []string) error { RunE: func(cmd *cobra.Command, args []string) error {
v, err := version.NewVersion(installArgs.Version)
if err != nil {
return err
}
// Step1: Download Helm Chart // Step1: Download Helm Chart
ioStreams.Info("Installing KubeVela Core ...") ioStreams.Info("Installing KubeVela Core ...")
if installArgs.ChartFilePath == "" { if installArgs.ChartFilePath == "" {
installArgs.ChartFilePath = getKubeVelaHelmChartRepoURL(installArgs.Version) installArgs.ChartFilePath = getKubeVelaHelmChartRepoURL(v)
} }
chart, err := installArgs.helmHelper.LoadCharts(installArgs.ChartFilePath, nil) chart, err := installArgs.helmHelper.LoadCharts(installArgs.ChartFilePath, nil)
if err != nil { if err != nil {
@@ -282,13 +289,14 @@ func getConstraintVersion(constraint string) string {
return constraint return constraint
} }
func getKubeVelaHelmChartRepoURL(version string) string { func getKubeVelaHelmChartRepoURL(ver *version.Version) string {
// Determine installer version // Determine use legacy repo or new one.
if innerVersion.IsOfficialKubeVelaVersion(version) { useLegacy := innerVersion.ShouldUseLegacyHelmRepo(ver)
version, _ := innerVersion.GetOfficialKubeVelaVersion(version) helmRepo := KubeVelaInstallerHelmRepoURL
return kubevelaInstallerHelmRepoURL + kubeVelaChartName + "-" + version + ".tgz" if useLegacy {
helmRepo = LegacyKubeVelaInstallerHelmRepoURL
} }
return kubevelaInstallerHelmRepoURL + kubeVelaChartName + "-" + version + ".tgz" return helmRepo + kubeVelaChartName + "-" + ver.String() + ".tgz"
} }
func waitKubeVelaControllerRunning(kubeClient client.Client, namespace, manifest string) error { func waitKubeVelaControllerRunning(kubeClient client.Client, namespace, manifest string) error {

View File

@@ -19,14 +19,37 @@ package cli
import ( import (
"testing" "testing"
"github.com/hashicorp/go-version"
. "github.com/onsi/ginkgo/v2" . "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega" . "github.com/onsi/gomega"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
func TestGetKubeVelaHelmChartRepoURL(t *testing.T) { func TestGetKubeVelaHelmChartRepoURL(t *testing.T) {
assert.Equal(t, getKubeVelaHelmChartRepoURL("v1.2.2"), "https://kubevela.github.io/charts/vela-core-1.2.2.tgz") cases := []struct {
assert.Equal(t, getKubeVelaHelmChartRepoURL("1.1.11"), "https://kubevela.github.io/charts/vela-core-1.1.11.tgz") ver string
url string
}{
{
ver: "v1.2.2",
url: "https://charts.kubevela.net/core/vela-core-1.2.2.tgz",
},
{
ver: "1.1.11",
url: "https://charts.kubevela.net/core/vela-core-1.1.11.tgz",
},
{
ver: "1.9.2",
// new helm repo
url: "https://kubevela.github.io/charts/vela-core-1.9.2.tgz",
},
}
for _, c := range cases {
v, err := version.NewVersion(c.ver)
assert.Nil(t, err)
assert.Equal(t, getKubeVelaHelmChartRepoURL(v), c.url)
}
} }
var _ = Describe("Test Install Command", func() { var _ = Describe("Test Install Command", func() {

View File

@@ -44,3 +44,22 @@ func GetOfficialKubeVelaVersion(versionStr string) (string, error) {
} }
return v[:len(v)-len(metadata)], nil return v[:len(v)-len(metadata)], nil
} }
// ShouldUseLegacyHelmRepo checks whether the provided version should use the legacy helm repo
func ShouldUseLegacyHelmRepo(ver *version.Version) bool {
if ver.LessThan(version.Must(version.NewVersion("1.8.2"))) {
return true
}
if ver.GreaterThanOrEqual(version.Must(version.NewVersion("1.9.0"))) {
return false
}
// After v1.9.0-beta.1.post1, we use the new helm repo
switch ver.Prerelease() {
case "beta.1.post1", "beta.2", "beta.3":
return false
default:
return true
}
}

View File

@@ -19,6 +19,7 @@ package version
import ( import (
"testing" "testing"
"github.com/hashicorp/go-version"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
) )
@@ -41,3 +42,33 @@ func TestGetVersion(t *testing.T) {
assert.Nil(t, err) assert.Nil(t, err)
assert.Equal(t, "1.2.0", version) assert.Equal(t, "1.2.0", version)
} }
func TestShouldUseLegacyHelmRepo(t *testing.T) {
tests := []struct {
ver string
want bool
}{
{
ver: "v1.2.0",
want: true,
},
{
ver: "v1.9.0-beta.1",
want: true,
},
{
ver: "v1.9.0-beta.1.post1",
want: false,
},
{
ver: "v1.9.1",
want: false,
},
}
for _, tt := range tests {
t.Run(tt.ver, func(t *testing.T) {
ver := version.Must(version.NewVersion(tt.ver))
assert.Equalf(t, tt.want, ShouldUseLegacyHelmRepo(ver), "ShouldUseLegacyHelmRepo(%v)", tt.ver)
})
}
}