@@ -253,7 +253,11 @@ def create_user_provided(message)
253
253
end
254
254
255
255
def create_managed ( message , space :)
256
- service_plan = ServicePlan . first ( guid : message . service_plan_guid )
256
+ service_plan_relations = ServicePlan . eager_graph ( service : :service_broker ) .
257
+ where ( Sequel [ :service_plans ] [ :guid ] => message . service_plan_guid ) .
258
+ all
259
+ service_plan = service_plan_relations [ 0 ]
260
+
257
261
service_plan_does_not_exist! unless service_plan
258
262
service_plan_not_visible_to_user! ( service_plan ) unless visible_to_current_user? ( plan : service_plan )
259
263
unavailable_service_plan! ( service_plan ) unless service_plan_active? ( service_plan )
@@ -270,6 +274,16 @@ def create_managed(message, space:)
270
274
audit_hash : message . audit_hash
271
275
)
272
276
277
+ service_name = service_plan . service . name
278
+ broker_name = service_plan . service . service_broker . name
279
+
280
+ logger . info (
281
+ "Creating managed service instance with name '#{ instance . name } ' " \
282
+ "using service plan '#{ service_plan . name } ' " \
283
+ "from service offering '#{ service_name } ' " \
284
+ "provided by broker '#{ broker_name } '."
285
+ )
286
+
273
287
pollable_job = Jobs ::Enqueuer . new ( queue : Jobs ::Queues . generic ) . enqueue_pollable ( provision_job )
274
288
275
289
head :accepted , 'Location' => url_builder . build_url ( path : "/v3/jobs/#{ pollable_job . guid } " )
@@ -296,8 +310,12 @@ def update_managed(service_instance)
296
310
297
311
action = V3 ::ServiceInstanceUpdateManaged . new ( service_instance , message , user_audit_info , message . audit_hash )
298
312
action . preflight!
313
+
299
314
if action . update_broker_needed?
315
+ # enqueue_update will reload the service instance and we loose the eagerly loaded associations
316
+ service_instance_with_eager_load = service_instance . dup
300
317
update_job = action . enqueue_update
318
+ log_service_instance_update ( message , service_instance_with_eager_load )
301
319
head :accepted , 'Location' => url_builder . build_url ( path : "/v3/jobs/#{ update_job . guid } " )
302
320
else
303
321
service_instance = action . update_sync
@@ -309,6 +327,26 @@ def update_managed(service_instance)
309
327
raise CloudController ::Errors ::ApiError . new_from_details ( 'AsyncServiceBindingOperationInProgress' , e . service_binding . app . name , e . service_binding . service_instance . name )
310
328
end
311
329
330
+ def log_service_instance_update ( message , service_instance )
331
+ if message . service_plan_guid && message . service_plan_guid != service_instance . service_plan . guid
332
+ new_service_plan_name = ServicePlan . first ( guid : message . service_plan_guid ) . name
333
+
334
+ logger . info (
335
+ "Updating managed service instance with name '#{ service_instance . name } ' " \
336
+ "changing plan from '#{ service_instance . service_plan . name } ' to '#{ new_service_plan_name } ' " \
337
+ "from service offering '#{ service_instance . service_plan . service . label } ' " \
338
+ "provided by broker '#{ service_instance . service_plan . service . service_broker . name } '."
339
+ )
340
+ else
341
+ logger . info (
342
+ "Updating managed service instance with name '#{ service_instance . name } ' " \
343
+ "using service plan '#{ service_instance . service_plan . name } ' " \
344
+ "from service offering '#{ service_instance . service_plan . service . label } ' " \
345
+ "provided by broker '#{ service_instance . service_plan . service . service_broker . name } '."
346
+ )
347
+ end
348
+ end
349
+
312
350
def check_spaces_exist_and_are_writeable! ( service_instance , request_guids , found_spaces )
313
351
unreadable_spaces = found_spaces . reject { |s | can_read_from_space? ( s ) }
314
352
unwriteable_spaces = found_spaces . reject { |s | ( can_write_to_active_space? ( s ) && is_space_active? ( s ) ) || unreadable_spaces . include? ( s ) }
@@ -342,7 +380,10 @@ def build_create_message(params)
342
380
end
343
381
344
382
def fetch_writable_service_instance ( guid )
345
- service_instance = ServiceInstance . first ( guid :)
383
+ service_instances = ManagedServiceInstance . eager_graph ( service_plan : { service : :service_broker } ) . where ( Sequel [ :service_instances ] [ :guid ] => guid ) . all
384
+ service_instance = service_instances [ 0 ] unless service_instances . empty?
385
+ service_instance = UserProvidedServiceInstance . first ( guid :) if service_instance . nil?
386
+
346
387
service_instance_not_found! unless service_instance && can_read_service_instance? ( service_instance )
347
388
unauthorized! unless can_write_to_active_space? ( service_instance . space )
348
389
suspended! unless is_space_active? ( service_instance . space )
@@ -352,6 +393,18 @@ def fetch_writable_service_instance(guid)
352
393
353
394
def enqueue_delete_job ( service_instance )
354
395
delete_job = V3 ::DeleteServiceInstanceJob . new ( service_instance . guid , user_audit_info )
396
+
397
+ plan = service_instance . service_plan
398
+ service = plan . service
399
+ broker = service . service_broker
400
+
401
+ logger . info (
402
+ "Deleting managed service instance with name '#{ service_instance . name } ' " \
403
+ "using service plan '#{ plan . name } ' " \
404
+ "from service offering '#{ service . label } ' " \
405
+ "provided by broker '#{ broker . name } '."
406
+ )
407
+
355
408
pollable_job = Jobs ::Enqueuer . new ( queue : Jobs ::Queues . generic ) . enqueue_pollable ( delete_job )
356
409
pollable_job . guid
357
410
end
0 commit comments