github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/actor/v2action/space.go (about) 1 package v2action 2 3 import ( 4 "fmt" 5 6 "github.com/liamawhite/cli-with-i18n/api/cloudcontroller/ccv2" 7 ) 8 9 // Space represents a CLI Space 10 type Space ccv2.Space 11 12 // SpaceNotFoundError represents the scenario when the space searched for could 13 // not be found. 14 type SpaceNotFoundError struct { 15 GUID string 16 Name string 17 } 18 19 func (e SpaceNotFoundError) Error() string { 20 switch { 21 case e.Name != "": 22 return fmt.Sprintf("Space '%s' not found.", e.Name) 23 case e.GUID != "": 24 return fmt.Sprintf("Space with GUID '%s' not found.", e.GUID) 25 default: 26 return fmt.Sprintf("Space '' not found.") 27 } 28 } 29 30 // MultipleSpacesFoundError represents the scenario when the cloud 31 // controller returns multiple spaces when filtering by name. This is a 32 // far out edge case and should not happen. 33 type MultipleSpacesFoundError struct { 34 Name string 35 OrgGUID string 36 } 37 38 func (e MultipleSpacesFoundError) Error() string { 39 return fmt.Sprintf("Multiple spaces found matching organization GUID '%s' and name '%s'", e.OrgGUID, e.Name) 40 } 41 42 func (actor Actor) DeleteSpaceByNameAndOrganizationName(spaceName string, orgName string) (Warnings, error) { 43 var allWarnings Warnings 44 45 org, warnings, err := actor.GetOrganizationByName(orgName) 46 allWarnings = append(allWarnings, warnings...) 47 if err != nil { 48 return allWarnings, err 49 } 50 51 space, warnings, err := actor.GetSpaceByOrganizationAndName(org.GUID, spaceName) 52 allWarnings = append(allWarnings, warnings...) 53 if err != nil { 54 return allWarnings, err 55 } 56 57 job, deleteWarnings, err := actor.CloudControllerClient.DeleteSpace(space.GUID) 58 allWarnings = append(allWarnings, Warnings(deleteWarnings)...) 59 if err != nil { 60 return allWarnings, err 61 } 62 63 warnings, err = actor.PollJob(Job(job)) 64 allWarnings = append(allWarnings, Warnings(warnings)...) 65 66 return allWarnings, err 67 } 68 69 // GetOrganizationSpaces returns a list of spaces in the specified org 70 func (actor Actor) GetOrganizationSpaces(orgGUID string) ([]Space, Warnings, error) { 71 ccv2Spaces, warnings, err := actor.CloudControllerClient.GetSpaces(ccv2.Query{ 72 Filter: ccv2.OrganizationGUIDFilter, 73 Operator: ccv2.EqualOperator, 74 Values: []string{orgGUID}, 75 }) 76 if err != nil { 77 return []Space{}, Warnings(warnings), err 78 } 79 80 spaces := make([]Space, len(ccv2Spaces)) 81 for i, ccv2Space := range ccv2Spaces { 82 spaces[i] = Space(ccv2Space) 83 } 84 85 return spaces, Warnings(warnings), nil 86 } 87 88 // GetSpaceByOrganizationAndName returns an Space based on the org and name. 89 func (actor Actor) GetSpaceByOrganizationAndName(orgGUID string, spaceName string) (Space, Warnings, error) { 90 ccv2Spaces, warnings, err := actor.CloudControllerClient.GetSpaces( 91 ccv2.Query{ 92 Filter: ccv2.NameFilter, 93 Operator: ccv2.EqualOperator, 94 Values: []string{spaceName}, 95 }, 96 ccv2.Query{ 97 Filter: ccv2.OrganizationGUIDFilter, 98 Operator: ccv2.EqualOperator, 99 Values: []string{orgGUID}, 100 }, 101 ) 102 if err != nil { 103 return Space{}, Warnings(warnings), err 104 } 105 106 if len(ccv2Spaces) == 0 { 107 return Space{}, Warnings(warnings), SpaceNotFoundError{Name: spaceName} 108 } 109 110 if len(ccv2Spaces) > 1 { 111 return Space{}, Warnings(warnings), MultipleSpacesFoundError{OrgGUID: orgGUID, Name: spaceName} 112 } 113 114 return Space(ccv2Spaces[0]), Warnings(warnings), nil 115 }