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 150fa05a [operator] add setpaths map
150fa05a is described below
commit 150fa05a5dc686bc9f9e15f9037353336ec3cf64
Author: mfordjody <[email protected]>
AuthorDate: Fri Dec 13 19:08:47 2024 +0800
[operator] add setpaths map
---
operator/pkg/values/map.go | 49 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)
diff --git a/operator/pkg/values/map.go b/operator/pkg/values/map.go
index 3cd7c5cf..f5ecc7ab 100644
--- a/operator/pkg/values/map.go
+++ b/operator/pkg/values/map.go
@@ -265,6 +265,55 @@ func (m Map) SetPath(paths string, value any) error {
return nil
}
+func (m Map) SetPaths(paths ...string) error {
+ for _, sf := range paths {
+ p, v := getPV(sf)
+ // input value type is always string, transform it to correct
type before setting.
+ var val any = v
+ if !isAlwaysString(p) {
+ val = parseValue(v)
+ }
+ if err := m.SetPath(p, val); err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func getPV(setFlag string) (path string, value string) {
+ pv := strings.Split(setFlag, "=")
+ if len(pv) != 2 {
+ return setFlag, ""
+ }
+ path, value = strings.TrimSpace(pv[0]), strings.TrimSpace(pv[1])
+ return
+}
+
+func parseValue(valueStr string) any {
+ var value any
+ if v, err := strconv.Atoi(valueStr); err == nil {
+ value = v
+ } else if v, err := strconv.ParseFloat(valueStr, 64); err == nil {
+ value = v
+ } else if v, err := strconv.ParseBool(valueStr); err == nil {
+ value = v
+ } else {
+ value = strings.ReplaceAll(valueStr, "\\,", ",")
+ }
+ return value
+}
+
+func isAlwaysString(s string) bool {
+ for _, a := range alwaysString {
+ if strings.HasPrefix(s, a) {
+ return true
+ }
+ }
+ return false
+}
+
+var alwaysString = []string{}
+
func (m Map) SetSpecPaths(paths ...string) error {
for _, path := range paths {
if err := m.SetPaths("spec." + path); err != nil {