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
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
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),
RunE: func(cmd *cobra.Command, args []string) error {
helmHelper := helm.NewHelper()
versions, err := helmHelper.ListVersions(kubevelaInstallerHelmRepoURL, kubeVelaChartName, true, nil)
versions, err := helmHelper.ListVersions(LegacyKubeVelaInstallerHelmRepoURL, kubeVelaChartName, true, nil)
if err != nil {
return err
}

View File

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

View File

@ -19,14 +19,37 @@ package cli
import (
"testing"
"github.com/hashicorp/go-version"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/stretchr/testify/assert"
)
func TestGetKubeVelaHelmChartRepoURL(t *testing.T) {
assert.Equal(t, getKubeVelaHelmChartRepoURL("v1.2.2"), "https://kubevela.github.io/charts/vela-core-1.2.2.tgz")
assert.Equal(t, getKubeVelaHelmChartRepoURL("1.1.11"), "https://kubevela.github.io/charts/vela-core-1.1.11.tgz")
cases := []struct {
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() {

View File

@ -44,3 +44,22 @@ func GetOfficialKubeVelaVersion(versionStr string) (string, error) {
}
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 (
"testing"
"github.com/hashicorp/go-version"
"github.com/stretchr/testify/assert"
)
@ -41,3 +42,33 @@ func TestGetVersion(t *testing.T) {
assert.Nil(t, err)
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)
})
}
}