Skip to content

Commit 512cad0

Browse files
authored
Merge pull request #1497 from XiShanYongYe-Chang/automated-cherry-pick-of-#1456-#1495-upstream-release-1.0
Automated cherry pick of #1456: fix init image and crd default version #1495: Fix failling test due to outdate vendor
2 parents f5c0940 + e5365a1 commit 512cad0

File tree

4 files changed

+129
-6
lines changed

4 files changed

+129
-6
lines changed

pkg/karmadactl/cmdinit/cmdinit.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"io"
66

77
"github.com/spf13/cobra"
8+
"k8s.io/klog/v2"
89

910
"github.com/karmada-io/karmada/pkg/karmadactl/cmdinit/kubernetes"
1011
"github.com/karmada-io/karmada/pkg/version"
@@ -38,6 +39,13 @@ func NewCmdInit(cmdOut io.Writer, parentCommand string) *cobra.Command {
3839
},
3940
}
4041
flags := cmd.PersistentFlags()
42+
43+
releaseVer, err := version.ParseGitVersion(version.Get().GitVersion)
44+
if err != nil {
45+
klog.Infof("No default release version found. build version: %s", version.Get().String())
46+
releaseVer = &version.ReleaseVersion{} // initialize to avoid panic
47+
}
48+
4149
// cert
4250
flags.StringVar(&opts.ExternalIP, "cert-external-ip", "", "the external IP of Karmada certificate (e.g 192.168.1.2,172.16.1.2)")
4351
flags.StringVar(&opts.ExternalDNS, "cert-external-dns", "", "the external DNS of Karmada certificate (e.g localhost,localhost.com)")
@@ -55,21 +63,21 @@ func NewCmdInit(cmdOut io.Writer, parentCommand string) *cobra.Command {
5563
flags.StringVarP(&opts.EtcdNodeSelectorLabels, "etcd-node-selector-labels", "", "", "etcd pod select the labels of the node. valid in hostPath mode ( e.g. --etcd-node-selector-labels karmada.io/etcd=true)")
5664
flags.StringVarP(&opts.EtcdPersistentVolumeSize, "etcd-pvc-size", "", "5Gi", "etcd data path,valid in pvc mode.")
5765
// karmada
58-
crdURL := fmt.Sprintf("https://github.com/karmada-io/karmada/releases/download/%s/crds.tar.gz", version.Get().GitVersion)
66+
crdURL := fmt.Sprintf("https://github.com/karmada-io/karmada/releases/download/%s/crds.tar.gz", releaseVer.FirstMinorRelease())
5967
flags.StringVar(&opts.CRDs, "crds", crdURL, "Karmada crds resource.(local file e.g. --crds /root/crds.tar.gz)")
6068
flags.Int32VarP(&opts.KarmadaAPIServerNodePort, "port", "p", 32443, "Karmada apiserver service node port")
6169
flags.StringVarP(&opts.KarmadaDataPath, "karmada-data", "d", "/etc/karmada", "karmada data path. kubeconfig cert and crds files")
6270
flags.StringVarP(&opts.KarmadaAPIServerImage, "karmada-apiserver-image", "", "k8s.gcr.io/kube-apiserver:v1.21.7", "Kubernetes apiserver image")
6371
flags.Int32VarP(&opts.KarmadaAPIServerReplicas, "karmada-apiserver-replicas", "", 1, "karmada apiserver replica set")
64-
flags.StringVarP(&opts.KarmadaSchedulerImage, "karmada-scheduler-image", "", "swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-scheduler:latest", "karmada scheduler image")
72+
flags.StringVarP(&opts.KarmadaSchedulerImage, "karmada-scheduler-image", "", fmt.Sprintf("swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-scheduler:%s", releaseVer.PatchRelease()), "karmada scheduler image")
6573
flags.Int32VarP(&opts.KarmadaSchedulerReplicas, "karmada-scheduler-replicas", "", 1, "karmada scheduler replica set")
6674
flags.StringVarP(&opts.KubeControllerManagerImage, "karmada-kube-controller-manager-image", "", "k8s.gcr.io/kube-controller-manager:v1.21.7", "Kubernetes controller manager image")
6775
flags.Int32VarP(&opts.KubeControllerManagerReplicas, "karmada-kube-controller-manager-replicas", "", 1, "karmada kube controller manager replica set")
68-
flags.StringVarP(&opts.KarmadaControllerManagerImage, "karmada-controller-manager-image", "", "swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-controller-manager:latest", "karmada controller manager image")
76+
flags.StringVarP(&opts.KarmadaControllerManagerImage, "karmada-controller-manager-image", "", fmt.Sprintf("swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-controller-manager:%s", releaseVer.PatchRelease()), "karmada controller manager image")
6977
flags.Int32VarP(&opts.KarmadaControllerManagerReplicas, "karmada-controller-manager-replicas", "", 1, "karmada controller manager replica set")
70-
flags.StringVarP(&opts.KarmadaWebhookImage, "karmada-webhook-image", "", "swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-webhook:latest", "karmada webhook image")
78+
flags.StringVarP(&opts.KarmadaWebhookImage, "karmada-webhook-image", "", fmt.Sprintf("swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-webhook:%s", releaseVer.PatchRelease()), "karmada webhook image")
7179
flags.Int32VarP(&opts.KarmadaWebhookReplicas, "karmada-webhook-replicas", "", 1, "karmada webhook replica set")
72-
flags.StringVarP(&opts.KarmadaAggregatedAPIServerImage, "karmada-aggregated-apiserver-image", "", "swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-aggregated-apiserver:latest", "karmada aggregated apiserver image")
80+
flags.StringVarP(&opts.KarmadaAggregatedAPIServerImage, "karmada-aggregated-apiserver-image", "", fmt.Sprintf("swr.ap-southeast-1.myhuaweicloud.com/karmada/karmada-aggregated-apiserver:%s", releaseVer.PatchRelease()), "karmada aggregated apiserver image")
7381
flags.Int32VarP(&opts.KarmadaAggregatedAPIServerReplicas, "karmada-aggregated-apiserver-replicas", "", 1, "karmada aggregated apiserver replica set")
7482

7583
return cmd

pkg/karmadactl/cmdinit/utils/util.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
"time"
1212
)
1313

