diff --git a/vendor.conf b/vendor.conf index 13eac406..a36d9f5b 100644 --- a/vendor.conf +++ b/vendor.conf @@ -5,4 +5,4 @@ k8s.io/kubernetes v1.8.3 bitbucket.org/ww/goautoneg a547fc61f48d567d5b4ec6f8aee5573d8efce11d https://github.com/rancher/goautoneg.git golang.org/x/sync fd80eb99c8f653c847d294a001bdf2a3a6f768f5 -github.com/rancher/norman c814e62e436aeaeaf51ae3da439e520068494a7b +github.com/rancher/norman bfea703723da186d3153c87cf629410d796beb8c diff --git a/vendor/github.com/rancher/norman/types/convert/convert.go b/vendor/github.com/rancher/norman/types/convert/convert.go index 8801e81f..ba382ce9 100644 --- a/vendor/github.com/rancher/norman/types/convert/convert.go +++ b/vendor/github.com/rancher/norman/types/convert/convert.go @@ -163,7 +163,7 @@ func ToMapSlice(obj interface{}) []map[string]interface{} { return v } vs, _ := obj.([]interface{}) - result := []map[string]interface{}{} + var result []map[string]interface{} for _, item := range vs { if v, ok := item.(map[string]interface{}); ok { result = append(result, v) diff --git a/vendor/github.com/rancher/norman/types/convert/transform.go b/vendor/github.com/rancher/norman/types/convert/transform.go new file mode 100644 index 00000000..9bb8aa6f --- /dev/null +++ b/vendor/github.com/rancher/norman/types/convert/transform.go @@ -0,0 +1,45 @@ +package convert + +const ( + ArrayKey = "{ARRAY}" + MapKey = "{MAP}" +) + +type TransformerFunc func(input interface{}) interface{} + +func Transform(data map[string]interface{}, path []string, transformer TransformerFunc) { + if len(path) == 0 || len(data) == 0 { + return + } + + key := path[0] + path = path[1:] + value := data[key] + + if value == nil { + return + } + + if len(path) == 0 { + data[key] = transformer(value) + return + } + + // You can't end a path with ARRAY/MAP. Not supported right now + if len(path) > 1 { + switch path[1] { + case ArrayKey: + for _, valueMap := range ToMapSlice(value) { + Transform(valueMap, path[1:], transformer) + } + return + case MapKey: + for _, valueMap := range ToMapInterface(value) { + Transform(ToMapInterface(valueMap), path[1:], transformer) + } + return + } + } + + Transform(ToMapInterface(value), path, transformer) +}