github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/actor/v2action/space.go (about) 1 package v2action 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 6 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2" 7 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant" 8 uaaconst "code.cloudfoundry.org/cli/api/uaa/constant" 9 ) 10 11 // Space represents a CLI Space 12 type Space ccv2.Space 13 14 func (actor Actor) CreateSpace(spaceName, orgName, quotaName string) (Space, Warnings, error) { 15 var allWarnings Warnings 16 org, getOrgWarnings, err := actor.GetOrganizationByName(orgName) 17 allWarnings = append(allWarnings, Warnings(getOrgWarnings)...) 18 if err != nil { 19 return Space{}, allWarnings, err 20 } 21 22 var spaceQuota SpaceQuota 23 if quotaName != "" { 24 var getQuotaWarnings Warnings 25 spaceQuota, getQuotaWarnings, err = actor.GetSpaceQuotaByName(quotaName, org.GUID) 26 allWarnings = append(allWarnings, Warnings(getQuotaWarnings)...) 27 if err != nil { 28 return Space{}, allWarnings, err 29 } 30 } 31 32 space, spaceWarnings, err := actor.CloudControllerClient.CreateSpace(spaceName, org.GUID) 33 allWarnings = append(allWarnings, Warnings(spaceWarnings)...) 34 if err != nil { 35 if _, ok := err.(ccerror.SpaceNameTakenError); ok { 36 return Space{}, allWarnings, actionerror.SpaceNameTakenError{Name: spaceName} 37 } 38 return Space{}, allWarnings, err 39 } 40 41 if quotaName != "" { 42 var setQuotaWarnings Warnings 43 setQuotaWarnings, err = actor.SetSpaceQuota(space.GUID, spaceQuota.GUID) 44 allWarnings = append(allWarnings, Warnings(setQuotaWarnings)...) 45 46 if err != nil { 47 return Space{}, allWarnings, err 48 } 49 } 50 51 return Space(space), allWarnings, err 52 } 53 54 func (actor Actor) DeleteSpaceByNameAndOrganizationName(spaceName string, orgName string) (Warnings, error) { 55 var allWarnings Warnings 56 57 org, warnings, err := actor.GetOrganizationByName(orgName) 58 allWarnings = append(allWarnings, warnings...) 59 if err != nil { 60 return allWarnings, err 61 } 62 63 space, warnings, err := actor.GetSpaceByOrganizationAndName(org.GUID, spaceName) 64 allWarnings = append(allWarnings, warnings...) 65 if err != nil { 66 return allWarnings, err 67 } 68 69 job, deleteWarnings, err := actor.CloudControllerClient.DeleteSpaceJob(space.GUID) 70 allWarnings = append(allWarnings, Warnings(deleteWarnings)...) 71 if err != nil { 72 return allWarnings, err 73 } 74 75 warnings, err = actor.PollJob(Job(job)) 76 allWarnings = append(allWarnings, Warnings(warnings)...) 77 78 return allWarnings, err 79 } 80 81 // GetOrganizationSpaces returns a list of spaces in the specified org 82 func (actor Actor) GetOrganizationSpaces(orgGUID string) ([]Space, Warnings, error) { 83 ccv2Spaces, warnings, err := actor.CloudControllerClient.GetSpaces(ccv2.Filter{ 84 Type: constant.OrganizationGUIDFilter, 85 Operator: constant.EqualOperator, 86 Values: []string{orgGUID}, 87 }) 88 if err != nil { 89 return []Space{}, Warnings(warnings), err 90 } 91 92 spaces := make([]Space, len(ccv2Spaces)) 93 for i, ccv2Space := range ccv2Spaces { 94 spaces[i] = Space(ccv2Space) 95 } 96 97 return spaces, Warnings(warnings), nil 98 } 99 100 // GetSpaceByOrganizationAndName returns an Space based on the org and name. 101 func (actor Actor) GetSpaceByOrganizationAndName(orgGUID string, spaceName string) (Space, Warnings, error) { 102 ccv2Spaces, warnings, err := actor.CloudControllerClient.GetSpaces( 103 ccv2.Filter{ 104 Type: constant.NameFilter, 105 Operator: constant.EqualOperator, 106 Values: []string{spaceName}, 107 }, 108 ccv2.Filter{ 109 Type: constant.OrganizationGUIDFilter, 110 Operator: constant.EqualOperator, 111 Values: []string{orgGUID}, 112 }, 113 ) 114 if err != nil { 115 return Space{}, Warnings(warnings), err 116 } 117 118 if len(ccv2Spaces) == 0 { 119 return Space{}, Warnings(warnings), actionerror.SpaceNotFoundError{Name: spaceName} 120 } 121 122 if len(ccv2Spaces) > 1 { 123 return Space{}, Warnings(warnings), actionerror.MultipleSpacesFoundError{OrgGUID: orgGUID, Name: spaceName} 124 } 125 126 return Space(ccv2Spaces[0]), Warnings(warnings), nil 127 } 128 129 // GrantSpaceManagerByUsername makes the provided user a Space Manager in the 130 // space with the provided guid. 131 func (actor Actor) GrantSpaceManagerByUsername(orgGUID string, spaceGUID string, username string) (Warnings, error) { 132 if actor.Config.UAAGrantType() == string(uaaconst.GrantTypeClientCredentials) { 133 return actor.grantSpaceManagerByClientCredentials(orgGUID, spaceGUID, username) 134 } 135 136 return actor.grantSpaceManagerByUsername(orgGUID, spaceGUID, username) 137 } 138 139 func (actor Actor) grantSpaceManagerByClientCredentials(orgGUID string, spaceGUID string, clientID string) (Warnings, error) { 140 ccv2Warnings, err := actor.CloudControllerClient.UpdateOrganizationUser(orgGUID, clientID) 141 warnings := Warnings(ccv2Warnings) 142 if err != nil { 143 return warnings, err 144 } 145 146 ccv2Warnings, err = actor.CloudControllerClient.UpdateSpaceManager(spaceGUID, clientID) 147 warnings = append(warnings, Warnings(ccv2Warnings)...) 148 if err != nil { 149 return warnings, err 150 } 151 152 return warnings, err 153 } 154 155 func (actor Actor) grantSpaceManagerByUsername(orgGUID string, spaceGUID string, username string) (Warnings, error) { 156 ccv2Warnings, err := actor.CloudControllerClient.UpdateOrganizationUserByUsername(orgGUID, username) 157 warnings := Warnings(ccv2Warnings) 158 if err != nil { 159 return warnings, err 160 } 161 162 ccv2Warnings, err = actor.CloudControllerClient.UpdateSpaceManagerByUsername(spaceGUID, username) 163 warnings = append(warnings, Warnings(ccv2Warnings)...) 164 165 return warnings, err 166 } 167 168 // GrantSpaceDeveloperByUsername makes the provided user a Space Developer in the 169 // space with the provided guid. 170 func (actor Actor) GrantSpaceDeveloperByUsername(spaceGUID string, username string) (Warnings, error) { 171 if actor.Config.UAAGrantType() == string(uaaconst.GrantTypeClientCredentials) { 172 warnings, err := actor.CloudControllerClient.UpdateSpaceDeveloper(spaceGUID, username) 173 174 return Warnings(warnings), err 175 } 176 177 warnings, err := actor.CloudControllerClient.UpdateSpaceDeveloperByUsername(spaceGUID, username) 178 return Warnings(warnings), err 179 }