github.com/swisscom/cloudfoundry-cli@v7.1.0+incompatible/actor/v2action/composite/update_service_instance.go (about) 1 package composite 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/v2action" 6 ) 7 8 //go:generate counterfeiter . GetServiceInstanceActor 9 10 type GetServiceInstanceActor interface { 11 GetServiceInstanceByNameAndSpace(name string, spaceGUID string) (v2action.ServiceInstance, v2action.Warnings, error) 12 } 13 14 //go:generate counterfeiter . GetServicePlanActor 15 16 type GetServicePlanActor interface { 17 GetServicePlan(servicePlanGUID string) (v2action.ServicePlan, v2action.Warnings, error) 18 } 19 20 //go:generate counterfeiter . UpdateServiceInstanceMaintenanceInfoActor 21 22 type UpdateServiceInstanceMaintenanceInfoActor interface { 23 UpdateServiceInstanceMaintenanceInfo(serviceInsrtanceGUID string, maintenanceInfo v2action.MaintenanceInfo) (v2action.Warnings, error) 24 } 25 26 //go:generate counterfeiter . GetAPIVersionActor 27 28 type GetAPIVersionActor interface { 29 CloudControllerAPIVersion() string 30 } 31 32 type UpdateServiceInstanceCompositeActor struct { 33 GetServiceInstanceActor GetServiceInstanceActor 34 GetServicePlanActor GetServicePlanActor 35 UpdateServiceInstanceMaintenanceInfoActor UpdateServiceInstanceMaintenanceInfoActor 36 GetAPIVersionActor GetAPIVersionActor 37 } 38 39 // UpgradeServiceInstance requests update on the service instance with the `maintenance_info` available on the plan 40 func (c UpdateServiceInstanceCompositeActor) UpgradeServiceInstance(serviceInstance v2action.ServiceInstance) (v2action.Warnings, error) { 41 servicePlan, warnings, err := c.GetServicePlanActor.GetServicePlan(serviceInstance.ServicePlanGUID) 42 if err != nil { 43 return warnings, err 44 } 45 46 if !upgradeIsAvailable(serviceInstance, servicePlan) { 47 return warnings, actionerror.ServiceUpgradeNotAvailableError{} 48 } 49 50 updateWarnings, err := c.UpdateServiceInstanceMaintenanceInfoActor.UpdateServiceInstanceMaintenanceInfo( 51 serviceInstance.GUID, 52 v2action.MaintenanceInfo(servicePlan.MaintenanceInfo), 53 ) 54 55 return append(warnings, updateWarnings...), err 56 } 57 58 // GetServiceInstanceByNameAndSpace gets the service instance by name and space guid provided 59 func (c UpdateServiceInstanceCompositeActor) GetServiceInstanceByNameAndSpace(name string, spaceGUID string) (v2action.ServiceInstance, v2action.Warnings, error) { 60 return c.GetServiceInstanceActor.GetServiceInstanceByNameAndSpace(name, spaceGUID) 61 } 62 63 // CloudControllerAPIVersion returns the CloudController API version 64 func (c UpdateServiceInstanceCompositeActor) CloudControllerAPIVersion() string { 65 return c.GetAPIVersionActor.CloudControllerAPIVersion() 66 } 67 68 func upgradeIsAvailable(serviceInstance v2action.ServiceInstance, servicePlan v2action.ServicePlan) bool { 69 return serviceInstance.MaintenanceInfo.Version != servicePlan.MaintenanceInfo.Version 70 }