github.com/arunkumar7540/cli@v6.45.0+incompatible/actor/v7action/route.go (about) 1 package v7action 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/ccv3" 7 ) 8 9 type Route struct { 10 GUID string 11 SpaceGUID string 12 DomainGUID string 13 Host string 14 Path string 15 DomainName string 16 SpaceName string 17 } 18 19 func (actor Actor) CreateRoute(orgName, spaceName, domainName, hostname, path string) (Warnings, error) { 20 allWarnings := Warnings{} 21 domain, warnings, err := actor.GetDomainByName(domainName) 22 allWarnings = append(allWarnings, warnings...) 23 24 if err != nil { 25 return allWarnings, err 26 } 27 28 org, warnings, err := actor.GetOrganizationByName(orgName) 29 allWarnings = append(allWarnings, warnings...) 30 if err != nil { 31 return allWarnings, err 32 } 33 34 space, warnings, err := actor.GetSpaceByNameAndOrganization(spaceName, org.GUID) 35 allWarnings = append(allWarnings, warnings...) 36 if err != nil { 37 return allWarnings, err 38 } 39 40 if path != "" && string(path[0]) != "/" { 41 path = "/" + path 42 } 43 _, apiWarnings, err := actor.CloudControllerClient.CreateRoute(ccv3.Route{ 44 SpaceGUID: space.GUID, 45 DomainGUID: domain.GUID, 46 Host: hostname, 47 Path: path, 48 }) 49 50 actorWarnings := Warnings(apiWarnings) 51 allWarnings = append(allWarnings, actorWarnings...) 52 53 if _, ok := err.(ccerror.RouteNotUniqueError); ok { 54 return allWarnings, actionerror.RouteAlreadyExistsError{Err: err} 55 } 56 57 return allWarnings, err 58 } 59 60 func (actor Actor) GetRoutesBySpace(spaceGUID string) ([]Route, Warnings, error) { 61 allWarnings := Warnings{} 62 63 routes, warnings, err := actor.CloudControllerClient.GetRoutes(ccv3.Query{ 64 Key: ccv3.SpaceGUIDFilter, 65 Values: []string{spaceGUID}, 66 }) 67 allWarnings = append(allWarnings, warnings...) 68 if err != nil { 69 return nil, allWarnings, err 70 } 71 72 spaces, warnings, err := actor.CloudControllerClient.GetSpaces(ccv3.Query{ 73 Key: ccv3.GUIDFilter, 74 Values: []string{spaceGUID}, 75 }) 76 allWarnings = append(allWarnings, warnings...) 77 if err != nil { 78 return nil, allWarnings, err 79 } 80 81 domainGUIDsSet := map[string]struct{}{} 82 for _, route := range routes { 83 domainGUIDsSet[route.DomainGUID] = struct{}{} 84 } 85 domainGUIDs := []string{} 86 for elem := range domainGUIDsSet { 87 domainGUIDs = append(domainGUIDs, elem) 88 } 89 90 domains, warnings, err := actor.CloudControllerClient.GetDomains(ccv3.Query{ 91 Key: ccv3.GUIDFilter, 92 Values: domainGUIDs, 93 }) 94 allWarnings = append(allWarnings, warnings...) 95 if err != nil { 96 return nil, allWarnings, err 97 } 98 99 spacesByGUID := map[string]ccv3.Space{} 100 for _, space := range spaces { 101 spacesByGUID[space.GUID] = space 102 } 103 104 domainsByGUID := map[string]ccv3.Domain{} 105 for _, domain := range domains { 106 domainsByGUID[domain.GUID] = domain 107 } 108 109 actorRoutes := []Route{} 110 for _, route := range routes { 111 actorRoutes = append(actorRoutes, Route{ 112 GUID: route.GUID, 113 Host: route.Host, 114 Path: route.Path, 115 SpaceGUID: route.SpaceGUID, 116 DomainGUID: route.DomainGUID, 117 SpaceName: spacesByGUID[route.SpaceGUID].Name, 118 DomainName: domainsByGUID[route.DomainGUID].Name, 119 }) 120 } 121 122 return actorRoutes, allWarnings, nil 123 } 124 125 func (actor Actor) GetRoutesByOrg(orgGUID string) ([]Route, Warnings, error) { 126 allWarnings := Warnings{} 127 128 routes, warnings, err := actor.CloudControllerClient.GetRoutes(ccv3.Query{ 129 Key: ccv3.OrganizationGUIDFilter, 130 Values: []string{orgGUID}, 131 }) 132 allWarnings = append(allWarnings, warnings...) 133 if err != nil { 134 return nil, allWarnings, err 135 } 136 137 spaceGUIDsSet := map[string]struct{}{} 138 domainGUIDsSet := map[string]struct{}{} 139 spacesQuery := ccv3.Query{Key: ccv3.GUIDFilter, Values: []string{}} 140 domainsQuery := ccv3.Query{Key: ccv3.GUIDFilter, Values: []string{}} 141 142 for _, route := range routes { 143 if _, ok := spaceGUIDsSet[route.SpaceGUID]; !ok { 144 spacesQuery.Values = append(spacesQuery.Values, route.SpaceGUID) 145 spaceGUIDsSet[route.SpaceGUID] = struct{}{} 146 } 147 148 if _, ok := domainGUIDsSet[route.DomainGUID]; !ok { 149 domainsQuery.Values = append(domainsQuery.Values, route.DomainGUID) 150 domainGUIDsSet[route.DomainGUID] = struct{}{} 151 } 152 } 153 154 spaces, warnings, err := actor.CloudControllerClient.GetSpaces(spacesQuery) 155 allWarnings = append(allWarnings, warnings...) 156 if err != nil { 157 return nil, allWarnings, err 158 } 159 160 domains, warnings, err := actor.CloudControllerClient.GetDomains(domainsQuery) 161 allWarnings = append(allWarnings, warnings...) 162 if err != nil { 163 return nil, allWarnings, err 164 } 165 166 spacesByGUID := map[string]ccv3.Space{} 167 for _, space := range spaces { 168 spacesByGUID[space.GUID] = space 169 } 170 171 domainsByGUID := map[string]ccv3.Domain{} 172 for _, domain := range domains { 173 domainsByGUID[domain.GUID] = domain 174 } 175 176 actorRoutes := []Route{} 177 for _, route := range routes { 178 actorRoutes = append(actorRoutes, Route{ 179 GUID: route.GUID, 180 Host: route.Host, 181 Path: route.Path, 182 SpaceGUID: route.SpaceGUID, 183 DomainGUID: route.DomainGUID, 184 SpaceName: spacesByGUID[route.SpaceGUID].Name, 185 DomainName: domainsByGUID[route.DomainGUID].Name, 186 }) 187 } 188 189 return actorRoutes, allWarnings, nil 190 } 191 192 func (actor Actor) DeleteRoute(domainName, hostname, path string) (Warnings, error) { 193 allWarnings := Warnings{} 194 domain, warnings, err := actor.GetDomainByName(domainName) 195 allWarnings = append(allWarnings, warnings...) 196 197 if err != nil { 198 return allWarnings, err 199 } 200 201 if path != "" && string(path[0]) != "/" { 202 path = "/" + path 203 } 204 205 routes, apiWarnings, err := actor.CloudControllerClient.GetRoutes([]ccv3.Query{ 206 {Key: "domain_guids", Values: []string{domain.GUID}}, 207 {Key: "hosts", Values: []string{hostname}}, 208 {Key: "paths", Values: []string{path}}, 209 }...) 210 211 actorWarnings := Warnings(apiWarnings) 212 allWarnings = append(allWarnings, actorWarnings...) 213 214 if err != nil { 215 return allWarnings, err 216 } 217 218 if len(routes) == 0 { 219 return allWarnings, actionerror.RouteNotFoundError{ 220 DomainName: domainName, 221 Host: hostname, 222 Path: path, 223 } 224 } 225 _, apiWarnings, err = actor.CloudControllerClient.DeleteRoute(routes[0].GUID) 226 227 actorWarnings = Warnings(apiWarnings) 228 allWarnings = append(allWarnings, actorWarnings...) 229 230 return allWarnings, err 231 }