mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-03-09 17:09:29 +00:00
Several packages are only used while running the e2e suite. These packages are less important to update, as the they can not influence the final executable that is part of the Ceph-CSI container-image. By moving these dependencies out of the main Ceph-CSI go.mod, it is easier to identify if a reported CVE affects Ceph-CSI, or only the testing (like most of the Kubernetes CVEs). Signed-off-by: Niels de Vos <ndevos@ibm.com>
119 lines
2.3 KiB
Go
119 lines
2.3 KiB
Go
package sprig
|
|
|
|
func get(d map[string]interface{}, key string) interface{} {
|
|
if val, ok := d[key]; ok {
|
|
return val
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func set(d map[string]interface{}, key string, value interface{}) map[string]interface{} {
|
|
d[key] = value
|
|
return d
|
|
}
|
|
|
|
func unset(d map[string]interface{}, key string) map[string]interface{} {
|
|
delete(d, key)
|
|
return d
|
|
}
|
|
|
|
func hasKey(d map[string]interface{}, key string) bool {
|
|
_, ok := d[key]
|
|
return ok
|
|
}
|
|
|
|
func pluck(key string, d ...map[string]interface{}) []interface{} {
|
|
res := []interface{}{}
|
|
for _, dict := range d {
|
|
if val, ok := dict[key]; ok {
|
|
res = append(res, val)
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
func keys(dicts ...map[string]interface{}) []string {
|
|
k := []string{}
|
|
for _, dict := range dicts {
|
|
for key := range dict {
|
|
k = append(k, key)
|
|
}
|
|
}
|
|
return k
|
|
}
|
|
|
|
func pick(dict map[string]interface{}, keys ...string) map[string]interface{} {
|
|
res := map[string]interface{}{}
|
|
for _, k := range keys {
|
|
if v, ok := dict[k]; ok {
|
|
res[k] = v
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
func omit(dict map[string]interface{}, keys ...string) map[string]interface{} {
|
|
res := map[string]interface{}{}
|
|
|
|
omit := make(map[string]bool, len(keys))
|
|
for _, k := range keys {
|
|
omit[k] = true
|
|
}
|
|
|
|
for k, v := range dict {
|
|
if _, ok := omit[k]; !ok {
|
|
res[k] = v
|
|
}
|
|
}
|
|
return res
|
|
}
|
|
|
|
func dict(v ...interface{}) map[string]interface{} {
|
|
dict := map[string]interface{}{}
|
|
lenv := len(v)
|
|
for i := 0; i < lenv; i += 2 {
|
|
key := strval(v[i])
|
|
if i+1 >= lenv {
|
|
dict[key] = ""
|
|
continue
|
|
}
|
|
dict[key] = v[i+1]
|
|
}
|
|
return dict
|
|
}
|
|
|
|
func values(dict map[string]interface{}) []interface{} {
|
|
values := []interface{}{}
|
|
for _, value := range dict {
|
|
values = append(values, value)
|
|
}
|
|
|
|
return values
|
|
}
|
|
|
|
func dig(ps ...interface{}) (interface{}, error) {
|
|
if len(ps) < 3 {
|
|
panic("dig needs at least three arguments")
|
|
}
|
|
dict := ps[len(ps)-1].(map[string]interface{})
|
|
def := ps[len(ps)-2]
|
|
ks := make([]string, len(ps)-2)
|
|
for i := 0; i < len(ks); i++ {
|
|
ks[i] = ps[i].(string)
|
|
}
|
|
|
|
return digFromDict(dict, def, ks)
|
|
}
|
|
|
|
func digFromDict(dict map[string]interface{}, d interface{}, ks []string) (interface{}, error) {
|
|
k, ns := ks[0], ks[1:len(ks)]
|
|
step, has := dict[k]
|
|
if !has {
|
|
return d, nil
|
|
}
|
|
if len(ns) == 0 {
|
|
return step, nil
|
|
}
|
|
return digFromDict(step.(map[string]interface{}), d, ns)
|
|
}
|