k9s/internal/view/env.go

43 lines
872 B
Go

package view
import (
"fmt"
"regexp"
"strconv"
"strings"
)
// Env represent K9s and K8s available environment variables.
type Env map[string]string
// EnvRX match $XXX custom arg.
var envRX = regexp.MustCompile(`\$(\!?[\w|\d|\-|]+)`)
// Substitute replaces env variable keys from in a string with their corresponding values.
func (e Env) Substitute(arg string) (string, error) {
kk := envRX.FindAllString(arg, -1)
if len(kk) == 0 {
return arg, nil
}
for _, k := range kk {
key, inverse := k[1:], false
if key[0] == '!' {
key, inverse = key[1:], true
}
v, ok := e[strings.ToUpper(key)]
if !ok {
return "", fmt.Errorf("no environment matching key %q:%q", k, key)
}
if b, err := strconv.ParseBool(v); err == nil {
if inverse {
b = !b
}
v = fmt.Sprintf("%t", b)
}
arg = strings.Replace(arg, k, v, -1)
}
return arg, nil
}