github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+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  }