github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+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 // BrokerURL is the URL of the service broker. 17 BrokerURL string 18 // GUID is the unique Service Broker identifier. 19 GUID string 20 // Name is the name of the service broker. 21 Name string 22 // SpaceGUID is the space guid of the serivce broker. Only applies to space scoped service brokers. 23 SpaceGUID string 24 } 25 26 // UnmarshalJSON helps unmarshal a Cloud Controller Service Broker response. 27 func (serviceBroker *ServiceBroker) UnmarshalJSON(data []byte) error { 28 var ccServiceBroker struct { 29 Metadata internal.Metadata 30 Entity struct { 31 Name string `json:"name"` 32 BrokerURL string `json:"broker_url"` 33 AuthUsername string `json:"auth_username"` 34 SpaceGUID string `json:"space_guid"` 35 } `json:"entity"` 36 } 37 err := cloudcontroller.DecodeJSON(data, &ccServiceBroker) 38 if err != nil { 39 return err 40 } 41 42 serviceBroker.Name = ccServiceBroker.Entity.Name 43 serviceBroker.GUID = ccServiceBroker.Metadata.GUID 44 serviceBroker.BrokerURL = ccServiceBroker.Entity.BrokerURL 45 serviceBroker.AuthUsername = ccServiceBroker.Entity.AuthUsername 46 serviceBroker.SpaceGUID = ccServiceBroker.Entity.SpaceGUID 47 return nil 48 } 49 50 type createServiceBrokerRequestBody struct { 51 Name string `json:"name"` 52 BrokerURL string `json:"broker_url"` 53 AuthUsername string `json:"auth_username"` 54 AuthPassword string `json:"auth_password"` 55 SpaceGUID string `json:"space_guid,omitempty"` 56 } 57 58 // CreateServiceBroker posts a service broker resource with the provided 59 // attributes to the api and returns the result. 60 func (client *Client) CreateServiceBroker(brokerName, username, password, url, spaceGUID string) (ServiceBroker, Warnings, error) { 61 requestBody := createServiceBrokerRequestBody{ 62 Name: brokerName, 63 BrokerURL: url, 64 AuthUsername: username, 65 AuthPassword: password, 66 SpaceGUID: spaceGUID, 67 } 68 69 bodyBytes, err := json.Marshal(requestBody) 70 if err != nil { 71 return ServiceBroker{}, nil, err 72 } 73 74 request, err := client.newHTTPRequest(requestOptions{ 75 RequestName: internal.PostServiceBrokerRequest, 76 Body: bytes.NewReader(bodyBytes), 77 }) 78 79 if err != nil { 80 return ServiceBroker{}, nil, err 81 } 82 83 var serviceBroker ServiceBroker 84 response := cloudcontroller.Response{ 85 DecodeJSONResponseInto: &serviceBroker, 86 } 87 88 err = client.connection.Make(request, &response) 89 90 return serviceBroker, response.Warnings, err 91 } 92 93 // GetServiceBrokers returns back a list of Service Brokers given the provided 94 // filters. 95 func (client *Client) GetServiceBrokers(filters ...Filter) ([]ServiceBroker, Warnings, error) { 96 request, err := client.newHTTPRequest(requestOptions{ 97 RequestName: internal.GetServiceBrokersRequest, 98 Query: ConvertFilterParameters(filters), 99 }) 100 101 if err != nil { 102 return nil, nil, err 103 } 104 105 var fullBrokersList []ServiceBroker 106 warnings, err := client.paginate(request, ServiceBroker{}, func(item interface{}) error { 107 if broker, ok := item.(ServiceBroker); ok { 108 fullBrokersList = append(fullBrokersList, broker) 109 } else { 110 return ccerror.UnknownObjectInListError{ 111 Expected: ServiceBroker{}, 112 Unexpected: item, 113 } 114 } 115 return nil 116 }) 117 118 return fullBrokersList, warnings, err 119 }