agent/util/paramstore/resolveparamstore.go (53 lines of code) (raw):
package paramstore
import (
"errors"
"regexp"
"strings"
)
//{{oos-secret:db_password}}
var oosParamPattern = regexp.MustCompile("{{\\s*((?U:oos-secret|oos)\\s*:\\s*[\\w-.]+)\\s*}}")
func isValidParameterStore(param string) bool {
return oosParamPattern.MatchString(param)
}
func ReplaceAllParameterStore(param string) (string, error) {
result := param
for {
matchGroups := oosParamPattern.FindStringSubmatch(result)
if matchGroups == nil {
return result, nil
}
value, err := replaceParameterStoreValue(result, matchGroups)
if err != nil {
return value, err
}
result = value
}
}
func getParameterStoreValue(matchGroups []string) (string, error) {
if matchGroups == nil || len(matchGroups) != 2 {
return "", errors.New("Invalid matchGroups")
}
if !isValidParameterStore(matchGroups[0]) {
return "", errors.New("Invalid matchGroups[0]")
}
parts := strings.Split(matchGroups[1], ":")
if len(parts) != 2 {
return "", errors.New("Invalid matchGroups[1]")
}
paraName := strings.TrimSpace(parts[1])
ParamType := strings.TrimSpace(parts[0])
if ParamType == "oos-secret" {
return GetSecretParam(paraName)
} else if ParamType == "oos" {
return GetParam(paraName)
} else {
return "", errors.New("Invalid ParamType")
}
}
func replaceParameterStoreValue(param string, matchGroups []string) (string, error) {
value, err := getParameterStoreValue(matchGroups)
if err != nil {
return value, err
}
result := strings.Replace(param, matchGroups[0], value, 1)
return result, nil
}