in cmd/hub/api/parameter.go [96:194]
func getParameter(resource string, parameters []Parameter, name, component string) (bool, string, error) {
var param *Parameter
if component != "" {
for i, p := range parameters {
if name == p.Name && component == p.Component {
param = ¶meters[i]
}
}
}
if param == nil {
for i, p := range parameters {
if name == p.Name {
param = ¶meters[i]
}
}
}
if param != nil {
switch param.Kind {
case "secret":
reallySecretRef := ""
secretKind := ""
if maybeMap, ok := param.Value.(map[string]interface{}); ok {
if maybeSecretRef, ok := maybeMap["secret"]; ok {
if secretRef, ok := maybeSecretRef.(string); ok {
reallySecretRef = secretRef
if maybeKind, ok := maybeMap["kind"]; ok {
if kind, ok := maybeKind.(string); ok {
secretKind = kind
}
}
}
}
} else if secretRef, ok := param.Value.(string); ok {
reallySecretRef = secretRef
}
if reallySecretRef != "" {
s, err := secret(resource, reallySecretRef)
if err != nil {
return false, "", err
}
if kind, ok := s["kind"]; ok {
if secretKind != "" && kind != secretKind {
util.Warn("Secret `%s` kind `%s` doesn't match kind `%s` stored in Secrets Service",
name, secretKind, kind)
}
switch kind {
case "text", "password", "certificate", "sshKey", "privateKey",
"token", "bearerToken", "accessToken", "refreshToken", "loginToken":
return true, s[kind], nil
case "license":
return true, s["licenseKey"], nil
case "gitAccessToken": // legacy
return true, s["loginToken"], nil
case "usernamePassword":
return true, fmt.Sprintf("%s/%s", s["username"], s["password"]), nil
case "cloudAccessKeys":
return true, fmt.Sprintf("%s:%s", s["accessKey"], s["secretKey"]), nil
case "cloudAccount":
return true, fmt.Sprintf("%s/%s", s["roleArn"], s["externalId"]), nil
}
}
}
return false, "", fmt.Errorf("Unable to retrieve secret `%s`: `%+v` is not a known secret reference",
name, param.Value)
case "license":
if id, ok := param.Value.(string); ok && id != "" {
l, err := license(id)
if err != nil {
return false, "", err
}
return true, l.LicenseKey, nil
}
return false, "", fmt.Errorf("Unable to retrieve license `%s`: `%+v` is not a license reference",
name, param.Value)
default:
if param.Value == nil {
return false, "", fmt.Errorf("Unable to retrieve parameter `%s`: `value` not set", name)
}
if scalar, ok := param.Value.(string); ok {
return true, scalar, nil
}
if scalar, ok := param.Value.(bool); ok {
return true, strconv.FormatBool(scalar), nil
}
if scalar, ok := param.Value.(int64); ok {
return true, strconv.FormatInt(scalar, 10), nil
}
if scalar, ok := param.Value.(float64); ok {
return true, strconv.FormatFloat(scalar, 'f', -1, 64), nil
}
return false, "", fmt.Errorf("Unable to retrieve parameter `%s`: `%+v` is not a plain scalar value",
name, param.Value)
}
}
return false, "", nil
}