github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+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 func (actor Actor) GetSpaceByNameAndOrganization(spaceName string, orgGUID string) (Space, Warnings, error) { 50 spaces, warnings, err := actor.CloudControllerClient.GetSpaces( 51 ccv3.Query{Key: ccv3.NameFilter, Values: []string{spaceName}}, 52 ccv3.Query{Key: ccv3.OrganizationGUIDFilter, Values: []string{orgGUID}}, 53 ) 54 55 if err != nil { 56 return Space{}, Warnings(warnings), err 57 } 58 59 if len(spaces) == 0 { 60 return Space{}, Warnings(warnings), actionerror.SpaceNotFoundError{Name: spaceName} 61 } 62 63 return actor.convertCCToActorSpace(spaces[0]), Warnings(warnings), nil 64 } 65 66 func (actor Actor) GetSpacesByGUIDs(guids ...string) ([]Space, Warnings, error) { 67 currentV3Ver := actor.CloudControllerClient.CloudControllerAPIVersion() 68 69 guidsSupport, err := versioncheck.IsMinimumAPIVersionMet(currentV3Ver, ccversion.MinVersionSpacesGUIDsParamV3) 70 if err != nil { 71 guidsSupport = false 72 } 73 74 queries := []ccv3.Query{} 75 if guidsSupport { 76 queries = []ccv3.Query{ccv3.Query{Key: ccv3.GUIDFilter, Values: guids}} 77 } 78 79 spaces, warnings, err := actor.CloudControllerClient.GetSpaces(queries...) 80 if err != nil { 81 return []Space{}, Warnings(warnings), err 82 } 83 84 var filteredSpaces []ccv3.Space 85 guidToSpaces := map[string]ccv3.Space{} 86 for _, space := range spaces { 87 guidToSpaces[space.GUID] = space 88 } 89 90 for _, guid := range guids { 91 filteredSpaces = append(filteredSpaces, guidToSpaces[guid]) 92 } 93 spaces = filteredSpaces 94 95 var v3Spaces []Space 96 for _, ccSpace := range spaces { 97 v3Spaces = append(v3Spaces, actor.convertCCToActorSpace(ccSpace)) 98 } 99 100 return v3Spaces, Warnings(warnings), nil 101 } 102 103 func (actor Actor) convertCCToActorSpace(space ccv3.Space) Space { 104 return Space{ 105 GUID: space.GUID, 106 Name: space.Name, 107 OrganizationGUID: space.Relationships[constant.RelationshipTypeOrganization].GUID, 108 } 109 }