This is an automated email from the ASF dual-hosted git repository.

zhongxjian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-kubernetes.git


The following commit(s) were added to refs/heads/master by this push:
     new 5d2a08f1 [operator] fix error logic
5d2a08f1 is described below

commit 5d2a08f143c7e8228b1a11e9bfac42d4fd67692b
Author: mfordjody <[email protected]>
AuthorDate: Sun Dec 15 13:37:20 2024 +0800

    [operator] fix error logic
---
 dubboctl/cmd/root.go                  | 10 ++++-----
 dubboctl/main.go                      |  4 ++--
 dubboctl/pkg/cli/context.go           | 17 ++++++++-------
 manifests/manifest.go                 |  1 +
 operator/cmd/cluster/install.go       | 25 +++++++++++++++-------
 operator/cmd/cluster/root.go          |  4 ++--
 operator/cmd/cluster/uninstall.go     |  2 +-
 operator/cmd/validation/validation.go |  3 +--
 operator/pkg/component/component.go   |  2 ++
 operator/pkg/install/installer.go     | 23 +++++++++++++++++++-
 operator/pkg/render/manifest.go       | 40 ++++++++++++++++++++++++++---------
 operator/pkg/render/postprocess.go    | 11 ++++++++++
 pkg/art/atr.go                        |  2 +-
 13 files changed, 103 insertions(+), 41 deletions(-)

