diff options
| author | KubeEdge Bot <48982446+kubeedge-bot@users.noreply.github.com> | 2024-07-11 20:24:54 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-11 20:24:54 +0800 |
| commit | ee92c0065a18baa013b437d4600728b07bde6163 (patch) | |
| tree | 4cd09c545e90848fda32d3f6552bd940cc7d3a22 | |
| parent | Merge pull request #5719 from Shelley-BaoYue/automated-cherry-pick-of-#5632-u... (diff) | |
| parent | fix: compatible with keadm init/upgrade -- profie (diff) | |
| download | kubeedge-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.go | 7 | ||||
| -rw-r--r-- | keadm/cmd/keadm/app/cmd/helm/cloudcore.go | 57 | ||||
| -rw-r--r-- | keadm/cmd/keadm/app/cmd/helm/helm_helper.go | 21 |
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 +} |
