github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/api/cloudcontroller/ccv3/space.go (about)

     1  package ccv3
     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/ccv3/internal"
    10  )
    11  
    12  // Space represents a Cloud Controller V3 Space.
    13  type Space struct {
    14  	// GUID is a unique space identifier.
    15  	GUID string `json:"guid,omitempty"`
    16  	// Name is the name of the space.
    17  	Name string `json:"name"`
    18  	// Relationships list the relationships to the space.
    19  	Relationships Relationships `json:"relationships,omitempty"`
    20  	// Metadata is used for custom tagging of API resources
    21  	Metadata *Metadata `json:"metadata,omitempty"`
    22  }
    23  
    24  func (client *Client) CreateSpace(space Space) (Space, Warnings, error) {
    25  	spaceBytes, err := json.Marshal(space)
    26  	if err != nil {
    27  		return Space{}, nil, err
    28  	}
    29  	request, err := client.newHTTPRequest(requestOptions{
    30  		RequestName: internal.PostSpaceRequest,
    31  		Body:        bytes.NewReader(spaceBytes),
    32  	})
    33  
    34  	if err != nil {
    35  		return Space{}, nil, err
    36  	}
    37  
    38  	var responseSpace Space
    39  	response := cloudcontroller.Response{
    40  		DecodeJSONResponseInto: &responseSpace,
    41  	}
    42  	err = client.connection.Make(request, &response)
    43  
    44  	return responseSpace, response.Warnings, err
    45  }
    46  
    47  func (client *Client) DeleteSpace(spaceGUID string) (JobURL, Warnings, error) {
    48  	request, err := client.newHTTPRequest(requestOptions{
    49  		RequestName: internal.DeleteSpaceRequest,
    50  		URIParams:   map[string]string{"space_guid": spaceGUID},
    51  	})
    52  	if err != nil {
    53  		return "", nil, err
    54  	}
    55  
    56  	response := cloudcontroller.Response{}
    57  	err = client.connection.Make(request, &response)
    58  	return JobURL(response.ResourceLocationURL), response.Warnings, err
    59  }
    60  
    61  // GetSpaces lists spaces with optional filters.
    62  func (client *Client) GetSpaces(query ...Query) ([]Space, Warnings, error) {
    63  	request, err := client.newHTTPRequest(requestOptions{
    64  		RequestName: internal.GetSpacesRequest,
    65  		Query:       query,
    66  	})
    67  	if err != nil {
    68  		return nil, nil, err
    69  	}
    70  
    71  	var fullSpacesList []Space
    72  	warnings, err := client.paginate(request, Space{}, func(item interface{}) error {
    73  		if space, ok := item.(Space); ok {
    74  			fullSpacesList = append(fullSpacesList, space)
    75  		} else {
    76  			return ccerror.UnknownObjectInListError{
    77  				Expected:   Space{},
    78  				Unexpected: item,
    79  			}
    80  		}
    81  		return nil
    82  	})
    83  
    84  	return fullSpacesList, warnings, err
    85  }
    86  
    87  func (client *Client) UpdateSpace(space Space) (Space, Warnings, error) {
    88  	spaceGUID := space.GUID
    89  	space.GUID = ""
    90  	space.Relationships = nil
    91  
    92  	spaceBytes, err := json.Marshal(space)
    93  	if err != nil {
    94  		return Space{}, nil, err
    95  	}
    96  	request, err := client.newHTTPRequest(requestOptions{
    97  		RequestName: internal.PatchSpaceRequest,
    98  		Body:        bytes.NewReader(spaceBytes),
    99  		URIParams:   map[string]string{"space_guid": spaceGUID},
   100  	})
   101  
   102  	if err != nil {
   103  		return Space{}, nil, err
   104  	}
   105  
   106  	var responseSpace Space
   107  	response := cloudcontroller.Response{
   108  		DecodeJSONResponseInto: &responseSpace,
   109  	}
   110  	err = client.connection.Make(request, &response)
   111  
   112  	if err != nil {
   113  		return Space{}, nil, err
   114  	}
   115  	return responseSpace, response.Warnings, err
   116  }