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