diff --git a/domain/apiresponses/responses.go b/domain/apiresponses/responses.go index 3b4655c5..2c8c6c81 100644 --- a/domain/apiresponses/responses.go +++ b/domain/apiresponses/responses.go @@ -29,8 +29,9 @@ type CatalogResponse struct { } type ProvisioningResponse struct { - DashboardURL string `json:"dashboard_url,omitempty"` - OperationData string `json:"operation,omitempty"` + DashboardURL string `json:"dashboard_url,omitempty"` + OperationData string `json:"operation,omitempty"` + Metadata interface{} `json:"metadata,omitempty"` } type GetInstanceResponse struct { diff --git a/domain/apiresponses/responses_test.go b/domain/apiresponses/responses_test.go index d76e082a..5a63ee05 100644 --- a/domain/apiresponses/responses_test.go +++ b/domain/apiresponses/responses_test.go @@ -43,6 +43,20 @@ var _ = Describe("Provisioning Response", func() { Expect(json.Marshal(provisioningResponse)).To(MatchJSON(jsonString)) }) }) + + Context("when the metadata is present", func() { + It("returns it in the JSON", func() { + provisioningResponse := apiresponses.ProvisioningResponse{ + Metadata: domain.InstanceMetadata{ + Labels: map[string]string{"key1": "value1"}, + Attributes: map[string]string{"key1": "value1"}, + }, + } + jsonString := `{"metadata":{"labels":{"key1":"value1"}, "attributes":{"key1":"value1"}}}` + + Expect(json.Marshal(provisioningResponse)).To(MatchJSON(jsonString)) + }) + }) }) }) diff --git a/domain/service_broker.go b/domain/service_broker.go index 9aff08e1..ad186ad3 100644 --- a/domain/service_broker.go +++ b/domain/service_broker.go @@ -94,6 +94,12 @@ type ProvisionedServiceSpec struct { AlreadyExists bool DashboardURL string OperationData string + Metadata InstanceMetadata +} + +type InstanceMetadata struct { + Labels map[string]string `json:"labels,omitempty"` + Attributes map[string]string `json:"attributes,omitempty"` } type DeprovisionDetails struct { @@ -205,6 +211,10 @@ func (d BindDetails) GetRawParameters() json.RawMessage { return d.RawParameters } +func (m InstanceMetadata) IsEmpty() bool { + return len(m.Attributes) == 0 && len(m.Labels) == 0 +} + func (d UpdateDetails) GetRawContext() json.RawMessage { return d.RawContext } diff --git a/handlers/provision.go b/handlers/provision.go index 1d9677d5..6e5c0c1b 100644 --- a/handlers/provision.go +++ b/handlers/provision.go @@ -111,18 +111,26 @@ func (h *APIHandler) Provision(w http.ResponseWriter, req *http.Request) { return } + var metadata interface{} + if !provisionResponse.Metadata.IsEmpty() { + metadata = provisionResponse.Metadata + } + if provisionResponse.AlreadyExists { h.respond(w, http.StatusOK, apiresponses.ProvisioningResponse{ DashboardURL: provisionResponse.DashboardURL, + Metadata: metadata, }) } else if provisionResponse.IsAsync { h.respond(w, http.StatusAccepted, apiresponses.ProvisioningResponse{ DashboardURL: provisionResponse.DashboardURL, OperationData: provisionResponse.OperationData, + Metadata: metadata, }) } else { h.respond(w, http.StatusCreated, apiresponses.ProvisioningResponse{ DashboardURL: provisionResponse.DashboardURL, + Metadata: metadata, }) } }