-
Notifications
You must be signed in to change notification settings - Fork 0
/
space.go
127 lines (104 loc) · 3.81 KB
/
space.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
package v3action
import (
"code.cloudfoundry.org/cli/actor/actionerror"
"code.cloudfoundry.org/cli/actor/versioncheck"
"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant"
"code.cloudfoundry.org/cli/api/cloudcontroller/ccversion"
)
type Space struct {
GUID string
Name string
OrganizationGUID string
}
// ResetSpaceIsolationSegment disassociates a space from an isolation segment.
//
// If the space's organization has a default isolation segment, return its
// name. Otherwise return the empty string.
func (actor Actor) ResetSpaceIsolationSegment(orgGUID string, spaceGUID string) (string, Warnings, error) {
var allWarnings Warnings
_, apiWarnings, err := actor.CloudControllerClient.UpdateSpaceIsolationSegmentRelationship(spaceGUID, "")
allWarnings = append(allWarnings, apiWarnings...)
if err != nil {
return "", allWarnings, err
}
isoSegRelationship, apiWarnings, err := actor.CloudControllerClient.GetOrganizationDefaultIsolationSegment(orgGUID)
allWarnings = append(allWarnings, apiWarnings...)
if err != nil {
return "", allWarnings, err
}
var isoSegName string
if isoSegRelationship.GUID != "" {
isolationSegment, apiWarnings, err := actor.CloudControllerClient.GetIsolationSegment(isoSegRelationship.GUID)
allWarnings = append(allWarnings, apiWarnings...)
if err != nil {
return "", allWarnings, err
}
isoSegName = isolationSegment.Name
}
return isoSegName, allWarnings, nil
}
// GetOrganizationSpaces returns a list of spaces in the specified org
func (actor Actor) GetOrganizationSpaces(orgGUID string) ([]Space, Warnings, error) {
ccv3Spaces, warnings, err := actor.CloudControllerClient.GetSpaces(ccv3.Query{
Key: ccv3.OrganizationGUIDFilter,
Values: []string{orgGUID},
})
if err != nil {
return []Space{}, Warnings(warnings), err
}
spaces := make([]Space, len(ccv3Spaces))
for i, ccv3Space := range ccv3Spaces {
spaces[i] = actor.convertCCToActorSpace(ccv3Space)
}
return spaces, Warnings(warnings), nil
}
func (actor Actor) GetSpaceByNameAndOrganization(spaceName string, orgGUID string) (Space, Warnings, error) {
spaces, warnings, err := actor.CloudControllerClient.GetSpaces(
ccv3.Query{Key: ccv3.NameFilter, Values: []string{spaceName}},
ccv3.Query{Key: ccv3.OrganizationGUIDFilter, Values: []string{orgGUID}},
)
if err != nil {
return Space{}, Warnings(warnings), err
}
if len(spaces) == 0 {
return Space{}, Warnings(warnings), actionerror.SpaceNotFoundError{Name: spaceName}
}
return actor.convertCCToActorSpace(spaces[0]), Warnings(warnings), nil
}
func (actor Actor) GetSpacesByGUIDs(guids ...string) ([]Space, Warnings, error) {
currentV3Ver := actor.CloudControllerClient.CloudControllerAPIVersion()
guidsSupport, err := versioncheck.IsMinimumAPIVersionMet(currentV3Ver, ccversion.MinVersionSpacesGUIDsParamV3)
if err != nil {
guidsSupport = false
}
queries := []ccv3.Query{}
if guidsSupport {
queries = []ccv3.Query{ccv3.Query{Key: ccv3.GUIDFilter, Values: guids}}
}
spaces, warnings, err := actor.CloudControllerClient.GetSpaces(queries...)
if err != nil {
return []Space{}, Warnings(warnings), err
}
var filteredSpaces []ccv3.Space
guidToSpaces := map[string]ccv3.Space{}
for _, space := range spaces {
guidToSpaces[space.GUID] = space
}
for _, guid := range guids {
filteredSpaces = append(filteredSpaces, guidToSpaces[guid])
}
spaces = filteredSpaces
var v3Spaces []Space
for _, ccSpace := range spaces {
v3Spaces = append(v3Spaces, actor.convertCCToActorSpace(ccSpace))
}
return v3Spaces, Warnings(warnings), nil
}
func (actor Actor) convertCCToActorSpace(space ccv3.Space) Space {
return Space{
GUID: space.GUID,
Name: space.Name,
OrganizationGUID: space.Relationships[constant.RelationshipTypeOrganization].GUID,
}
}