github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+incompatible/api/cloudcontroller/ccv2/user_provided_service_instance.go (about)

     1  package ccv2
     2  
     3  import (
     4  	"bytes"
     5  	"code.cloudfoundry.org/cli/api/cloudcontroller"
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccerror"
     7  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/internal"
     8  	"encoding/json"
     9  )
    10  
    11  // UserProvidedServiceInstance represents a Cloud Controller user provided service instance.
    12  type UserProvidedServiceInstance struct {
    13  	// GUID is the unique user provided service instance identifier.
    14  	GUID string
    15  
    16  	// Name is the name given to the user provided service instance.
    17  	Name string
    18  
    19  	// The guid of the space in which the instance will be created
    20  	SpaceGuid string
    21  
    22  	// URL to which logs will be streamed for bound applications.
    23  	SyslogDrainUrl string
    24  
    25  	// A hash exposed in the VCAP_SERVICES environment variable for bound applications.
    26  	Credentials map[string]interface{}
    27  
    28  	// URL to which requests for bound routes will be forwarded.
    29  	RouteServiceUrl string
    30  
    31  	// A list of tags for the service instance. Max characters: 2048
    32  	Tags []string
    33  }
    34  
    35  // MarshalJSON converts an user provided service instance into a Cloud Controller user provided service instance.
    36  func (o UserProvidedServiceInstance) MarshalJSON() ([]byte, error) {
    37  	ccObj := struct {
    38  		Name            string                 `json:"name,omitempty"`
    39  		SpaceGuid       string                 `json:"space_guid,omitempty"`
    40  		SyslogDrainUrl  string                 `json:"syslog_drain_url,omitempty"`
    41  		Credentials     map[string]interface{} `json:"credentials,omitempty"`
    42  		RouteServiceUrl string                 `json:"route_service_url,omitempty"`
    43  		Tags            []string               `json:"tags,omitempty"`
    44  	}{
    45  		Name:            o.Name,
    46  		SpaceGuid:       o.SpaceGuid,
    47  		SyslogDrainUrl:  o.SyslogDrainUrl,
    48  		Credentials:     o.Credentials,
    49  		RouteServiceUrl: o.RouteServiceUrl,
    50  		Tags:            o.Tags,
    51  	}
    52  
    53  	return json.Marshal(ccObj)
    54  }
    55  
    56  // UnmarshalJSON helps unmarshal a Cloud Controller user provided service instance response.
    57  func (o *UserProvidedServiceInstance) UnmarshalJSON(data []byte) error {
    58  	var ccObj struct {
    59  		Metadata internal.Metadata `json:"metadata"`
    60  		Entity   struct {
    61  			Name            string                 `json:"name"`
    62  			SpaceGuid       string                 `json:"space_guid"`
    63  			SyslogDrainUrl  string                 `json:"syslog_drain_url"`
    64  			Credentials     map[string]interface{} `json:"credentials"`
    65  			RouteServiceUrl string                 `json:"route_service_url"`
    66  			Tags            []string               `json:"tags"`
    67  		} `json:"entity"`
    68  	}
    69  	err := cloudcontroller.DecodeJSON(data, &ccObj)
    70  	if err != nil {
    71  		return err
    72  	}
    73  
    74  	o.Name = ccObj.Entity.Name
    75  	o.GUID = ccObj.Metadata.GUID
    76  	o.SpaceGuid = ccObj.Entity.SpaceGuid
    77  	o.SyslogDrainUrl = ccObj.Entity.SyslogDrainUrl
    78  	o.Credentials = ccObj.Entity.Credentials
    79  	o.RouteServiceUrl = ccObj.Entity.RouteServiceUrl
    80  	o.Tags = ccObj.Entity.Tags
    81  
    82  	return nil
    83  }
    84  
    85  // GetUserProvidedServiceInstances returns back a list of user provided service instances based off of the
    86  // provided filters.
    87  func (client *Client) GetUserProvServiceInstances(filters ...Filter) ([]UserProvidedServiceInstance, Warnings, error) {
    88  	request, err := client.newHTTPRequest(requestOptions{
    89  		RequestName: internal.GetUserProvidedServiceInstancesRequest,
    90  		Query:       ConvertFilterParameters(filters),
    91  	})
    92  	if err != nil {
    93  		return nil, nil, err
    94  	}
    95  
    96  	var fullObjList []UserProvidedServiceInstance
    97  	warnings, err := client.paginate(request, UserProvidedServiceInstance{}, func(item interface{}) error {
    98  		if app, ok := item.(UserProvidedServiceInstance); ok {
    99  			fullObjList = append(fullObjList, app)
   100  		} else {
   101  			return ccerror.UnknownObjectInListError{
   102  				Expected:   UserProvidedServiceInstance{},
   103  				Unexpected: item,
   104  			}
   105  		}
   106  		return nil
   107  	})
   108  
   109  	return fullObjList, warnings, err
   110  }
   111  
   112  // GetUserProvidedServiceInstances returns back a list of *user provided* Service Instances based
   113  // off the provided queries.
   114  func (client *Client) GetUserProvidedServiceInstances(filters ...Filter) ([]ServiceInstance, Warnings, error) {
   115  	request, err := client.newHTTPRequest(requestOptions{
   116  		RequestName: internal.GetUserProvidedServiceInstancesRequest,
   117  		Query:       ConvertFilterParameters(filters),
   118  	})
   119  	if err != nil {
   120  		return nil, nil, err
   121  	}
   122  
   123  	var fullInstancesList []ServiceInstance
   124  	warnings, err := client.paginate(request, ServiceInstance{}, func(item interface{}) error {
   125  		if instance, ok := item.(ServiceInstance); ok {
   126  			fullInstancesList = append(fullInstancesList, instance)
   127  		} else {
   128  			return ccerror.UnknownObjectInListError{
   129  				Expected:   ServiceInstance{},
   130  				Unexpected: item,
   131  			}
   132  		}
   133  		return nil
   134  	})
   135  
   136  	return fullInstancesList, warnings, err
   137  }
   138  
   139  // CreateUserProvidedServiceInstance creates a cloud controller user provided service instance in with the given settings.
   140  func (client *Client) CreateUserProvidedServiceInstance(userProvidedServiceInstance UserProvidedServiceInstance) (UserProvidedServiceInstance, Warnings, error) {
   141  	body, err := json.Marshal(userProvidedServiceInstance)
   142  	if err != nil {
   143  		return UserProvidedServiceInstance{}, nil, err
   144  	}
   145  
   146  	request, err := client.newHTTPRequest(requestOptions{
   147  		RequestName: internal.PostUserProvidedServiceInstancesRequest,
   148  		Body:        bytes.NewReader(body),
   149  	})
   150  	if err != nil {
   151  		return UserProvidedServiceInstance{}, nil, err
   152  	}
   153  
   154  	var updatedObj UserProvidedServiceInstance
   155  	response := cloudcontroller.Response{
   156  		DecodeJSONResponseInto: &updatedObj,
   157  	}
   158  
   159  	err = client.connection.Make(request, &response)
   160  	return updatedObj, response.Warnings, err
   161  }
   162  
   163  // UpdateUserProvidedServiceInstance updates the user provided service instance with the given GUID.
   164  func (client *Client) UpdateUserProvidedServiceInstance(userProvidedServiceInstance UserProvidedServiceInstance) (UserProvidedServiceInstance, Warnings, error) {
   165  	body, err := json.Marshal(userProvidedServiceInstance)
   166  	if err != nil {
   167  		return UserProvidedServiceInstance{}, nil, err
   168  	}
   169  
   170  	request, err := client.newHTTPRequest(requestOptions{
   171  		RequestName: internal.PutUserProvidedServiceInstanceRequest,
   172  		URIParams:   Params{"user_provided_service_instance_guid": userProvidedServiceInstance.GUID},
   173  		Body:        bytes.NewReader(body),
   174  	})
   175  	if err != nil {
   176  		return UserProvidedServiceInstance{}, nil, err
   177  	}
   178  
   179  	var updatedObj UserProvidedServiceInstance
   180  	response := cloudcontroller.Response{
   181  		DecodeJSONResponseInto: &updatedObj,
   182  	}
   183  
   184  	err = client.connection.Make(request, &response)
   185  	return updatedObj, response.Warnings, err
   186  }
   187  
   188  // GetUserProvidedServiceInstance returns back a user provided service instance.
   189  func (client *Client) GetUserProvidedServiceInstance(guid string) (UserProvidedServiceInstance, Warnings, error) {
   190  	request, err := client.newHTTPRequest(requestOptions{
   191  		RequestName: internal.GetUserProvidedServiceInstanceRequest,
   192  		URIParams: Params{
   193  			"user_provided_service_instance_guid": guid,
   194  		},
   195  	})
   196  	if err != nil {
   197  		return UserProvidedServiceInstance{}, nil, err
   198  	}
   199  
   200  	var obj UserProvidedServiceInstance
   201  	response := cloudcontroller.Response{
   202  		DecodeJSONResponseInto: &obj,
   203  	}
   204  
   205  	err = client.connection.Make(request, &response)
   206  	return obj, response.Warnings, err
   207  }
   208  
   209  // DeleteUserProvidedServiceInstance delete a user provided service instance
   210  func (client *Client) DeleteUserProvidedServiceInstance(guid string) (Warnings, error) {
   211  	request, err := client.newHTTPRequest(requestOptions{
   212  		RequestName: internal.DeleteUserProvidedServiceInstanceRequest,
   213  		URIParams: Params{
   214  			"user_provided_service_instance_guid": guid,
   215  		},
   216  	})
   217  	if err != nil {
   218  		return nil, err
   219  	}
   220  
   221  	response := cloudcontroller.Response{}
   222  
   223  	err = client.connection.Make(request, &response)
   224  	return response.Warnings, err
   225  }