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 efda44fa [operator] encapsulate map (#513)
efda44fa is described below
commit efda44fa295411dd957375b9652922d930edff97
Author: mfordjody <[email protected]>
AuthorDate: Mon Dec 2 09:39:29 2024 +0800
[operator] encapsulate map (#513)
---
operator/pkg/comp/comp.go | 1 +
operator/pkg/values/map.go | 95 ++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 96 insertions(+)
diff --git a/operator/pkg/comp/comp.go b/operator/pkg/comp/comp.go
index c9498197..3e35109f 100644
--- a/operator/pkg/comp/comp.go
+++ b/operator/pkg/comp/comp.go
@@ -47,5 +47,6 @@ func UserFacingCompName(name Name) string {
}
func (c Comp) Get(merged values.Map) ([]apis.MetadataCompSpec, error) {
+ defaultNamespace := merged
return nil, nil
}
diff --git a/operator/pkg/values/map.go b/operator/pkg/values/map.go
index ec33acdc..85b0221b 100644
--- a/operator/pkg/values/map.go
+++ b/operator/pkg/values/map.go
@@ -5,7 +5,9 @@ import (
"fmt"
"github.com/apache/dubbo-kubernetes/pkg/pointer"
"path/filepath"
+ "reflect"
"sigs.k8s.io/yaml"
+ "strconv"
"strings"
)
@@ -130,6 +132,99 @@ func splitPath(path string) []string {
return r
}
+func (m Map) GetPathString(s string) string {
+ return ""
+}
+
func GetPathHelper[T any](m Map, name string) T {
return nil
}
+
+func (m Map) GetPath(name string) (any, bool) {
+ current := any(m)
+ paths := splitPath(name)
+ for _, n := range paths {
+ if idx, ok := extractIndex(n); ok {
+ a, ok := current.([]any)
+ if !ok {
+ return nil, false
+ }
+ if idx >= 0 && idx < len(a) {
+ current = a[idx]
+ } else {
+ return nil, false
+ }
+ } else if k, v, ok := extractKeyValue(n); ok {
+ a, ok := current.([]any)
+ if !ok {
+ return nil, false
+ }
+ index := -1
+ for idx, cm := range a {
+ if MustCastAsMap(cm)[k] == v {
+ index = idx
+ break
+ }
+ }
+ if index == -1 {
+ return nil, false
+ }
+ current = a[idx]
+ } else {
+ cm, ok := CastAsMap(current)
+ if !ok {
+ return nil, false
+ }
+ subKey, ok := cm[n]
+ if !ok {
+ return nil, false
+ }
+ current = subKey
+ }
+ }
+ if p, ok := current.(*any); ok {
+ return *p, true
+ }
+ return current, true
+}
+
+func MustCastAsMap(current any) Map {
+ m, ok := CastAsMap(current)
+ if !ok {
+ if !reflect.ValueOf(current).IsValid() {
+ return Map{}
+ }
+ panic(fmt.Sprintf("not a map, got %T: %v %v", current, current,
reflect.ValueOf(current).Kind()))
+ }
+ return m
+}
+
+func CastAsMap(current any) (Map, bool) {
+ if m, ok := current.(Map); ok {
+ return m, true
+ }
+ if m, ok := current.(map[string]any); ok {
+ return m, true
+ }
+ return nil, false
+}
+
+func extractIndex(seg string) (int, bool) {
+ if !strings.HasPrefix(seg, "[") || !strings.HasSuffix(seg, "]") {
+ return 0, false
+ }
+ sanitized := seg[1 : len(seg)-1]
+ v, err := strconv.Atoi(sanitized)
+ if err != nil {
+ return 0, false
+ }
+ return v, true
+}
+
+func extractKeyValue(seg string) (string, string, bool) {
+ if !strings.HasPrefix(seg, "[") || !strings.HasSuffix(seg, "]") {
+ return "", "", false
+ }
+ sanitized := seg[1 : len(seg)-1]
+ return strings.Cut(sanitized, ":")
+}