github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+incompatible/api/cloudcontroller/ccv2/service_broker.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 // ServiceBroker represents a Cloud Controller Service Broker. 13 type ServiceBroker struct { 14 // AuthUsername is the HTTP Basic Auth username of the service broker. 15 AuthUsername string 16 // AuthPassword is the HTTP Basic Auth password of the service broker. 17 AuthPassword string 18 // BrokerURL is the URL of the service broker. 19 BrokerURL string 20 // GUID is the unique Service Broker identifier. 21 GUID string 22 // Name is the name of the service broker. 23 Name string 24 // SpaceGUID is the space guid of the serivce broker. Only applies to space scoped service brokers. 25 SpaceGUID string 26 } 27 28 // UnmarshalJSON helps unmarshal a Cloud Controller Service Broker response. 29 func (serviceBroker *ServiceBroker) UnmarshalJSON(data []byte) error { 30 var ccServiceBroker struct { 31 Metadata internal.Metadata 32 Entity struct { 33 Name string `json:"name"` 34 BrokerURL string `json:"broker_url"` 35 AuthUsername string `json:"auth_username"` 36 SpaceGUID string `json:"space_guid"` 37 } `json:"entity"` 38 } 39 err := cloudcontroller.DecodeJSON(data, &ccServiceBroker) 40 if err != nil { 41 return err 42 } 43 44 serviceBroker.Name = ccServiceBroker.Entity.Name 45 serviceBroker.GUID = ccServiceBroker.Metadata.GUID 46 serviceBroker.BrokerURL = ccServiceBroker.Entity.BrokerURL 47 serviceBroker.AuthUsername = ccServiceBroker.Entity.AuthUsername 48 serviceBroker.SpaceGUID = ccServiceBroker.Entity.SpaceGUID 49 return nil 50 } 51 52 // MarshalJSON helps marshal a Cloud Controller Service Broker request. 53 func (serviceBroker *ServiceBroker) MarshalJSON() ([]byte, error) { 54 ccObj := struct { 55 Name string `json:"name,omitempty"` 56 BrokerURL string `json:"broker_url,omitempty"` 57 AuthUsername string `json:"auth_username,omitempty"` 58 AuthPassword string `json:"auth_password,omitempty"` 59 }{ 60 Name: serviceBroker.Name, 61 BrokerURL: serviceBroker.BrokerURL, 62 AuthUsername: serviceBroker.AuthUsername, 63 AuthPassword: serviceBroker.AuthPassword, 64 } 65 66 return json.Marshal(ccObj) 67 } 68 69 type createServiceBrokerRequestBody struct { 70 Name string `json:"name"` 71 BrokerURL string `json:"broker_url"` 72 AuthUsername string `json:"auth_username"` 73 AuthPassword string `json:"auth_password"` 74 SpaceGUID string `json:"space_guid,omitempty"` 75 } 76 77 // CreateServiceBroker posts a service broker resource with the provided 78 // attributes to the api and returns the result. 79 func (client *Client) CreateServiceBroker(brokerName, username, password, url, spaceGUID string) (ServiceBroker, Warnings, error) { 80 requestBody := createServiceBrokerRequestBody{ 81 Name: brokerName, 82 BrokerURL: url, 83 AuthUsername: username, 84 AuthPassword: password, 85 SpaceGUID: spaceGUID, 86 } 87 88 bodyBytes, err := json.Marshal(requestBody) 89 if err != nil { 90 return ServiceBroker{}, nil, err 91 } 92 93 request, err := client.newHTTPRequest(requestOptions{ 94 RequestName: internal.PostServiceBrokerRequest, 95 Body: bytes.NewReader(bodyBytes), 96 }) 97 98 if err != nil { 99 return ServiceBroker{}, nil, err 100 } 101 102 var serviceBroker ServiceBroker 103 response := cloudcontroller.Response{ 104 DecodeJSONResponseInto: &serviceBroker, 105 } 106 107 err = client.connection.Make(request, &response) 108 109 return serviceBroker, response.Warnings, err 110 } 111 112 // GetServiceBrokers returns back a list of Service Brokers given the provided 113 // filters. 114 func (client *Client) GetServiceBrokers(filters ...Filter) ([]ServiceBroker, Warnings, error) { 115 request, err := client.newHTTPRequest(requestOptions{ 116 RequestName: internal.GetServiceBrokersRequest, 117 Query: ConvertFilterParameters(filters), 118 }) 119 120 if err != nil { 121 return nil, nil, err 122 } 123 124 var fullBrokersList []ServiceBroker 125 warnings, err := client.paginate(request, ServiceBroker{}, func(item interface{}) error { 126 if broker, ok := item.(ServiceBroker); ok { 127 fullBrokersList = append(fullBrokersList, broker) 128 } else { 129 return ccerror.UnknownObjectInListError{ 130 Expected: ServiceBroker{}, 131 Unexpected: item, 132 } 133 } 134 return nil 135 }) 136 137 return fullBrokersList, warnings, err 138 } 139 140 // UpdateServiceBroker updates the service broker with the given GUID. 141 func (client *Client) UpdateServiceBroker(serviceBroker ServiceBroker) (ServiceBroker, Warnings, error) { 142 body, err := json.Marshal(&serviceBroker) 143 if err != nil { 144 return ServiceBroker{}, nil, err 145 } 146 147 request, err := client.newHTTPRequest(requestOptions{ 148 RequestName: internal.PutServiceBrokerRequest, 149 URIParams: Params{"service_broker_guid": serviceBroker.GUID}, 150 Body: bytes.NewReader(body), 151 }) 152 if err != nil { 153 return ServiceBroker{}, nil, err 154 } 155 156 var updatedObj ServiceBroker 157 response := cloudcontroller.Response{ 158 DecodeJSONResponseInto: &updatedObj, 159 } 160 161 err = client.connection.Make(request, &response) 162 return updatedObj, response.Warnings, err 163 } 164 165 // DeleteServiceBroker delete a service broker 166 func (client *Client) DeleteServiceBroker(guid string) (Warnings, error) { 167 request, err := client.newHTTPRequest(requestOptions{ 168 RequestName: internal.DeleteServiceBrokerRequest, 169 URIParams: Params{ 170 "service_broker_guid": guid, 171 }, 172 }) 173 if err != nil { 174 return nil, err 175 } 176 177 response := cloudcontroller.Response{} 178 179 err = client.connection.Make(request, &response) 180 return response.Warnings, err 181 } 182 183 // GetServiceBroker returns back a service broker. 184 func (client *Client) GetServiceBroker(guid string) (ServiceBroker, Warnings, error) { 185 request, err := client.newHTTPRequest(requestOptions{ 186 RequestName: internal.GetServiceBrokerRequest, 187 URIParams: Params{ 188 "service_broker_guid": guid, 189 }, 190 }) 191 if err != nil { 192 return ServiceBroker{}, nil, err 193 } 194 195 var obj ServiceBroker 196 response := cloudcontroller.Response{ 197 DecodeJSONResponseInto: &obj, 198 } 199 200 err = client.connection.Make(request, &response) 201 return obj, response.Warnings, err 202 }