mirror of
https://github.com/ceph/ceph-csi.git
synced 2025-03-09 00:49:30 +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>
190 lines
3.6 KiB
Go
190 lines
3.6 KiB
Go
package sprig
|
|
|
|
import (
|
|
"encoding/base32"
|
|
"encoding/base64"
|
|
"fmt"
|
|
"reflect"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func base64encode(v string) string {
|
|
return base64.StdEncoding.EncodeToString([]byte(v))
|
|
}
|
|
|
|
func base64decode(v string) string {
|
|
data, err := base64.StdEncoding.DecodeString(v)
|
|
if err != nil {
|
|
return err.Error()
|
|
}
|
|
return string(data)
|
|
}
|
|
|
|
func base32encode(v string) string {
|
|
return base32.StdEncoding.EncodeToString([]byte(v))
|
|
}
|
|
|
|
func base32decode(v string) string {
|
|
data, err := base32.StdEncoding.DecodeString(v)
|
|
if err != nil {
|
|
return err.Error()
|
|
}
|
|
return string(data)
|
|
}
|
|
|
|
func quote(str ...interface{}) string {
|
|
out := make([]string, 0, len(str))
|
|
for _, s := range str {
|
|
if s != nil {
|
|
out = append(out, fmt.Sprintf("%q", strval(s)))
|
|
}
|
|
}
|
|
return strings.Join(out, " ")
|
|
}
|
|
|
|
func squote(str ...interface{}) string {
|
|
out := make([]string, 0, len(str))
|
|
for _, s := range str {
|
|
if s != nil {
|
|
out = append(out, fmt.Sprintf("'%v'", s))
|
|
}
|
|
}
|
|
return strings.Join(out, " ")
|
|
}
|
|
|
|
func cat(v ...interface{}) string {
|
|
v = removeNilElements(v)
|
|
r := strings.TrimSpace(strings.Repeat("%v ", len(v)))
|
|
return fmt.Sprintf(r, v...)
|
|
}
|
|
|
|
func indent(spaces int, v string) string {
|
|
pad := strings.Repeat(" ", spaces)
|
|
return pad + strings.Replace(v, "\n", "\n"+pad, -1)
|
|
}
|
|
|
|
func nindent(spaces int, v string) string {
|
|
return "\n" + indent(spaces, v)
|
|
}
|
|
|
|
func replace(old, new, src string) string {
|
|
return strings.Replace(src, old, new, -1)
|
|
}
|
|
|
|
func plural(one, many string, count int) string {
|
|
if count == 1 {
|
|
return one
|
|
}
|
|
return many
|
|
}
|
|
|
|
func strslice(v interface{}) []string {
|
|
switch v := v.(type) {
|
|
case []string:
|
|
return v
|
|
case []interface{}:
|
|
b := make([]string, 0, len(v))
|
|
for _, s := range v {
|
|
if s != nil {
|
|
b = append(b, strval(s))
|
|
}
|
|
}
|
|
return b
|
|
default:
|
|
val := reflect.ValueOf(v)
|
|
switch val.Kind() {
|
|
case reflect.Array, reflect.Slice:
|
|
l := val.Len()
|
|
b := make([]string, 0, l)
|
|
for i := 0; i < l; i++ {
|
|
value := val.Index(i).Interface()
|
|
if value != nil {
|
|
b = append(b, strval(value))
|
|
}
|
|
}
|
|
return b
|
|
default:
|
|
if v == nil {
|
|
return []string{}
|
|
}
|
|
|
|
return []string{strval(v)}
|
|
}
|
|
}
|
|
}
|
|
|
|
func removeNilElements(v []interface{}) []interface{} {
|
|
newSlice := make([]interface{}, 0, len(v))
|
|
for _, i := range v {
|
|
if i != nil {
|
|
newSlice = append(newSlice, i)
|
|
}
|
|
}
|
|
return newSlice
|
|
}
|
|
|
|
func strval(v interface{}) string {
|
|
switch v := v.(type) {
|
|
case string:
|
|
return v
|
|
case []byte:
|
|
return string(v)
|
|
case error:
|
|
return v.Error()
|
|
case fmt.Stringer:
|
|
return v.String()
|
|
default:
|
|
return fmt.Sprintf("%v", v)
|
|
}
|
|
}
|
|
|
|
func trunc(c int, s string) string {
|
|
if c < 0 && len(s)+c > 0 {
|
|
return s[len(s)+c:]
|
|
}
|
|
if c >= 0 && len(s) > c {
|
|
return s[:c]
|
|
}
|
|
return s
|
|
}
|
|
|
|
func join(sep string, v interface{}) string {
|
|
return strings.Join(strslice(v), sep)
|
|
}
|
|
|
|
func split(sep, orig string) map[string]string {
|
|
parts := strings.Split(orig, sep)
|
|
res := make(map[string]string, len(parts))
|
|
for i, v := range parts {
|
|
res["_"+strconv.Itoa(i)] = v
|
|
}
|
|
return res
|
|
}
|
|
|
|
func splitn(sep string, n int, orig string) map[string]string {
|
|
parts := strings.SplitN(orig, sep, n)
|
|
res := make(map[string]string, len(parts))
|
|
for i, v := range parts {
|
|
res["_"+strconv.Itoa(i)] = v
|
|
}
|
|
return res
|
|
}
|
|
|
|
// substring creates a substring of the given string.
|
|
//
|
|
// If start is < 0, this calls string[:end].
|
|
//
|
|
// If start is >= 0 and end < 0 or end bigger than s length, this calls string[start:]
|
|
//
|
|
// Otherwise, this calls string[start, end].
|
|
func substring(start, end int, s string) string {
|
|
if start < 0 {
|
|
return s[:end]
|
|
}
|
|
if end < 0 || end > len(s) {
|
|
return s[start:]
|
|
}
|
|
return s[start:end]
|
|
}
|