github.com/arunkumar7540/cli@v6.45.0+incompatible/actor/v7pushaction/route.go (about) 1 package v7pushaction 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/v2action" 6 "code.cloudfoundry.org/cli/actor/v7action" 7 log "github.com/sirupsen/logrus" 8 ) 9 10 func (actor Actor) CreateAndMapDefaultApplicationRoute(orgGUID string, spaceGUID string, app v7action.Application) (Warnings, error) { 11 log.Info("default route creation/mapping") 12 var warnings Warnings 13 defaultRoute, domainWarnings, err := actor.getDefaultRoute(orgGUID, spaceGUID, app.Name) 14 warnings = append(warnings, domainWarnings...) 15 if err != nil { 16 log.Errorln("getting default route:", err) 17 return warnings, err 18 } 19 log.WithField("defaultRoute", defaultRoute.String()).Debug("calculated default route") 20 21 boundRoutes, appRouteWarnings, err := actor.V2Actor.GetApplicationRoutes(app.GUID) 22 warnings = append(warnings, appRouteWarnings...) 23 if err != nil { 24 log.Errorln("getting application routes:", err) 25 return warnings, err 26 } 27 log.WithField("boundRoutes", boundRoutes.Summary()).Debug("existing app routes") 28 29 _, routeAlreadyBound := actor.routeInListBySettings(defaultRoute, boundRoutes) 30 if routeAlreadyBound { 31 return warnings, err 32 } 33 34 spaceRoute, spaceRouteWarnings, err := actor.V2Actor.FindRouteBoundToSpaceWithSettings(defaultRoute) 35 warnings = append(warnings, spaceRouteWarnings...) 36 routeAlreadyExists := true 37 switch err.(type) { 38 case actionerror.RouteNotFoundError: 39 routeAlreadyExists = false 40 case nil: 41 log.Debug("route already exists") 42 default: 43 log.Errorln("checking if route is in space:", err) 44 return warnings, err 45 } 46 47 if !routeAlreadyExists { 48 log.Debug("creating default route") 49 var createRouteWarning v2action.Warnings 50 spaceRoute, createRouteWarning, err = actor.V2Actor.CreateRoute(defaultRoute, false) 51 warnings = append(warnings, createRouteWarning...) 52 if err != nil { 53 log.Errorln("creating route:", err) 54 return warnings, err 55 } 56 } 57 58 log.Debug("mapping default route") 59 mapWarnings, err := actor.V2Actor.MapRouteToApplication(spaceRoute.GUID, app.GUID) 60 warnings = append(warnings, mapWarnings...) 61 return warnings, err 62 } 63 64 func (actor Actor) getDefaultRoute(orgGUID string, spaceGUID string, appName string) (v2action.Route, Warnings, error) { 65 v7defaultDomain, v7domainWarnings, err := actor.V7Actor.GetDefaultDomain(orgGUID) 66 67 domainWarnings := append(Warnings{}, v7domainWarnings...) 68 if err != nil { 69 return v2action.Route{}, domainWarnings, err 70 } 71 72 defaultDomain := v2action.Domain{ 73 Name: v7defaultDomain.Name, 74 GUID: v7defaultDomain.GUID, 75 } 76 return v2action.Route{ 77 Host: appName, 78 Domain: defaultDomain, 79 SpaceGUID: spaceGUID, 80 }, domainWarnings, nil 81 } 82 83 func (Actor) routeInListBySettings(route v2action.Route, routes []v2action.Route) (v2action.Route, bool) { 84 for _, r := range routes { 85 if r.Host == route.Host && r.Path == route.Path && r.Port == route.Port && 86 r.SpaceGUID == route.SpaceGUID && r.Domain.GUID == route.Domain.GUID { 87 return r, true 88 } 89 } 90 91 return v2action.Route{}, false 92 }