func()

in pkg/broker/awsbroker.go [265:376]


func (db Db) servicePlanToOSBPlan(planId, name string, servicePlan CfnServicePlan, updatableParameters []string, params map[string]interface{}) osb.Plan {
	plan := osb.Plan{
		ID:          planId,
		Name:        name,
		Description: servicePlan.Description,
		Free:        aws.Bool(false),  // AWS Services aren't free of charge, usually.
		Bindable:    aws.Bool(true),
		Metadata: map[string]interface{}{
			"cost":            servicePlan.Cost,  // Cost is a simple string, usually a URL that points to a document detailing the currents costs.
			"costs":           servicePlan.Costs, // Optionally the template might also contain costs definined in the OpenServiceBrokerAPIs conventional format, described here: https://github.com/openservicebrokerapi/servicebroker/blob/master/profile.md#cost-object
			"displayName":     servicePlan.DisplayName,
			"longDescription": servicePlan.LongDescription,
		},
		Schemas: &osb.Schemas{ServiceInstance: &osb.ServiceInstanceSchema{}},
	}
	propsForCreate := make(map[string]interface{})
	var openshiftFormCreate []OpenshiftFormDefinition
	for nk, nv := range nonCfnParamDefs {
		openshiftFormCreate = openshiftFormAppend(openshiftFormCreate, nk, nv.(map[string]interface{}))
		nonCfnParam := make(map[string]interface{})
		for nnk, nnv := range nv.(map[string]interface{}) {
			if nnk != "display_group" {
				nonCfnParam[nnk] = nnv
			}
		}
		propsForCreate[nk] = nonCfnParam
	}
	propsForUpdate := make(map[string]interface{})
	requiredForCreate := make([]string, 0)
	requiredForUpdate := make([]string, 0)
	prescribed := make(map[string]string)
	var openshiftFormUpdate []OpenshiftFormDefinition
	for paramName, paramValue := range params {
		include := true
		for planParam, planValue := range servicePlan.ParameterValues {
			if planParam == paramName {
				include = false
				prescribed[planParam] = planValue
			}
		}
		required := false
		if paramValue.(map[string]interface{})["required"] != nil {
			required = paramValue.(map[string]interface{})["required"].(bool)
		}
		if include {
			openshiftFormCreate = openshiftFormAppend(openshiftFormCreate, paramName, paramValue.(map[string]interface{}))
			createParam := map[string]interface{}{}
			for nk, nv := range paramValue.(map[string]interface{}) {
				createParam[nk] = nv
			}
			for planDefaultParam, planDefaultValue := range servicePlan.ParameterDefaults {
				if planDefaultParam == paramName {
					glog.V(10).Infof("Updating default with plan default for plan %q param %q\n", name, paramName)
					createParam["default"] = planDefaultValue
				}
			}
			for _, v := range []string{"required", "display_group"} {
				delete(createParam, v)
			}
			propsForCreate[paramName] = createParam
			if required {
				requiredForCreate = append(requiredForCreate, paramName)
			}
			if stringInSlice(paramName, updatableParameters) {
				openshiftFormUpdate = openshiftFormAppend(openshiftFormUpdate, paramName, paramValue.(map[string]interface{}))
				updateParam := make(map[string]interface{})
				for nnk, nnv := range paramValue.(map[string]interface{}) {
					if nnk != "required" && nnk != "display_group" && nnk != "default" {
						updateParam[nnk] = nnv
					}
				}
				propsForUpdate[paramName] = updateParam
				if required {
					requiredForUpdate = append(requiredForUpdate, paramName)
				}
			}
		}
	}
	plan.Schemas.ServiceInstance.Create = &osb.InputParametersSchema{
		Parameters: map[string]interface{}{
			"type":       "object",
			"properties": propsForCreate,
			"$schema":    "http://json-schema.org/draft-06/schema#",
			"prescribed": prescribed,
		},
	}
	if len(openshiftFormCreate) > 0 {
		plan.Schemas.ServiceInstance.Create.Parameters.(map[string]interface{})["openshift_form_definition"] = openshiftFormCreate
	}
	if len(requiredForCreate) > 0 {
		// Cloud Foundry does not allow "required" to be an empty slice
		plan.Schemas.ServiceInstance.Create.Parameters.(map[string]interface{})["required"] = requiredForCreate
	}
	if len(propsForUpdate) > 0 {
		plan.Schemas.ServiceInstance.Update = &osb.InputParametersSchema{
			Parameters: map[string]interface{}{
				"type":       "object",
				"properties": propsForUpdate,
				"$schema":    "http://json-schema.org/draft-06/schema#",
				"prescribed": prescribed,
			},
		}
		if len(openshiftFormUpdate) > 0 {
			plan.Schemas.ServiceInstance.Update.Parameters.(map[string]interface{})["openshift_form_definition"] = openshiftFormCreate
		}
		if len(requiredForUpdate) > 0 {
			// Cloud Foundry does not allow "required" to be an empty slice
			plan.Schemas.ServiceInstance.Update.Parameters.(map[string]interface{})["required"] = requiredForUpdate
		}
	}
	return plan
}