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 }