Skip to content

Commit a7cefed

Browse files
atanas-attodorov-wqAtanas Todorov
authored andcommitted
Cloud Foundry do not parse SB resonse and do not include custom metadata that comes from SI
1 parent 0e29a82 commit a7cefed

File tree

5 files changed

+59
-6
lines changed

5 files changed

+59
-6
lines changed

app/models/services/managed_service_instance.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@ class ManagedServiceInstance < ServiceInstance
1212

1313
export_attributes :name, :credentials, :service_plan_guid,
1414
:space_guid, :gateway_data, :dashboard_url, :type, :last_operation,
15-
:tags, :maintenance_info
15+
:tags, :maintenance_info, :broker_metadata
1616

1717
import_attributes :name, :service_plan_guid,
18-
:space_guid, :gateway_data, :maintenance_info
18+
:space_guid, :gateway_data, :maintenance_info, :broker_metadata
1919

2020
strip_attributes :name
2121

2222
plugin :after_initialize
2323

24-
serialize_attributes :json, :maintenance_info
24+
serialize_attributes :json, :maintenance_info, :broker_metadata
2525

2626
def validation_policies
2727
if space

app/presenters/v3/service_instance_presenter.rb

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def hash_common
5050
}
5151
},
5252
metadata: {
53-
labels: hashified_labels(service_instance.labels),
53+
labels: merged_labels,
5454
annotations: hashified_annotations(service_instance.annotations)
5555
},
5656
links: {
@@ -77,7 +77,7 @@ def hash_common
7777
end
7878

7979
def hash_additions_managed
80-
{
80+
hash = {
8181
type: 'managed',
8282
maintenance_info: maintenance_info,
8383
upgrade_available: upgrade_available,
@@ -101,6 +101,13 @@ def hash_additions_managed
101101
}
102102
}
103103
}
104+
105+
# Add broker metadata if present
106+
if service_instance.broker_metadata.present?
107+
hash[:broker_metadata] = service_instance.broker_metadata
108+
end
109+
110+
hash
104111
end
105112

106113
def hash_additions_user_provided
@@ -145,6 +152,21 @@ def last_operation
145152

146153
service_instance.last_operation.to_hash({})
147154
end
155+
156+
def merged_labels
157+
# Start with existing CF labels
158+
cf_labels = hashified_labels(service_instance.labels)
159+
160+
# Get broker metadata labels if they exist (only for managed service instances)
161+
broker_labels = {}
162+
if service_instance.is_a?(ManagedServiceInstance) && service_instance.broker_metadata.present?
163+
broker_metadata_labels = service_instance.broker_metadata.dig('labels')
164+
broker_labels = broker_metadata_labels if broker_metadata_labels.is_a?(Hash)
165+
end
166+
167+
# Merge broker labels into CF labels (broker labels take precedence for conflicts)
168+
cf_labels.merge(broker_labels)
169+
end
148170
end
149171
end
150172
end
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
Sequel.migration do
2+
change do
3+
alter_table :service_instances do
4+
add_column :broker_metadata, String, text: true
5+
end
6+
end
7+
end

lib/services/service_brokers/v2/client.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ def provision(instance, arbitrary_parameters: {}, accepts_incomplete: false, mai
5656
return_values = {
5757
instance: {
5858
credentials: {},
59-
dashboard_url: parsed_response['dashboard_url']
59+
dashboard_url: parsed_response['dashboard_url'],
60+
broker_metadata: parsed_response['metadata']
6061
},
6162
last_operation: {
6263
type: 'create',
@@ -203,6 +204,7 @@ def update(instance, plan, accepts_incomplete: false, arbitrary_parameters: nil,
203204
}
204205

205206
attributes[:dashboard_url] = dashboard_url if dashboard_url
207+
attributes[:broker_metadata] = parsed_response['metadata'] if parsed_response['metadata']
206208

207209
if state == 'in progress'
208210
proposed_changes = { service_plan_guid: plan.guid }

lib/services/service_brokers/v2/response_parser.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,17 @@ def provision_response_schema
263263
'operation' => {
264264
'type' => 'string',
265265
'maxLength' => 10_000
266+
},
267+
'metadata' => {
268+
'type' => 'object',
269+
'properties' => {
270+
'labels' => {
271+
'type' => 'object'
272+
},
273+
'attributes' => {
274+
'type' => 'object'
275+
}
276+
}
266277
}
267278
}
268279
}]
@@ -292,6 +303,17 @@ def update_response_schema
292303
'operation' => {
293304
'type' => 'string',
294305
'maxLength' => 10_000
306+
},
307+
'metadata' => {
308+
'type' => 'object',
309+
'properties' => {
310+
'labels' => {
311+
'type' => 'object'
312+
},
313+
'attributes' => {
314+
'type' => 'object'
315+
}
316+
}
295317
}
296318
}
297319
}]

0 commit comments

Comments
 (0)