func (m Manifest) Applications() ([]models.AppParams, error) { rawData, err := expandProperties(m.Data, generator.NewWordGenerator()) if err != nil { return []models.AppParams{}, err } data := generic.NewMap(rawData) appMaps, err := m.getAppMaps(data) if err != nil { return []models.AppParams{}, err } var apps []models.AppParams var mapToAppErrs []error for _, appMap := range appMaps { app, err := mapToAppParams(filepath.Dir(m.Path), appMap) if err != nil { mapToAppErrs = append(mapToAppErrs, err) continue } apps = append(apps, app) } if len(mapToAppErrs) > 0 { message := "" for i := range mapToAppErrs { message = message + fmt.Sprintf("%s\n", mapToAppErrs[i].Error()) } return []models.AppParams{}, errors.New(message) } return apps, nil }
func (routeActor routeActor) FindAndBindRoute(routeName string, app models.Application, appParamsFromContext models.AppParams) error { routeWithoutPath, path := routeActor.FindPath(routeName) routeWithoutPathAndPort, port, err := routeActor.FindPort(routeWithoutPath) if err != nil { return err } if len(appParamsFromContext.Domains) == 1 { routeWithoutPathAndPort, err = routeActor.replaceDomain(routeWithoutPathAndPort, appParamsFromContext.Domains[0]) if err != nil { return err } } hostname, domain, err := routeActor.FindDomain(routeWithoutPathAndPort) if err != nil { return err } if appParamsFromContext.RoutePath != nil && *appParamsFromContext.RoutePath != "" && domain.RouterGroupType != tcp { path = *appParamsFromContext.RoutePath } if appParamsFromContext.UseRandomRoute && domain.RouterGroupType != tcp { hostname = generator.NewWordGenerator().Babble() } replaceHostname(domain.RouterGroupType, appParamsFromContext.Hosts, &hostname) err = validateRoute(domain.Name, domain.RouterGroupType, port, path) if err != nil { return err } route, err := routeActor.FindOrCreateRoute(hostname, domain, path, port, appParamsFromContext.UseRandomRoute) if err != nil { return err } return routeActor.BindRoute(app, route) }
func NewDependency(writer io.Writer, logger trace.Printer, envDialTimeout string) Dependency { deps := Dependency{} deps.TeePrinter = terminal.NewTeePrinter(writer) deps.UI = terminal.NewUI(os.Stdin, writer, deps.TeePrinter, logger) errorHandler := func(err error) { if err != nil { deps.UI.Failed(fmt.Sprintf("Config error: %s", err)) } } configPath, err := confighelpers.DefaultFilePath() if err != nil { errorHandler(err) } deps.Config = coreconfig.NewRepositoryFromFilepath(configPath, errorHandler) deps.ManifestRepo = manifest.NewDiskRepository() deps.AppManifest = manifest.NewGenerator() pluginPath := filepath.Join(confighelpers.PluginRepoDir(), ".cf", "plugins") deps.PluginConfig = pluginconfig.NewPluginConfig( errorHandler, configuration.NewDiskPersistor(filepath.Join(pluginPath, "config.json")), pluginPath, ) terminal.UserAskedForColors = deps.Config.ColorEnabled() terminal.InitColorSupport() deps.Gateways = map[string]net.Gateway{ "cloud-controller": net.NewCloudControllerGateway(deps.Config, time.Now, deps.UI, logger, envDialTimeout), "uaa": net.NewUAAGateway(deps.Config, deps.UI, logger, envDialTimeout), "routing-api": net.NewRoutingAPIGateway(deps.Config, time.Now, deps.UI, logger, envDialTimeout), } deps.RepoLocator = api.NewRepositoryLocator(deps.Config, deps.Gateways, logger) deps.PluginModels = &PluginModels{Application: nil} deps.PlanBuilder = planbuilder.NewBuilder( deps.RepoLocator.GetServicePlanRepository(), deps.RepoLocator.GetServicePlanVisibilityRepository(), deps.RepoLocator.GetOrganizationRepository(), ) deps.ServiceBuilder = servicebuilder.NewBuilder( deps.RepoLocator.GetServiceRepository(), deps.PlanBuilder, ) deps.BrokerBuilder = brokerbuilder.NewBuilder( deps.RepoLocator.GetServiceBrokerRepository(), deps.ServiceBuilder, ) deps.PluginRepo = pluginrepo.NewPluginRepo() deps.ServiceHandler = actors.NewServiceHandler( deps.RepoLocator.GetOrganizationRepository(), deps.BrokerBuilder, deps.ServiceBuilder, ) deps.ServicePlanHandler = actors.NewServicePlanHandler( deps.RepoLocator.GetServicePlanRepository(), deps.RepoLocator.GetServicePlanVisibilityRepository(), deps.RepoLocator.GetOrganizationRepository(), deps.PlanBuilder, deps.ServiceBuilder, ) deps.WordGenerator = generator.NewWordGenerator() deps.AppZipper = appfiles.ApplicationZipper{} deps.AppFiles = appfiles.ApplicationFiles{} deps.RouteActor = actors.NewRouteActor(deps.UI, deps.RepoLocator.GetRouteRepository(), deps.RepoLocator.GetDomainRepository()) deps.PushActor = actors.NewPushActor(deps.RepoLocator.GetApplicationBitsRepository(), deps.AppZipper, deps.AppFiles, deps.RouteActor) deps.ChecksumUtil = utils.NewSha1Checksum("") deps.Logger = logger return deps }