diff --git a/dubboctl/cmd/root.go b/dubboctl/cmd/root.go
index efcf5b9d..113bf07f 100644
--- a/dubboctl/cmd/root.go
+++ b/dubboctl/cmd/root.go
@@ -27,20 +27,20 @@ func AddFlags(cmd *cobra.Command) {
 }
 
 func GetRootCmd(args []string) *cobra.Command {
-
        rootCmd := &cobra.Command{
                Use:   "dubboctl",
                Short: "Dubbo command line utilities",
                Long:  `Dubbo configuration command line utility for debug and 
use dubbo applications.`,
        }
+       AddFlags(rootCmd)
        rootCmd.SetArgs(args)
        flags := rootCmd.PersistentFlags()
-
        rootOptions := cli.AddRootFlags(flags)
        ctx := cli.NewCLIContext(rootOptions)
 
        installCmd := cluster.InstallCmd(ctx)
        rootCmd.AddCommand(installCmd)
+       hideFlags(installCmd, cli.NamespaceFlag, cli.DubboNamespaceFlag, 
cli.ChartFlag)
 
        uninstallCmd := cluster.UninstallCmd(ctx)
        rootCmd.AddCommand(uninstallCmd)
@@ -48,17 +48,15 @@ func GetRootCmd(args []string) *cobra.Command {
        upgradeCmd := cluster.UpgradeCmd(ctx)
        rootCmd.AddCommand(upgradeCmd)
 
-       AddFlags(installCmd)
-       hideFlags(installCmd, cli.NamespaceFlag, cli.DubboNamespaceFlag, 
cli.ChartFlag)
        return rootCmd
 }
 
 func hideFlags(origin *cobra.Command, hide ...string) {
-       origin.SetHelpFunc(func(command *cobra.Command, strings []string) {
+       origin.SetHelpFunc(func(command *cobra.Command, args []string) {
                for _, hf := range hide {
                        _ = command.Flags().MarkHidden(hf)
                }
                origin.SetHelpFunc(nil)
-               origin.HelpFunc()(command, strings)
+               origin.HelpFunc()(command, args)
        })
 }
diff --git a/dubboctl/main.go b/dubboctl/main.go
index c82e578a..ec5eb018 100644
--- a/dubboctl/main.go
+++ b/dubboctl/main.go
@@ -18,7 +18,7 @@
 package main
 
 import (
-       "k8s.io/klog/v2"
+       "fmt"
        "os"
 )
 
@@ -29,7 +29,7 @@ import (
 func main() {
        rootCmd := cmd.GetRootCmd(os.Args[1:])
        if err := rootCmd.Execute(); err != nil {
-               klog.Errorf("GetRootCmd Execute err:%v", err)
+               fmt.Errorf("GetRootCmd Execute err:%v", err)
                os.Exit(1)
        }
 }
diff --git a/dubboctl/pkg/cli/context.go b/dubboctl/pkg/cli/context.go
index 86e52028..bb210026 100644
--- a/dubboctl/pkg/cli/context.go
+++ b/dubboctl/pkg/cli/context.go
@@ -13,7 +13,6 @@ type instance struct {
 
 type Context interface {
        CLIClient() (kube.CLIClient, error)
-       CLIClientWithRevision(rev string) (kube.CLIClient, error)
 }
 
 func NewCLIContext(rootFlags *RootFlags) Context {
@@ -38,19 +37,21 @@ func (i *instance) CLIClientWithRevision(rev string) 
(kube.CLIClient, error) {
        if i.clients == nil {
                i.clients = make(map[string]kube.CLIClient)
        }
-       impersonationConfig := rest.ImpersonationConfig{}
-       client, err := newKubeClientWithRevision(*i.kubeconfig, *i.Context, 
rev, impersonationConfig)
-       if err != nil {
-               return nil, err
+       if i.clients[rev] == nil {
+               impersonationConfig := rest.ImpersonationConfig{}
+               client, err := newKubeClientWithRevision(*i.kubeconfig, 
*i.Context, rev, impersonationConfig)
+               if err != nil {
+                       return nil, err
+               }
+               i.clients[rev] = client
        }
-       i.clients[rev] = client
        return i.clients[rev], nil
 }
 
 func newKubeClientWithRevision(kubeconfig, context, revision string, 
impersonationConfig rest.ImpersonationConfig) (kube.CLIClient, error) {
        drc, err := kube.DefaultRestConfig(kubeconfig, context, func(config 
*rest.Config) {
-               config.QPS = 50
-               config.Burst = 100
+               config.QPS = 55
+               config.Burst = 95
                config.Impersonate = impersonationConfig
        })
        if err != nil {
diff --git a/manifests/manifest.go b/manifests/manifest.go
index 8ea61bce..b747cd66 100644
--- a/manifests/manifest.go
+++ b/manifests/manifest.go
@@ -21,6 +21,7 @@ import (
        "os"
 )
 
+//go:embed all:charts/* profiles/*
 var FS embed.FS
 
 func BuiltinDir(dir string) fs.FS {
diff --git a/operator/cmd/cluster/install.go b/operator/cmd/cluster/install.go
index 641a346d..cdc8241f 100644
--- a/operator/cmd/cluster/install.go
+++ b/operator/cmd/cluster/install.go
@@ -37,6 +37,12 @@ func (i *installArgs) String() string {
        return b.String()
 }
 
+func addInstallFlags(cmd *cobra.Command, args *installArgs) {
+       cmd.PersistentFlags().StringSliceVarP(&args.Files, "files", "f", nil, 
`Path to the file containing the dubboOperator's custom resources`)
+       cmd.PersistentFlags().StringArrayVarP(&args.Sets, "set", "s", nil, 
`Override dubboOperator values, such as selecting profiles, etc`)
+
+}
+
 func InstallCmd(ctx cli.Context) *cobra.Command {
        return InstallCmdWithArgs(ctx, &RootArgs{}, &installArgs{})
 }
@@ -46,13 +52,14 @@ func InstallCmdWithArgs(ctx cli.Context, rootArgs 
*RootArgs, iArgs *installArgs)
                Use:   "install",
                Short: "Applies an Dubbo manifest, installing or reconfiguring 
Dubbo on a cluster",
                Long:  "The install command generates an Dubbo install manifest 
and applies it to a cluster",
-               Example: `
-        # Apply a default dubboctl installation.
-               dubboctl install
-               # Apply a default profile.
-               dubboctl install --profile=default
-               # Apply a config file
-               dubboctl install -f my-config.yaml
+               Example: `# Apply a default dubboctl installation.
+dubboctl install
+
+# Apply a default profile.
+dubboctl install --profile=default
+
+# Apply a config file.
+dubboctl install -f my-config.yaml
                `,
                Aliases: []string{"apply"},
                Args:    cobra.ExactArgs(0),
@@ -63,10 +70,12 @@ func InstallCmdWithArgs(ctx cli.Context, rootArgs 
*RootArgs, iArgs *installArgs)
                        }
                        p := NewPrinterForWriter(cmd.OutOrStderr())
                        cl := clog.NewConsoleLogger(cmd.OutOrStdout(), 
cmd.ErrOrStderr(), installerScope)
-                       p.Printf("%v\n", art.DubboArt())
+                       p.Printf("%v\n", art.DubboColoredArt())
                        return Install(kubeClient, rootArgs, iArgs, cl, 
cmd.OutOrStdout(), p)
                },
        }
+       addFlags(ic, rootArgs)
+       addInstallFlags(ic, iArgs)
        return ic
 }
 
diff --git a/operator/cmd/cluster/root.go b/operator/cmd/cluster/root.go
index 23d7ff87..69bf9320 100644
--- a/operator/cmd/cluster/root.go
+++ b/operator/cmd/cluster/root.go
@@ -22,6 +22,6 @@ func AddRootFlags(cmd *cobra.Command) *RootFlags {
        return rootFlags
 }
 
-func AddFlags(cmd *cobra.Command, rootArgs *RootArgs) {
-       cmd.Flags().BoolVar(&rootArgs.DryRun, "dry-run", false, "")
+func addFlags(cmd *cobra.Command, rootArgs *RootArgs) {
+       cmd.Flags().BoolVar(&rootArgs.DryRun, "dry-run", false, `Outputs only 
the console/log without making any changes`)
 }
diff --git a/operator/cmd/cluster/uninstall.go 
b/operator/cmd/cluster/uninstall.go
index 5133d6a5..00794f18 100644
--- a/operator/cmd/cluster/uninstall.go
+++ b/operator/cmd/cluster/uninstall.go
@@ -24,7 +24,7 @@ func UninstallCmd(ctx cli.Context) *cobra.Command {
                        return uninstall(cmd, ctx, rootArgs, uiArgs)
                },
        }
-       AddFlags(uicmd, rootArgs)
+       addFlags(uicmd, rootArgs)
        addUninstallFlags()
        return uicmd
 }
diff --git a/operator/cmd/validation/validation.go 
b/operator/cmd/validation/validation.go
index c59ea24b..e9d9848a 100644
--- a/operator/cmd/validation/validation.go
+++ b/operator/cmd/validation/validation.go
@@ -7,13 +7,12 @@ import (
        "github.com/apache/dubbo-kubernetes/operator/pkg/apis"
        "github.com/apache/dubbo-kubernetes/operator/pkg/util"
        "github.com/apache/dubbo-kubernetes/operator/pkg/values"
-       "github.com/apache/dubbo-kubernetes/pkg/kube"
        "sigs.k8s.io/yaml"
 )
 
 type Warnings = util.Errors
 
-func ParseAndValidateDubboOperator(dopMap values.Map, client kube.Client) 
(Warnings, util.Errors) {
+func ParseAndValidateDubboOperator(dopMap values.Map) (Warnings, util.Errors) {
        dop := &apis.DubboOperator{}
        dec := json.NewDecoder(bytes.NewBufferString(dopMap.JSON()))
        dec.DisallowUnknownFields()
diff --git a/operator/pkg/component/component.go 
b/operator/pkg/component/component.go
index ce91380c..b31b24f0 100644
--- a/operator/pkg/component/component.go
+++ b/operator/pkg/component/component.go
@@ -18,6 +18,7 @@ type Component struct {
        Default        bool
        HelmSubDir     string
        HelmTreeRoot   string
+       FlattenValues  bool
 }
 
 var AllComponents = []Component{
@@ -63,6 +64,7 @@ func (c Component) Get(merged values.Map) 
([]apis.MetadataCompSpec, error) {
                if err != nil {
                        return apis.MetadataCompSpec{}, fmt.Errorf("fail to 
convert %v: %v", c.SpecName, err)
                }
+
                if spec.Namespace == "" {
                        spec.Namespace = defaultNamespace
                        spec.Namespace = "dubbo-system"
diff --git a/operator/pkg/install/installer.go 
b/operator/pkg/install/installer.go
index 36fd9689..8ddb4ead 100644
--- a/operator/pkg/install/installer.go
+++ b/operator/pkg/install/installer.go
@@ -1,15 +1,20 @@
 package install
 
 import (
+       "context"
+       "fmt"
        "github.com/apache/dubbo-kubernetes/operator/pkg/component"
        "github.com/apache/dubbo-kubernetes/operator/pkg/manifest"
        "github.com/apache/dubbo-kubernetes/operator/pkg/util/dmultierr"
        "github.com/apache/dubbo-kubernetes/operator/pkg/util/progress"
        "github.com/apache/dubbo-kubernetes/operator/pkg/values"
        "github.com/apache/dubbo-kubernetes/pkg/kube"
+       "github.com/apache/dubbo-kubernetes/pkg/pointer"
        "github.com/apache/dubbo-kubernetes/pkg/util/sets"
        "github.com/apache/dubbo-kubernetes/pkg/util/slices"
        "github.com/hashicorp/go-multierror"
+       metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+       "k8s.io/apimachinery/pkg/types"
        "sync"
 )
 
@@ -94,7 +99,23 @@ func (i Installer) applyManifestSet(manifestSet 
manifest.ManifestSet) error {
 }
 
 func (i Installer) serverSideApply(obj manifest.Manifest) error {
-       const fieldOwner = "dubbo-operator"
+       var dryRun []string
+       const operatorFieldOwner = "dubbo-operator"
+       dc, err := i.Kube.DynamicClientFor(obj.GroupVersionKind(), 
obj.Unstructured, "")
+       if err != nil {
+               return err
+       }
+       objStr := fmt.Sprintf("%s/%s/%s", obj.GetKind(), obj.GetNamespace(), 
obj.GetName())
+       if i.DryRun {
+               return nil
+       }
+       if _, err := dc.Patch(context.TODO(), obj.GetName(), 
types.ApplyPatchType, []byte(obj.Content), metav1.PatchOptions{
+               DryRun:       dryRun,
+               Force:        pointer.Of(true),
+               FieldManager: operatorFieldOwner,
+       }); err != nil {
+               return fmt.Errorf("failed to update resource with server-side 
apply for obj %v: %v", objStr, err)
+       }
        return nil
 }
 
diff --git a/operator/pkg/render/manifest.go b/operator/pkg/render/manifest.go
index 54897fe6..ccccab57 100644
--- a/operator/pkg/render/manifest.go
+++ b/operator/pkg/render/manifest.go
@@ -17,7 +17,7 @@ import (
        "strings"
 )
 
-func MergeInputs(filenames []string, flags []string, client kube.Client) 
(values.Map, error) {
+func MergeInputs(filenames []string, flags []string) (values.Map, error) {
        ConfigBase, err := values.MapFromJSON([]byte(`{
          "apiVersion": "install.dubbo.io/v1alpha1",
          "kind": "DubboOperator",
@@ -39,9 +39,11 @@ func MergeInputs(filenames []string, flags []string, client 
kube.Client) (values
                } else {
                        b, err = os.ReadFile(strings.TrimSpace(fn))
                }
+
                if err := checkDops(string(b)); err != nil {
                        return nil, fmt.Errorf("checkDops err:%v", err)
                }
+
                m, err := values.MapFromYAML(b)
                if err != nil {
                        return nil, fmt.Errorf("yaml Unmarshal err:%v", err)
@@ -110,17 +112,19 @@ func checkDops(s string) error {
                return fmt.Errorf("unable to parse file: %v", err)
        }
        if len(mfs) > 1 {
-               return fmt.Errorf("")
+               return fmt.Errorf("contains multiple DubboOperator CRs, only 
one per file is supported")
        }
        return nil
 }
+
 func GenerateManifest(files []string, setFlags []string, logger clog.Logger, 
client kube.Client) ([]manifest.ManifestSet, values.Map, error) {
        var chartWarnings util.Errors
-       merged, err := MergeInputs(files, setFlags, client)
+       merged, err := MergeInputs(files, setFlags)
        if err != nil {
                return nil, nil, fmt.Errorf("merge inputs: %v", err)
        }
-       if err := validateDubboOperator(merged, client, logger); err != nil {
+
+       if err := validateDubboOperator(merged, logger); err != nil {
                return nil, nil, fmt.Errorf("validateDubboOperator err:%v", err)
        }
        allManifests := map[component.Name]manifest.ManifestSet{}
@@ -165,8 +169,8 @@ func GenerateManifest(files []string, setFlags []string, 
logger clog.Logger, cli
        return val, merged, nil
 }
 
-func validateDubboOperator(dop values.Map, client kube.Client, logger 
clog.Logger) error {
-       warnings, errs := validation.ParseAndValidateDubboOperator(dop, client)
+func validateDubboOperator(dop values.Map, logger clog.Logger) error {
+       warnings, errs := validation.ParseAndValidateDubboOperator(dop)
        if err := errs.ToErrors(); err != nil {
                return err
        }
@@ -179,12 +183,28 @@ func validateDubboOperator(dop values.Map, client 
kube.Client, logger clog.Logge
 }
 
 func applyComponentValuesToHelmValues(comp component.Component, spec 
apis.MetadataCompSpec, merged values.Map) values.Map {
+       root := comp.HelmTreeRoot
        if spec.Namespace != "" {
                spec.Namespace = "dubbo-system"
        }
+       if comp.FlattenValues {
+               cv, f := merged.GetPathMap("spec.values." + root)
+               if f {
+                       vals, _ := merged.GetPathMap("spec.values")
+                       nv := values.Map{
+                               "global": vals["global"],
+                       }
+                       for k, v := range vals {
+                               _, isMap := v.(map[string]any)
+                               if !isMap {
+                                       nv[k] = v
+                               }
+                       }
+                       for k, v := range cv {
+                               nv[k] = v
+                       }
+                       merged["spec"].(map[string]any)["values"] = nv
+               }
+       }
        return merged
 }
-
-func postProcess(comp component.Component, manifests []manifest.Manifest, vals 
values.Map) ([]manifest.Manifest, error) {
-       return manifests, nil
-}
diff --git a/operator/pkg/render/postprocess.go 
b/operator/pkg/render/postprocess.go
new file mode 100644
index 00000000..ab156df2
--- /dev/null
+++ b/operator/pkg/render/postprocess.go
@@ -0,0 +1,11 @@
+package render
+
+import (
+       "github.com/apache/dubbo-kubernetes/operator/pkg/component"
+       "github.com/apache/dubbo-kubernetes/operator/pkg/manifest"
+       "github.com/apache/dubbo-kubernetes/operator/pkg/values"
+)
+
+func postProcess(comp component.Component, manifests []manifest.Manifest, vals 
values.Map) ([]manifest.Manifest, error) {
+       return manifests, nil
+}
diff --git a/pkg/art/atr.go b/pkg/art/atr.go
index 2e41ef25..8ae9d4cd 100644
--- a/pkg/art/atr.go
+++ b/pkg/art/atr.go
@@ -8,7 +8,7 @@ import (
 //go:embed dubbo-ascii.txt
 var dubboASCIIArt string
 
-func DubboArt() string {
+func dubboArt() string {
        return dubboASCIIArt
 }
 

Reply via email to