github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+incompatible/api/cloudcontroller/ccv2/user_provided_service_instance.go (about) 1 package ccv2 2 3 import ( 4 "bytes" 5 "code.cloudfoundry.org/cli/api/cloudcontroller" 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 7 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/internal" 8 "encoding/json" 9 ) 10 11 // UserProvidedServiceInstance represents a Cloud Controller user provided service instance. 12 type UserProvidedServiceInstance struct { 13 // GUID is the unique user provided service instance identifier. 14 GUID string 15 16 // Name is the name given to the user provided service instance. 17 Name string 18 19 // The guid of the space in which the instance will be created 20 SpaceGuid string 21 22 // URL to which logs will be streamed for bound applications. 23 SyslogDrainUrl string 24 25 // A hash exposed in the VCAP_SERVICES environment variable for bound applications. 26 Credentials map[string]interface{} 27 28 // URL to which requests for bound routes will be forwarded. 29 RouteServiceUrl string 30 31 // A list of tags for the service instance. Max characters: 2048 32 Tags []string 33 } 34 35 // MarshalJSON converts an user provided service instance into a Cloud Controller user provided service instance. 36 func (o UserProvidedServiceInstance) MarshalJSON() ([]byte, error) { 37 ccObj := struct { 38 Name string `json:"name,omitempty"` 39 SpaceGuid string `json:"space_guid,omitempty"` 40 SyslogDrainUrl string `json:"syslog_drain_url,omitempty"` 41 Credentials map[string]interface{} `json:"credentials,omitempty"` 42 RouteServiceUrl string `json:"route_service_url,omitempty"` 43 Tags []string `json:"tags,omitempty"` 44 }{ 45 Name: o.Name, 46 SpaceGuid: o.SpaceGuid, 47 SyslogDrainUrl: o.SyslogDrainUrl, 48 Credentials: o.Credentials, 49 RouteServiceUrl: o.RouteServiceUrl, 50 Tags: o.Tags, 51 } 52 53 return json.Marshal(ccObj) 54 } 55 56 // UnmarshalJSON helps unmarshal a Cloud Controller user provided service instance response. 57 func (o *UserProvidedServiceInstance) UnmarshalJSON(data []byte) error { 58 var ccObj struct { 59 Metadata internal.Metadata `json:"metadata"` 60 Entity struct { 61 Name string `json:"name"` 62 SpaceGuid string `json:"space_guid"` 63 SyslogDrainUrl string `json:"syslog_drain_url"` 64 Credentials map[string]interface{} `json:"credentials"` 65 RouteServiceUrl string `json:"route_service_url"` 66 Tags []string `json:"tags"` 67 } `json:"entity"` 68 } 69 err := cloudcontroller.DecodeJSON(data, &ccObj) 70 if err != nil { 71 return err 72 } 73 74 o.Name = ccObj.Entity.Name 75 o.GUID = ccObj.Metadata.GUID 76 o.SpaceGuid = ccObj.Entity.SpaceGuid 77 o.SyslogDrainUrl = ccObj.Entity.SyslogDrainUrl 78 o.Credentials = ccObj.Entity.Credentials 79 o.RouteServiceUrl = ccObj.Entity.RouteServiceUrl 80 o.Tags = ccObj.Entity.Tags 81 82 return nil 83 } 84 85 // GetUserProvidedServiceInstances returns back a list of user provided service instances based off of the 86 // provided filters. 87 func (client *Client) GetUserProvServiceInstances(filters ...Filter) ([]UserProvidedServiceInstance, Warnings, error) { 88 request, err := client.newHTTPRequest(requestOptions{ 89 RequestName: internal.GetUserProvidedServiceInstancesRequest, 90 Query: ConvertFilterParameters(filters), 91 }) 92 if err != nil { 93 return nil, nil, err 94 } 95 96 var fullObjList []UserProvidedServiceInstance 97 warnings, err := client.paginate(request, UserProvidedServiceInstance{}, func(item interface{}) error { 98 if app, ok := item.(UserProvidedServiceInstance); ok { 99 fullObjList = append(fullObjList, app) 100 } else { 101 return ccerror.UnknownObjectInListError{ 102 Expected: UserProvidedServiceInstance{}, 103 Unexpected: item, 104 } 105 } 106 return nil 107 }) 108 109 return fullObjList, warnings, err 110 } 111 112 // GetUserProvidedServiceInstances returns back a list of *user provided* Service Instances based 113 // off the provided queries. 114 func (client *Client) GetUserProvidedServiceInstances(filters ...Filter) ([]ServiceInstance, Warnings, error) { 115 request, err := client.newHTTPRequest(requestOptions{ 116 RequestName: internal.GetUserProvidedServiceInstancesRequest, 117 Query: ConvertFilterParameters(filters), 118 }) 119 if err != nil { 120 return nil, nil, err 121 } 122 123 var fullInstancesList []ServiceInstance 124 warnings, err := client.paginate(request, ServiceInstance{}, func(item interface{}) error { 125 if instance, ok := item.(ServiceInstance); ok { 126 fullInstancesList = append(fullInstancesList, instance) 127 } else { 128 return ccerror.UnknownObjectInListError{ 129 Expected: ServiceInstance{}, 130 Unexpected: item, 131 } 132 } 133 return nil 134 }) 135 136 return fullInstancesList, warnings, err 137 } 138 139 // CreateUserProvidedServiceInstance creates a cloud controller user provided service instance in with the given settings. 140 func (client *Client) CreateUserProvidedServiceInstance(userProvidedServiceInstance UserProvidedServiceInstance) (UserProvidedServiceInstance, Warnings, error) { 141 body, err := json.Marshal(userProvidedServiceInstance) 142 if err != nil { 143 return UserProvidedServiceInstance{}, nil, err 144 } 145 146 request, err := client.newHTTPRequest(requestOptions{ 147 RequestName: internal.PostUserProvidedServiceInstancesRequest, 148 Body: bytes.NewReader(body), 149 }) 150 if err != nil { 151 return UserProvidedServiceInstance{}, nil, err 152 } 153 154 var updatedObj UserProvidedServiceInstance 155 response := cloudcontroller.Response{ 156 DecodeJSONResponseInto: &updatedObj, 157 } 158 159 err = client.connection.Make(request, &response) 160 return updatedObj, response.Warnings, err 161 } 162 163 // UpdateUserProvidedServiceInstance updates the user provided service instance with the given GUID. 164 func (client *Client) UpdateUserProvidedServiceInstance(userProvidedServiceInstance UserProvidedServiceInstance) (UserProvidedServiceInstance, Warnings, error) { 165 body, err := json.Marshal(userProvidedServiceInstance) 166 if err != nil { 167 return UserProvidedServiceInstance{}, nil, err 168 } 169 170 request, err := client.newHTTPRequest(requestOptions{ 171 RequestName: internal.PutUserProvidedServiceInstanceRequest, 172 URIParams: Params{"user_provided_service_instance_guid": userProvidedServiceInstance.GUID}, 173 Body: bytes.NewReader(body), 174 }) 175 if err != nil { 176 return UserProvidedServiceInstance{}, nil, err 177 } 178 179 var updatedObj UserProvidedServiceInstance 180 response := cloudcontroller.Response{ 181 DecodeJSONResponseInto: &updatedObj, 182 } 183 184 err = client.connection.Make(request, &response) 185 return updatedObj, response.Warnings, err 186 } 187 188 // GetUserProvidedServiceInstance returns back a user provided service instance. 189 func (client *Client) GetUserProvidedServiceInstance(guid string) (UserProvidedServiceInstance, Warnings, error) { 190 request, err := client.newHTTPRequest(requestOptions{ 191 RequestName: internal.GetUserProvidedServiceInstanceRequest, 192 URIParams: Params{ 193 "user_provided_service_instance_guid": guid, 194 }, 195 }) 196 if err != nil { 197 return UserProvidedServiceInstance{}, nil, err 198 } 199 200 var obj UserProvidedServiceInstance 201 response := cloudcontroller.Response{ 202 DecodeJSONResponseInto: &obj, 203 } 204 205 err = client.connection.Make(request, &response) 206 return obj, response.Warnings, err 207 } 208 209 // DeleteUserProvidedServiceInstance delete a user provided service instance 210 func (client *Client) DeleteUserProvidedServiceInstance(guid string) (Warnings, error) { 211 request, err := client.newHTTPRequest(requestOptions{ 212 RequestName: internal.DeleteUserProvidedServiceInstanceRequest, 213 URIParams: Params{ 214 "user_provided_service_instance_guid": guid, 215 }, 216 }) 217 if err != nil { 218 return nil, err 219 } 220 221 response := cloudcontroller.Response{} 222 223 err = client.connection.Make(request, &response) 224 return response.Warnings, err 225 }