github.com/swisscom/cloudfoundry-cli@v7.1.0+incompatible/api/cloudcontroller/ccv3/service_offering.go (about) 1 package ccv3 2 3 import ( 4 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 5 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/internal" 6 "code.cloudfoundry.org/cli/resources" 7 ) 8 9 // GetServiceOffering lists service offering with optional filters. 10 func (client *Client) GetServiceOfferings(query ...Query) ([]resources.ServiceOffering, Warnings, error) { 11 var result []resources.ServiceOffering 12 13 query = append(query, Query{Key: FieldsServiceBroker, Values: []string{"name", "guid"}}) 14 15 included, warnings, err := client.MakeListRequest(RequestParams{ 16 RequestName: internal.GetServiceOfferingsRequest, 17 Query: query, 18 ResponseBody: resources.ServiceOffering{}, 19 AppendToList: func(item interface{}) error { 20 result = append(result, item.(resources.ServiceOffering)) 21 return nil 22 }, 23 }) 24 25 brokerNameLookup := make(map[string]string) 26 for _, b := range included.ServiceBrokers { 27 brokerNameLookup[b.GUID] = b.Name 28 } 29 30 for i, _ := range result { 31 result[i].ServiceBrokerName = brokerNameLookup[result[i].ServiceBrokerGUID] 32 } 33 34 return result, warnings, err 35 } 36 37 func (client *Client) GetServiceOfferingByNameAndBroker(serviceOfferingName, serviceBrokerName string) (resources.ServiceOffering, Warnings, error) { 38 query := []Query{{Key: NameFilter, Values: []string{serviceOfferingName}}} 39 if serviceBrokerName != "" { 40 query = append(query, Query{Key: ServiceBrokerNamesFilter, Values: []string{serviceBrokerName}}) 41 } 42 43 offerings, warnings, err := client.GetServiceOfferings(query...) 44 if err != nil { 45 return resources.ServiceOffering{}, warnings, err 46 } 47 48 switch len(offerings) { 49 case 0: 50 return resources.ServiceOffering{}, warnings, ccerror.ServiceOfferingNotFoundError{ 51 ServiceOfferingName: serviceOfferingName, 52 ServiceBrokerName: serviceBrokerName, 53 } 54 case 1: 55 return offerings[0], warnings, nil 56 default: 57 return resources.ServiceOffering{}, warnings, ccerror.ServiceOfferingNameAmbiguityError{ 58 ServiceOfferingName: serviceOfferingName, 59 ServiceBrokerNames: extractServiceBrokerNames(offerings), 60 } 61 } 62 } 63 64 func (client *Client) PurgeServiceOffering(serviceOfferingGUID string) (Warnings, error) { 65 _, warnings, err := client.MakeRequest(RequestParams{ 66 RequestName: internal.DeleteServiceOfferingRequest, 67 URIParams: internal.Params{"service_offering_guid": serviceOfferingGUID}, 68 Query: []Query{{Key: Purge, Values: []string{"true"}}}, 69 }) 70 return warnings, err 71 } 72 73 func extractServiceBrokerNames(offerings []resources.ServiceOffering) (result []string) { 74 for _, o := range offerings { 75 result = append(result, o.ServiceBrokerName) 76 } 77 return 78 }