github.com/DaAlbrecht/cf-cli@v0.0.0-20231128151943-1fe19bb400b9/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  	"code.cloudfoundry.org/cli/util/lookuptable"
     8  )
     9  
    10  // GetServiceOffering lists service offering with optional filters.
    11  func (client *Client) GetServiceOfferings(query ...Query) ([]resources.ServiceOffering, Warnings, error) {
    12  	var result []resources.ServiceOffering
    13  
    14  	query = append(query, Query{Key: FieldsServiceBroker, Values: []string{"name", "guid"}})
    15  
    16  	included, warnings, err := client.MakeListRequest(RequestParams{
    17  		RequestName:  internal.GetServiceOfferingsRequest,
    18  		Query:        query,
    19  		ResponseBody: resources.ServiceOffering{},
    20  		AppendToList: func(item interface{}) error {
    21  			result = append(result, item.(resources.ServiceOffering))
    22  			return nil
    23  		},
    24  	})
    25  
    26  	brokerNameLookup := lookuptable.NameFromGUID(included.ServiceBrokers)
    27  
    28  	for i, _ := range result {
    29  		result[i].ServiceBrokerName = brokerNameLookup[result[i].ServiceBrokerGUID]
    30  	}
    31  
    32  	return result, warnings, err
    33  }
    34  
    35  func (client *Client) GetServiceOfferingByGUID(guid string) (resources.ServiceOffering, Warnings, error) {
    36  	if guid == "" {
    37  		return resources.ServiceOffering{}, nil, ccerror.ServiceOfferingNotFoundError{}
    38  	}
    39  
    40  	var result resources.ServiceOffering
    41  
    42  	_, warnings, err := client.MakeRequest(RequestParams{
    43  		RequestName:  internal.GetServiceOfferingRequest,
    44  		URIParams:    internal.Params{"service_offering_guid": guid},
    45  		ResponseBody: &result,
    46  	})
    47  
    48  	return result, warnings, err
    49  }
    50  
    51  func (client *Client) GetServiceOfferingByNameAndBroker(serviceOfferingName, serviceBrokerName string) (resources.ServiceOffering, Warnings, error) {
    52  	query := []Query{{Key: NameFilter, Values: []string{serviceOfferingName}}}
    53  	if serviceBrokerName != "" {
    54  		query = append(query, Query{Key: ServiceBrokerNamesFilter, Values: []string{serviceBrokerName}})
    55  	}
    56  
    57  	offerings, warnings, err := client.GetServiceOfferings(query...)
    58  	if err != nil {
    59  		return resources.ServiceOffering{}, warnings, err
    60  	}
    61  
    62  	switch len(offerings) {
    63  	case 0:
    64  		return resources.ServiceOffering{}, warnings, ccerror.ServiceOfferingNotFoundError{
    65  			ServiceOfferingName: serviceOfferingName,
    66  			ServiceBrokerName:   serviceBrokerName,
    67  		}
    68  	case 1:
    69  		return offerings[0], warnings, nil
    70  	default:
    71  		return resources.ServiceOffering{}, warnings, ccerror.ServiceOfferingNameAmbiguityError{
    72  			ServiceOfferingName: serviceOfferingName,
    73  			ServiceBrokerNames:  extractServiceBrokerNames(offerings),
    74  		}
    75  	}
    76  }
    77  
    78  func (client *Client) PurgeServiceOffering(serviceOfferingGUID string) (Warnings, error) {
    79  	_, warnings, err := client.MakeRequest(RequestParams{
    80  		RequestName: internal.DeleteServiceOfferingRequest,
    81  		URIParams:   internal.Params{"service_offering_guid": serviceOfferingGUID},
    82  		Query:       []Query{{Key: Purge, Values: []string{"true"}}},
    83  	})
    84  	return warnings, err
    85  }
    86  
    87  func extractServiceBrokerNames(offerings []resources.ServiceOffering) (result []string) {
    88  	for _, o := range offerings {
    89  		result = append(result, o.ServiceBrokerName)
    90  	}
    91  	return
    92  }