github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/actor/v2action/service_binding.go (about) 1 package v2action 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2" 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant" 7 ) 8 9 // ServiceBinding represents the link between a service instance and an 10 // application. 11 type ServiceBinding ccv2.ServiceBinding 12 13 // BindServiceByApplicationAndServiceInstance binds the service instance to an application. 14 func (actor Actor) BindServiceByApplicationAndServiceInstance(appGUID string, serviceInstanceGUID string) (Warnings, error) { 15 _, warnings, err := actor.CloudControllerClient.CreateServiceBinding(appGUID, serviceInstanceGUID, nil) 16 17 return Warnings(warnings), err 18 } 19 20 // BindServiceBySpace binds the service instance to an application for a given space. 21 func (actor Actor) BindServiceBySpace(appName string, serviceInstanceName string, spaceGUID string, parameters map[string]interface{}) (Warnings, error) { 22 var allWarnings Warnings 23 app, warnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID) 24 allWarnings = append(allWarnings, warnings...) 25 if err != nil { 26 return allWarnings, err 27 } 28 29 serviceInstance, warnings, err := actor.GetServiceInstanceByNameAndSpace(serviceInstanceName, spaceGUID) 30 allWarnings = append(allWarnings, warnings...) 31 if err != nil { 32 return allWarnings, err 33 } 34 35 _, ccv2Warnings, err := actor.CloudControllerClient.CreateServiceBinding(app.GUID, serviceInstance.GUID, parameters) 36 allWarnings = append(allWarnings, ccv2Warnings...) 37 38 return allWarnings, err 39 } 40 41 // GetServiceBindingByApplicationAndServiceInstance returns a service binding 42 // given an application GUID and and service instance GUID. 43 func (actor Actor) GetServiceBindingByApplicationAndServiceInstance(appGUID string, serviceInstanceGUID string) (ServiceBinding, Warnings, error) { 44 serviceBindings, warnings, err := actor.CloudControllerClient.GetServiceBindings( 45 ccv2.Filter{ 46 Type: constant.AppGUIDFilter, 47 Operator: constant.EqualOperator, 48 Values: []string{appGUID}, 49 }, 50 ccv2.Filter{ 51 Type: constant.ServiceInstanceGUIDFilter, 52 Operator: constant.EqualOperator, 53 Values: []string{serviceInstanceGUID}, 54 }, 55 ) 56 57 if err != nil { 58 return ServiceBinding{}, Warnings(warnings), err 59 } 60 61 if len(serviceBindings) == 0 { 62 return ServiceBinding{}, Warnings(warnings), actionerror.ServiceBindingNotFoundError{ 63 AppGUID: appGUID, 64 ServiceInstanceGUID: serviceInstanceGUID, 65 } 66 } 67 68 return ServiceBinding(serviceBindings[0]), Warnings(warnings), err 69 } 70 71 // UnbindServiceBySpace deletes the service binding between an application and 72 // service instance for a given space. 73 func (actor Actor) UnbindServiceBySpace(appName string, serviceInstanceName string, spaceGUID string) (Warnings, error) { 74 var allWarnings Warnings 75 76 app, warnings, err := actor.GetApplicationByNameAndSpace(appName, spaceGUID) 77 allWarnings = append(allWarnings, warnings...) 78 if err != nil { 79 return allWarnings, err 80 } 81 82 serviceInstance, warnings, err := actor.GetServiceInstanceByNameAndSpace(serviceInstanceName, spaceGUID) 83 allWarnings = append(allWarnings, warnings...) 84 if err != nil { 85 return allWarnings, err 86 } 87 88 serviceBinding, warnings, err := actor.GetServiceBindingByApplicationAndServiceInstance(app.GUID, serviceInstance.GUID) 89 allWarnings = append(allWarnings, warnings...) 90 if err != nil { 91 return allWarnings, err 92 } 93 94 ccWarnings, err := actor.CloudControllerClient.DeleteServiceBinding(serviceBinding.GUID) 95 allWarnings = append(allWarnings, ccWarnings...) 96 97 return allWarnings, err 98 } 99 100 func (actor Actor) GetServiceBindingsByServiceInstance(serviceInstanceGUID string) ([]ServiceBinding, Warnings, error) { 101 serviceBindings, warnings, err := actor.CloudControllerClient.GetServiceInstanceServiceBindings(serviceInstanceGUID) 102 if err != nil { 103 return nil, Warnings(warnings), err 104 } 105 106 allServiceBindings := []ServiceBinding{} 107 for _, serviceBinding := range serviceBindings { 108 allServiceBindings = append(allServiceBindings, ServiceBinding(serviceBinding)) 109 } 110 111 return allServiceBindings, Warnings(warnings), nil 112 } 113 114 func (actor Actor) GetServiceBindingsByUserProvidedServiceInstance(userProvidedServiceInstanceGUID string) ([]ServiceBinding, Warnings, error) { 115 serviceBindings, warnings, err := actor.CloudControllerClient.GetUserProvidedServiceInstanceServiceBindings(userProvidedServiceInstanceGUID) 116 if err != nil { 117 return nil, Warnings(warnings), err 118 } 119 allServiceBindings := []ServiceBinding{} 120 for _, serviceBinding := range serviceBindings { 121 allServiceBindings = append(allServiceBindings, ServiceBinding(serviceBinding)) 122 } 123 124 return allServiceBindings, Warnings(warnings), nil 125 }