func GetParameterOrMaybeCreateSecret()

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
}