summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKubeEdge Bot <48982446+kubeedge-bot@users.noreply.github.com>2024-07-11 20:24:54 +0800
committerGitHub <noreply@github.com>2024-07-11 20:24:54 +0800
commitee92c0065a18baa013b437d4600728b07bde6163 (patch)
tree4cd09c545e90848fda32d3f6552bd940cc7d3a22
parentMerge pull request #5719 from Shelley-BaoYue/automated-cherry-pick-of-#5632-u... (diff)
parentfix: compatible with keadm init/upgrade -- profie (diff)
downloadkubeedge-ee92c0065a18baa013b437d4600728b07bde6163.tar.gz
Merge pull request #5718 from Shelley-BaoYue/automated-cherry-pick-of-#5634-upstream-release-1.17v1.17.1
Automated cherry pick of #5634: fix: compatible with keadm init/upgrade -- profie
-rw-r--r--keadm/cmd/keadm/app/cmd/cloud/init.go7
-rw-r--r--keadm/cmd/keadm/app/cmd/helm/cloudcore.go57
-rw-r--r--keadm/cmd/keadm/app/cmd/helm/helm_helper.go21
3 files changed, 73 insertions, 12 deletions
diff --git a/keadm/cmd/keadm/app/cmd/cloud/init.go b/keadm/cmd/keadm/app/cmd/cloud/init.go
index e040070ce..cc820cb25 100644
--- a/keadm/cmd/keadm/app/cmd/cloud/init.go
+++ b/keadm/cmd/keadm/app/cmd/cloud/init.go
@@ -53,11 +53,6 @@ func NewCloudInit() *cobra.Command {
Long: cloudInitLongDescription,
Example: fmt.Sprintf(cloudInitExample, types.DefaultKubeEdgeVersion),
RunE: func(cmd *cobra.Command, args []string) error {
- ver, err := util.GetCurrentVersion(opts.KubeEdgeVersion)
- if err != nil {
- return fmt.Errorf("keadm init failed: %v", err)
- }
- opts.KubeEdgeVersion = ver
tool := helm.NewCloudCoreHelmTool(opts.KubeConfig, opts.KubeEdgeVersion)
return tool.Install(opts)
},
@@ -105,7 +100,7 @@ func addInitOtherFlags(cmd *cobra.Command, initOpts *types.InitOptions) {
func addHelmValueOptionsFlags(cmd *cobra.Command, initOpts *types.InitOptions) {
cmd.Flags().StringArrayVar(&initOpts.Sets, types.FlagNameSet, []string{}, "Set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)")
- cmd.Flags().StringVar(&initOpts.Profile, types.FlagNameProfile, initOpts.Profile, fmt.Sprintf("Set profile on the command line (iptablesMgrMode=external or version=v%s)", types.DefaultKubeEdgeVersion))
+ cmd.Flags().StringVar(&initOpts.Profile, types.FlagNameProfile, initOpts.Profile, fmt.Sprintf("Set profile on the command line (/path/version.yaml or version=v%s)", types.DefaultKubeEdgeVersion))
}
func addForceOptionsFlags(cmd *cobra.Command, initOpts *types.InitOptions) {
diff --git a/keadm/cmd/keadm/app/cmd/helm/cloudcore.go b/keadm/cmd/keadm/app/cmd/helm/cloudcore.go
index 2372c71b6..ddf18f84f 100644
--- a/keadm/cmd/keadm/app/cmd/helm/cloudcore.go
+++ b/keadm/cmd/keadm/app/cmd/helm/cloudcore.go
@@ -90,6 +90,29 @@ func NewCloudCoreHelmTool(kubeConfig, kubeedgeVersion string) *CloudCoreHelmTool
// Install uses helm client to install cloudcore release
func (c *CloudCoreHelmTool) Install(opts *types.InitOptions) error {
+ externValueFile := ""
+ if opts.Profile != "" {
+ // TODO:the version specified through profile will be obsolete.
+ kvs := strings.Split(opts.Profile, "=")
+ if len(kvs) == 2 {
+ if opts.KubeEdgeVersion == "" {
+ if kvs[0] == VersionProfileKey {
+ opts.KubeEdgeVersion = kvs[1]
+ } else {
+ return fmt.Errorf("format error in using profile to specify version")
+ }
+ }
+ } else {
+ externValueFile = opts.Profile
+ }
+ }
+
+ ver, err := util.GetCurrentVersion(opts.KubeEdgeVersion)
+ if err != nil {
+ return fmt.Errorf("failed to get version with err:%v", err)
+ }
+ opts.KubeEdgeVersion = ver
+
// The flag --force would not care about whether the cloud components exist or not also.
// If gives a external helm root, no need to check and verify, because it is always not a cloudcore.
if !opts.Force && opts.ExternalHelmRoot == "" {
@@ -106,10 +129,9 @@ func (c *CloudCoreHelmTool) Install(opts *types.InitOptions) error {
appendDefaultSets(opts.KubeEdgeVersion, opts.AdvertiseAddress, &opts.CloudInitUpdateBase)
// Load profile values, and merges the sets flag
var vals map[string]interface{}
- var err error
- if opts.Profile != "" {
- // Load profile values, and merges the sets flag
- vals, err = MergeProfileValues(getValuesFile(opts.Profile), opts.GetValidSets())
+ if externValueFile != "" {
+ // Load extern values, and merges the sets flag
+ vals, err = MergeExternValues(externValueFile, opts.GetValidSets())
if err != nil {
return err
}
@@ -187,6 +209,29 @@ func (c *CloudCoreHelmTool) Install(opts *types.InitOptions) error {
// Upgrade uses helm client to upgrade cloudcore release
func (c *CloudCoreHelmTool) Upgrade(opts *types.CloudUpgradeOptions) error {
+ externValueFile := ""
+ if opts.Profile != "" {
+ // TODO:the version specified through profile will be obsolete.
+ kvs := strings.Split(opts.Profile, "=")
+ if len(kvs) == 2 {
+ if opts.KubeEdgeVersion == "" {
+ if kvs[0] == VersionProfileKey {
+ opts.KubeEdgeVersion = kvs[1]
+ } else {
+ return fmt.Errorf("format error in using profile to specify version")
+ }
+ }
+ } else {
+ externValueFile = opts.Profile
+ }
+ }
+
+ ver, err := util.GetCurrentVersion(opts.KubeEdgeVersion)
+ if err != nil {
+ return fmt.Errorf("failed to get version with err:%v", err)
+ }
+ opts.KubeEdgeVersion = ver
+
if err := c.Common.OSTypeInstaller.IsK8SComponentInstalled(c.Common.KubeConfig, c.Common.Master); err != nil {
return fmt.Errorf("failed to verify k8s component installed, err: %v", err)
}
@@ -215,9 +260,9 @@ func (c *CloudCoreHelmTool) Upgrade(opts *types.CloudUpgradeOptions) error {
appendDefaultSets(opts.KubeEdgeVersion, opts.AdvertiseAddress, &opts.CloudInitUpdateBase)
var vals map[string]interface{}
- if len(opts.ValueFiles) == 0 && opts.Profile != "" {
+ if len(opts.ValueFiles) == 0 && externValueFile != "" {
// Load profile values, and merges the sets flag
- vals, err = MergeProfileValues(getValuesFile(opts.Profile), opts.GetValidSets())
+ vals, err = MergeExternValues(externValueFile, opts.GetValidSets())
if err != nil {
return err
}
diff --git a/keadm/cmd/keadm/app/cmd/helm/helm_helper.go b/keadm/cmd/keadm/app/cmd/helm/helm_helper.go
index 2cf5509fa..7be835c5a 100644
--- a/keadm/cmd/keadm/app/cmd/helm/helm_helper.go
+++ b/keadm/cmd/keadm/app/cmd/helm/helm_helper.go
@@ -19,6 +19,7 @@ import (
"errors"
"fmt"
"io/fs"
+ "os"
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/release"
@@ -98,3 +99,23 @@ func (h *Helper) GetValues(releaseName string) (map[string]interface{}, error) {
}
return vals, nil
}
+
+// MergeExternValues merges values from specified extern value.yaml and directly via --set.
+func MergeExternValues(profile string, sets []string,
+) (map[string]interface{}, error) {
+ bff, err := os.ReadFile(profile)
+ if err != nil {
+ return nil, fmt.Errorf("failed to read build in profile '%s', err: %v", profile, err)
+ }
+ vals := make(map[string]interface{})
+ if err := yaml.Unmarshal(bff, &vals); err != nil {
+ return nil, fmt.Errorf("failed to unmarshal values: %v", err)
+ }
+ klog.V(4).Infof("combine values: \n\tvalues:%v\n\tsets:%v", vals, sets)
+ for _, kv := range sets {
+ if err := strvals.ParseInto(kv, vals); err != nil {
+ return nil, fmt.Errorf("failed to parse --set data: %s, err: %v", kv, err)
+ }
+ }
+ return vals, nil
+}