14-
//Downloader Download progress
14+
// Downloader Download progress
1515
type Downloader struct {
1616
io.Reader
1717
Total int64

pkg/version/release.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package version
2+
3+
import (
4+
"fmt"
5+
6+
utilversion "k8s.io/apimachinery/pkg/util/version"
7+
)
8+
9+
// ReleaseVersion represents a released version.
10+
type ReleaseVersion struct {
11+
*utilversion.Version
12+
}
13+
14+
// ParseGitVersion parses a git version string, such as:
15+
// - v1.1.0-73-g7e6d4f69
16+
// - v1.1.0
17+
func ParseGitVersion(gitVersion string) (*ReleaseVersion, error) {
18+
v, err := utilversion.ParseGeneric(gitVersion)
19+
if err != nil {
20+
return nil, err
21+
}
22+
23+
return &ReleaseVersion{
24+
Version: v,
25+
}, nil
26+
}
27+
28+
// FirstMinorRelease returns the minor release but the patch releases always be 0(vx.y.0). e.g:
29+
// - v1.2.1-12-g2eb92858 --> v1.2.0
30+
// - v1.2.3-12-g2e860210 --> v1.2.0
31+
func (r *ReleaseVersion) FirstMinorRelease() string {
32+
if r.Version == nil {
33+
return "<nil>"
34+
}
35+
36+
return fmt.Sprintf("v%d.%d.0", r.Version.Major(), r.Version.Minor())
37+
}
38+
39+
// PatchRelease returns the stable version with format "vx.y.z".
40+
func (r *ReleaseVersion) PatchRelease() string {
41+
if r.Version == nil {
42+
return "<nil>"
43+
}
44+
45+
return fmt.Sprintf("v%d.%d.%d", r.Version.Major(), r.Version.Minor(), r.Version.Patch())
46+
}

pkg/version/release_test.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package version
2+
3+
import "testing"
4+
5+
func TestReleaseVersion(t *testing.T) {
6+
tests := []struct {
7+
Name string
8+
GitVersion string
9+
ExpectFirstMinorRelease string
10+
ExpectPatchRelease string
11+
ExpectError bool
12+
}{
13+
{
14+
Name: "first minor release",
15+
GitVersion: "v1.1.0",
16+
ExpectFirstMinorRelease: "v1.1.0",
17+
ExpectPatchRelease: "v1.1.0",
18+
ExpectError: false,
19+
},
20+
{
21+
Name: "subsequent minor release",
22+
GitVersion: "v1.1.1",
23+
ExpectFirstMinorRelease: "v1.1.0",
24+
ExpectPatchRelease: "v1.1.1",
25+
ExpectError: false,
26+
},
27+
{
28+
Name: "normal git version",
29+
GitVersion: "v1.1.1-6-gf20c721a",
30+
ExpectFirstMinorRelease: "v1.1.0",
31+
ExpectPatchRelease: "v1.1.1",
32+
ExpectError: false,
33+
},
34+
{
35+
Name: "abnormal version",
36+
GitVersion: "vx.y.z-6-gf20c721a",
37+
ExpectFirstMinorRelease: "",
38+
ExpectPatchRelease: "",
39+
ExpectError: true,
40+
},
41+
}
42+
43+
for i := range tests {
44+
tc := tests[i]
45+
46+
t.Run(tc.Name, func(t *testing.T) {
47+
rv, err := ParseGitVersion(tc.GitVersion)
48+
if err != nil {
49+
if !tc.ExpectError {
50+
t.Fatalf("No error is expected but got: %v", err)
51+
}
52+
// Stop and passes this test as error is expected.
53+
return
54+
} else if err == nil {
55+
if tc.ExpectError {
56+
t.Fatalf("Expect error, but got nil")
57+
}
58+
}
59+
60+
if rv.FirstMinorRelease() != tc.ExpectFirstMinorRelease {
61+
t.Fatalf("expect first minor release: %s, but got: %s", tc.ExpectFirstMinorRelease, rv.FirstMinorRelease())
62+
}
63+
64+
if rv.PatchRelease() != tc.ExpectPatchRelease {
65+
t.Fatalf("expect patch release: %s, but got: %s", tc.ExpectPatchRelease, rv.PatchRelease())
66+
}
67+
})
68+
}
69+
}

0 commit comments

Comments
 (0)