func (appRunner *appRunner) updateLrpRoutes(name string, routes RouteOverrides) error { appRoutes := route_helpers.AppRoutes{} routeMap := make(map[uint16][]string) for _, override := range routes { routeMap[override.Port] = append(routeMap[override.Port], fmt.Sprintf("%s.%s", override.HostnamePrefix, appRunner.systemDomain)) } for port, hostnames := range routeMap { appRoutes = append(appRoutes, route_helpers.AppRoute{ Hostnames: hostnames, Port: port, }) } err := appRunner.receptorClient.UpdateDesiredLRP( name, receptor.DesiredLRPUpdateRequest{ Routes: appRoutes.RoutingInfo(), }, ) return err }
func (appRunner *appRunner) desireLrp(params CreateAppParams) error { primaryPort := uint16(0) if params.Monitor.Port != 0 { primaryPort = params.Monitor.Port } else if len(params.ExposedPorts) > 0 { primaryPort = params.ExposedPorts[0] } envVars := buildEnvironmentVariables(params.EnvironmentVariables) envVars = append(envVars, receptor.EnvironmentVariable{Name: "PORT", Value: fmt.Sprintf("%d", primaryPort)}) var appRoutes route_helpers.AppRoutes if params.NoRoutes { appRoutes = route_helpers.AppRoutes{} } else if len(params.RouteOverrides) > 0 { routeMap := make(map[uint16][]string) for _, override := range params.RouteOverrides { routeMap[override.Port] = append(routeMap[override.Port], fmt.Sprintf("%s.%s", override.HostnamePrefix, appRunner.systemDomain)) } for port, hostnames := range routeMap { appRoutes = append(appRoutes, route_helpers.AppRoute{ Hostnames: hostnames, Port: port, }) } } else { appRoutes = appRunner.buildDefaultRoutingInfo(params.Name, params.ExposedPorts, primaryPort) } req := receptor.DesiredLRPCreateRequest{ ProcessGuid: params.Name, Domain: lrpDomain, RootFS: params.RootFS, Instances: params.Instances, Routes: appRoutes.RoutingInfo(), CPUWeight: params.CPUWeight, MemoryMB: params.MemoryMB, DiskMB: params.DiskMB, Privileged: params.Privileged, Ports: params.ExposedPorts, LogGuid: params.Name, LogSource: "APP", MetricsGuid: params.Name, EnvironmentVariables: envVars, Setup: params.Setup, Action: &models.RunAction{ Path: params.StartCommand, Args: params.AppArgs, Dir: params.WorkingDir, }, } var healthCheckArgs []string if params.Monitor.Timeout != 0 { healthCheckArgs = append(healthCheckArgs, "-timeout", fmt.Sprint(params.Monitor.Timeout)) } switch params.Monitor.Method { case PortMonitor: req.Monitor = &models.RunAction{ Path: "/tmp/healthcheck", Args: append(healthCheckArgs, "-port", fmt.Sprint(params.Monitor.Port)), LogSource: "HEALTH", } case URLMonitor: req.Monitor = &models.RunAction{ Path: "/tmp/healthcheck", Args: append(healthCheckArgs, "-port", fmt.Sprint(params.Monitor.Port), "-uri", params.Monitor.URI), LogSource: "HEALTH", } } return appRunner.receptorClient.CreateDesiredLRP(req) }
Port: 22222, } route3 = route_helpers.AppRoute{ Hostnames: []string{"foo3.example.com", "bar3.examaple.com"}, Port: 33333, } routes = route_helpers.AppRoutes{route1, route2, route3} }) Describe("AppRoutes", func() { Describe("RoutingInfo", func() { var routingInfo receptor.RoutingInfo JustBeforeEach(func() { routingInfo = routes.RoutingInfo() }) It("wraps the serialized routes with the correct key", func() { expectedBytes, err := json.Marshal(routes) Expect(err).ToNot(HaveOccurred()) payload, err := routingInfo[route_helpers.AppRouter].MarshalJSON() Expect(err).ToNot(HaveOccurred()) Expect(payload).To(MatchJSON(expectedBytes)) }) Context("when AppRoutes is empty", func() { BeforeEach(func() { routes = route_helpers.AppRoutes{}
Port: 22222, } appRoute3 = route_helpers.AppRoute{ Hostnames: []string{"foo3.example.com", "bar3.examaple.com"}, Port: 33333, } appRoutes = route_helpers.AppRoutes{appRoute1, appRoute2, appRoute3} }) Describe("AppRoutes", func() { Describe("RoutingInfo", func() { var routingInfo receptor.RoutingInfo JustBeforeEach(func() { routingInfo = appRoutes.RoutingInfo() }) It("maps the serialized routes to the correct key", func() { expectedBytes := []byte(`[{"hostnames":["foo1.example.com","bar1.examaple.com"],"port":11111},{"hostnames":["foo2.example.com","bar2.examaple.com"],"port":22222},{"hostnames":["foo3.example.com","bar3.examaple.com"],"port":33333}]`) Expect(appRoutes.RoutingInfo()["cf-router"].MarshalJSON()).To(MatchJSON(expectedBytes)) }) Context("when AppRoutes is empty", func() { BeforeEach(func() { appRoutes = route_helpers.AppRoutes{} }) It("marshals an empty list", func() { payload, err := routingInfo["cf-router"].MarshalJSON() Expect(err).NotTo(HaveOccurred())
} appRoute3 = route_helpers.AppRoute{ Hostnames: []string{"foo3.example.com", "bar3.examaple.com"}, Port: 33333, } appRoutes = route_helpers.AppRoutes{appRoute1, appRoute2, appRoute3} }) Describe("AppRoutes", func() { Describe("RoutingInfo", func() { var routingInfo receptor.RoutingInfo JustBeforeEach(func() { routingInfo = appRoutes.RoutingInfo() }) It("wraps the serialized routes with the correct key", func() { expectedBytes, err := json.Marshal(appRoutes) Expect(err).NotTo(HaveOccurred()) payload, err := routingInfo[route_helpers.AppRouter].MarshalJSON() Expect(err).NotTo(HaveOccurred()) Expect(payload).To(MatchJSON(expectedBytes)) }) Context("when AppRoutes is empty", func() { BeforeEach(func() { appRoutes = route_helpers.AppRoutes{}