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 0484e296 [operator] add validation logic
0484e296 is described below

commit 0484e296e1c6c62dd89902f111f8911f3031b0bf
Author: mfordjody <[email protected]>
AuthorDate: Thu Dec 12 18:49:42 2024 +0800

    [operator] add validation logic
---
 operator/cmd/validation/validation.go | 32 ++++++++++++++++++
 operator/manifest/render/manifest.go  | 62 +++++++++++++++++++++++++++++++++--
 2 files changed, 91 insertions(+), 3 deletions(-)

diff --git a/operator/cmd/validation/validation.go 
b/operator/cmd/validation/validation.go
new file mode 100644
index 00000000..7e6fbefc
--- /dev/null
+++ b/operator/cmd/validation/validation.go
@@ -0,0 +1,32 @@
+package validation
+
+import (
+       "bytes"
+       "encoding/json"
+       "github.com/apache/dubbo-kubernetes/operator/pkg/apis"
+       "github.com/apache/dubbo-kubernetes/operator/pkg/values"
+)
+
+func ParseAndValidateDubboOperator(dopMap values.Map) (Warnings, util.Errors) {
+       dop := &apis.DubboOperator{}
+       dec := json.NewDecoder(bytes.NewBufferString(dopMap.JSON()))
+       dec.DisallowUnknownFields()
+       if err := dec.Decode(dop); err != nil {
+               return nil, util.NewErrs(fmt.Errorf("could not unmarshal: %v", 
err))
+       }
+       var warnings Warnings
+       var errors util.Errors
+       vw, ve := validateValues(dop)
+       warnings = util.AppendErrs(warnings, vw)
+       errors = util.AppendErrs(errors, ve)
+       errors = util.AppendErr(errors, 
validateComponentNames(dop.Spec.Components))
+       return warnings, errors
+}
+
+func validateValues(raw *apis.DubboOperator) (Warnings, util.Errors) {
+       v := &apis.Values{}
+       if err := yaml.Unmarshal(raw.Spec.Values, v); err != nil {
+               return nil, util.NewErrs(fmt.Errorf("could not unmarshal: %v", 
err))
+       }
+       return nil, nil
+}
diff --git a/operator/manifest/render/manifest.go 
b/operator/manifest/render/manifest.go
index f4f337cb..d407bb74 100644
--- a/operator/manifest/render/manifest.go
+++ b/operator/manifest/render/manifest.go
@@ -1,9 +1,65 @@
 package render
 
 import (
+       "fmt"
+       "github.com/apache/dubbo-kubernetes/operator/manifest"
        "github.com/apache/dubbo-kubernetes/operator/pkg/util/clog"
+       "github.com/apache/dubbo-kubernetes/operator/pkg/values"
+       "io"
+       "os"
+       "strings"
 )
 
-func ()  {
-       
-}
\ No newline at end of file
+func MergeInputs(filenames []string, flags []string) ([]values.Map, error) {
+       ConfigBase, err := values.MapFromJSON([]byte(`{
+         "apiVersion": "install.dubbo.io/v1alpha1",
+         "kind": "DubboOperator",
+         "metadata": {},
+         "spec": {}
+       }`))
+       if err != nil {
+               return nil, err
+       }
+       for i, fn := range filenames {
+               var b []byte
+               var err error
+               if fn == "-" {
+                       if i != len(filenames)-1 {
+                               return nil, fmt.Errorf("stdin is only allowed 
as the last filename")
+                       }
+                       b, err = io.ReadAll(os.Stdin)
+               } else {
+                       b, err = os.ReadFile(strings.TrimSpace(fn))
+               }
+       }
+       return nil, nil
+}
+func checkDops(s string) error {
+       mfs, err := manifest.ParseMultiple(s)
+       if err != nil {
+               return fmt.Errorf("unable to parse file: %v", err)
+       }
+       if len(mfs) > 1 {
+               return fmt.Errorf("")
+       }
+       return nil
+}
+func GenerateManifest(files []string, setFlags []string, logger clog.Logger) 
([]manifest.ManifestSet, values.Map, error) {
+       merged, err := MergeInputs(files, setFlags)
+       if err != nil {
+               return nil, nil, fmt.Errorf("merge inputs: %v", err)
+       }
+}
+
+func validateDubboOperator(dop values.Map, logger clog.Logger) error {
+       warnings, errs := validation.ParseAndValidateDubboOperator(dop)
+       if err := errs.ToError(); err != nil {
+               return err
+       }
+       if logger != nil {
+               for _, w := range warnings {
+                       logger.LogAndErrorf("%s %v", "❗", w)
+               }
+       }
+       return nil
+}

Reply via email to