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