github.com/LukasHeimann/cloudfoundrycli@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  }