github.com/cloudfoundry-community/cloudfoundry-cli@v6.44.1-0.20240130060226-cda5ed8e89a5+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 defaultDomain, domainWarnings, err := actor.DefaultDomain(orgGUID) 66 if err != nil { 67 return v2action.Route{}, domainWarnings, err 68 } 69 70 return v2action.Route{ 71 Host: appName, 72 Domain: defaultDomain, 73 SpaceGUID: spaceGUID, 74 }, domainWarnings, nil 75 } 76 77 func (Actor) routeInListBySettings(route v2action.Route, routes []v2action.Route) (v2action.Route, bool) { 78 for _, r := range routes { 79 if r.Host == route.Host && r.Path == route.Path && r.Port == route.Port && 80 r.SpaceGUID == route.SpaceGUID && r.Domain.GUID == route.Domain.GUID { 81 return r, true 82 } 83 } 84 85 return v2action.Route{}, false 86 }