in cmd/hub/api/parameter.go [23:94]
func GetParameterOrMaybeCreateSecret(environment, stackInstance, application,
name, component string, create bool) (bool, string, []error) {
found := false
var value string
var errors []error
applicationEnvironmentIds := make([]string, 0)
stackInstanceEnvironmentId := ""
if application != "" {
app, err := cachedApplicationBy(application)
if err != nil {
errors = append(errors, err)
} else {
if app.Environment.Id != "" {
applicationEnvironmentIds = append(applicationEnvironmentIds, app.Environment.Id)
}
for _, env := range app.Environments {
applicationEnvironmentIds = append(applicationEnvironmentIds, env.Id)
}
resource := fmt.Sprintf("%s/%s", applicationsResource, url.PathEscape(app.Id))
found, value, err = getParameter(resource, app.Parameters, name, component)
if err != nil {
errors = append(errors, err)
}
}
}
if !found && stackInstance != "" {
instance, err := cachedStackInstanceBy(stackInstance)
if err != nil {
errors = append(errors, err)
} else {
stackInstanceEnvironmentId = instance.Environment.Id
resource := fmt.Sprintf("%s/%s", stackInstancesResource, url.PathEscape(instance.Id))
found, value, err = getParameter(resource, instance.Parameters, name, component)
if err != nil {
errors = append(errors, err)
}
}
}
if !found && environment != "" {
env, err := cachedEnvironmentBy(environment)
if err != nil {
errors = append(errors, err)
} else {
if stackInstanceEnvironmentId != "" && stackInstanceEnvironmentId != env.Id {
util.WarnOnce("Environment `%s` (%s) doesn't match Stack Instance Environment `%s`",
env.Id, env.Name, stackInstanceEnvironmentId)
}
if len(applicationEnvironmentIds) > 0 && !util.Contains(applicationEnvironmentIds, env.Id) {
util.WarnOnce("Environment `%s` (%s) doesn't match Application Environments %v",
env.Id, env.Name, applicationEnvironmentIds)
}
resource := fmt.Sprintf("%s/%s", environmentsResource, url.PathEscape(env.Id))
found, value, err = getParameter(resource, env.Parameters, name, component)
if err != nil {
errors = append(errors, err)
}
if !found && create && util.LooksLikeSecret(name) {
value, err = createSecretParameter(environment, env.Id, name, component)
if err != nil {
errors = append(errors, err)
} else {
found = true
}
}
}
}
return found, value, errors
}