github.com/ablease/cli@v6.37.1-0.20180613014814-3adbb7d7fb19+incompatible/api/cloudcontroller/ccv2/service_binding.go (about) 1 package ccv2 2 3 import ( 4 "bytes" 5 "encoding/json" 6 7 "code.cloudfoundry.org/cli/api/cloudcontroller" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/internal" 10 ) 11 12 // ServiceBinding represents a Cloud Controller Service Binding. 13 type ServiceBinding struct { 14 // GUID is the unique Service Binding identifier. 15 GUID string 16 // Name is the name of the service binding 17 Name string 18 // AppGUID is the associated application GUID. 19 AppGUID string 20 // ServiceInstanceGUID is the associated service GUID. 21 ServiceInstanceGUID string 22 } 23 24 // UnmarshalJSON helps unmarshal a Cloud Controller Service Binding response. 25 func (serviceBinding *ServiceBinding) UnmarshalJSON(data []byte) error { 26 var ccServiceBinding struct { 27 Metadata internal.Metadata 28 Entity struct { 29 AppGUID string `json:"app_guid"` 30 ServiceInstanceGUID string `json:"service_instance_guid"` 31 Name string `json:"name"` 32 } `json:"entity"` 33 } 34 err := cloudcontroller.DecodeJSON(data, &ccServiceBinding) 35 if err != nil { 36 return err 37 } 38 39 serviceBinding.AppGUID = ccServiceBinding.Entity.AppGUID 40 serviceBinding.GUID = ccServiceBinding.Metadata.GUID 41 serviceBinding.ServiceInstanceGUID = ccServiceBinding.Entity.ServiceInstanceGUID 42 serviceBinding.Name = ccServiceBinding.Entity.Name 43 return nil 44 } 45 46 // serviceBindingRequestBody represents the body of the service binding create 47 // request. 48 type serviceBindingRequestBody struct { 49 ServiceInstanceGUID string `json:"service_instance_guid"` 50 AppGUID string `json:"app_guid"` 51 Name string `json:"name,omitempty"` 52 Parameters map[string]interface{} `json:"parameters"` 53 } 54 55 func (client *Client) CreateServiceBinding(appGUID string, serviceInstanceGUID string, bindingName string, parameters map[string]interface{}) (ServiceBinding, Warnings, error) { 56 requestBody := serviceBindingRequestBody{ 57 ServiceInstanceGUID: serviceInstanceGUID, 58 AppGUID: appGUID, 59 Name: bindingName, 60 Parameters: parameters, 61 } 62 63 bodyBytes, err := json.Marshal(requestBody) 64 if err != nil { 65 return ServiceBinding{}, nil, err 66 } 67 68 request, err := client.newHTTPRequest(requestOptions{ 69 RequestName: internal.PostServiceBindingRequest, 70 Body: bytes.NewReader(bodyBytes), 71 }) 72 if err != nil { 73 return ServiceBinding{}, nil, err 74 } 75 76 var serviceBinding ServiceBinding 77 response := cloudcontroller.Response{ 78 Result: &serviceBinding, 79 } 80 81 err = client.connection.Make(request, &response) 82 if err != nil { 83 return ServiceBinding{}, response.Warnings, err 84 } 85 86 return serviceBinding, response.Warnings, nil 87 } 88 89 // DeleteServiceBinding will destroy the requested Service Binding. 90 func (client *Client) DeleteServiceBinding(serviceBindingGUID string) (Warnings, error) { 91 request, err := client.newHTTPRequest(requestOptions{ 92 RequestName: internal.DeleteServiceBindingRequest, 93 URIParams: map[string]string{"service_binding_guid": serviceBindingGUID}, 94 }) 95 if err != nil { 96 return nil, err 97 } 98 99 var response cloudcontroller.Response 100 err = client.connection.Make(request, &response) 101 return response.Warnings, err 102 } 103 104 // GetServiceBinding returns back a service binding with the proviced guid 105 func (client *Client) GetServiceBinding(guid string) (ServiceBinding, Warnings, error) { 106 request, err := client.newHTTPRequest(requestOptions{ 107 RequestName: internal.GetServiceBindingRequest, 108 URIParams: Params{"service_binding_guid": guid}, 109 }) 110 if err != nil { 111 return ServiceBinding{}, nil, err 112 } 113 114 var serviceBinding ServiceBinding 115 response := cloudcontroller.Response{ 116 Result: &serviceBinding, 117 } 118 119 err = client.connection.Make(request, &response) 120 return serviceBinding, response.Warnings, err 121 } 122 123 // GetServiceBindings returns back a list of Service Bindings based off of the 124 // provided filters. 125 func (client *Client) GetServiceBindings(filters ...Filter) ([]ServiceBinding, Warnings, error) { 126 request, err := client.newHTTPRequest(requestOptions{ 127 RequestName: internal.GetServiceBindingsRequest, 128 Query: ConvertFilterParameters(filters), 129 }) 130 if err != nil { 131 return nil, nil, err 132 } 133 134 var fullBindingsList []ServiceBinding 135 warnings, err := client.paginate(request, ServiceBinding{}, func(item interface{}) error { 136 if binding, ok := item.(ServiceBinding); ok { 137 fullBindingsList = append(fullBindingsList, binding) 138 } else { 139 return ccerror.UnknownObjectInListError{ 140 Expected: ServiceBinding{}, 141 Unexpected: item, 142 } 143 } 144 return nil 145 }) 146 147 return fullBindingsList, warnings, err 148 } 149 150 // GetServiceInstanceServiceBindings returns back a list of Service Bindings for the provided service instance GUID. 151 func (client *Client) GetServiceInstanceServiceBindings(serviceInstanceGUID string) ([]ServiceBinding, Warnings, error) { 152 request, err := client.newHTTPRequest(requestOptions{ 153 RequestName: internal.GetServiceInstanceServiceBindingsRequest, 154 URIParams: map[string]string{"service_instance_guid": serviceInstanceGUID}, 155 }) 156 if err != nil { 157 return nil, nil, err 158 } 159 160 var fullBindingsList []ServiceBinding 161 warnings, err := client.paginate(request, ServiceBinding{}, func(item interface{}) error { 162 if binding, ok := item.(ServiceBinding); ok { 163 fullBindingsList = append(fullBindingsList, binding) 164 } else { 165 return ccerror.UnknownObjectInListError{ 166 Expected: ServiceBinding{}, 167 Unexpected: item, 168 } 169 } 170 return nil 171 }) 172 173 return fullBindingsList, warnings, err 174 } 175 176 // GetUserProvidedServiceInstanceServiceBindings returns back a list of Service Bindings for the provided user provided service instance GUID. 177 func (client *Client) GetUserProvidedServiceInstanceServiceBindings(userProvidedServiceInstanceGUID string) ([]ServiceBinding, Warnings, error) { 178 request, err := client.newHTTPRequest(requestOptions{ 179 RequestName: internal.GetUserProvidedServiceInstanceServiceBindingsRequest, 180 URIParams: map[string]string{"user_provided_service_instance_guid": userProvidedServiceInstanceGUID}, 181 }) 182 if err != nil { 183 return nil, nil, err 184 } 185 186 var fullBindingsList []ServiceBinding 187 warnings, err := client.paginate(request, ServiceBinding{}, func(item interface{}) error { 188 if binding, ok := item.(ServiceBinding); ok { 189 fullBindingsList = append(fullBindingsList, binding) 190 } else { 191 return ccerror.UnknownObjectInListError{ 192 Expected: ServiceBinding{}, 193 Unexpected: item, 194 } 195 } 196 return nil 197 }) 198 199 return fullBindingsList, warnings, err 200 }