func (cmd *DeleteRoute) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) []requirements.Requirement { if len(fc.Args()) != 1 { cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + commandregistry.Commands.CommandUsage("delete-route")) } if fc.IsSet("port") && (fc.IsSet("hostname") || fc.IsSet("path")) { cmd.ui.Failed(T("Cannot specify port together with hostname and/or path.")) } cmd.domainReq = requirementsFactory.NewDomainRequirement(fc.Args()[0]) requiredVersion, err := semver.Make("2.36.0") if err != nil { panic(err.Error()) } var reqs []requirements.Requirement if fc.String("path") != "" { reqs = append(reqs, requirementsFactory.NewMinAPIVersionRequirement("Option '--path'", requiredVersion)) } if fc.IsSet("port") { reqs = append(reqs, requirementsFactory.NewMinAPIVersionRequirement("Option '--port'", cf.TCPRoutingMinimumAPIVersion)) } reqs = append(reqs, []requirements.Requirement{ requirementsFactory.NewLoginRequirement(), cmd.domainReq, }...) return reqs }
func (cmd *RepoPlugins) Execute(c flags.FlagContext) error { var repos []models.PluginRepo repoName := c.String("r") repos = cmd.config.PluginRepos() for i := range repos { if repos[i].URL == "http://plugins.cloudfoundry.org" { repos[i].URL = "https://plugins.cloudfoundry.org" } } if repoName == "" { cmd.ui.Say(T("Getting plugins from all repositories ... ")) } else { index := cmd.findRepoIndex(repoName) if index != -1 { cmd.ui.Say(T("Getting plugins from repository '") + repoName + "' ...") repos = []models.PluginRepo{repos[index]} } else { return errors.New(repoName + T(" does not exist as an available plugin repo."+"\nTip: use `add-plugin-repo` command to add repos.")) } } cmd.ui.Say("") repoPlugins, repoError := cmd.pluginRepo.GetPlugins(repos) cmd.printTable(repoPlugins) cmd.printErrors(repoError) return nil }
func (cmd *UnmapRoute) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) []requirements.Requirement { if len(fc.Args()) != 2 { cmd.ui.Failed(T("Incorrect Usage. Requires app_name, domain_name as arguments\n\n") + command_registry.Commands.CommandUsage("unmap-route")) } domainName := fc.Args()[1] cmd.appReq = requirementsFactory.NewApplicationRequirement(fc.Args()[0]) cmd.domainReq = requirementsFactory.NewDomainRequirement(domainName) requiredVersion, err := semver.Make("2.36.0") if err != nil { panic(err.Error()) } var reqs []requirements.Requirement if fc.String("path") != "" { reqs = append(reqs, requirementsFactory.NewMinAPIVersionRequirement("Option '--path'", requiredVersion)) } reqs = append(reqs, []requirements.Requirement{ requirementsFactory.NewLoginRequirement(), cmd.appReq, cmd.domainReq, }...) return reqs }
func (cmd *CreateServiceKey) Execute(c flags.FlagContext) { serviceInstance := cmd.serviceInstanceRequirement.GetServiceInstance() serviceKeyName := c.Args()[1] params := c.String("c") paramsMap, err := json.ParseJsonFromFileOrString(params) if err != nil { cmd.ui.Failed(T("Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.")) } cmd.ui.Say(T("Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", map[string]interface{}{ "ServiceInstanceName": terminal.EntityNameColor(serviceInstance.Name), "ServiceKeyName": terminal.EntityNameColor(serviceKeyName), "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), })) err = cmd.serviceKeyRepo.CreateServiceKey(serviceInstance.Guid, serviceKeyName, paramsMap) switch err.(type) { case nil: cmd.ui.Ok() case *errors.ModelAlreadyExistsError: cmd.ui.Ok() cmd.ui.Warn(err.Error()) default: cmd.ui.Failed(err.Error()) } }
func (cmd *RepoPlugins) Execute(c flags.FlagContext) { var repos []models.PluginRepo repoName := c.String("r") repos = cmd.config.PluginRepos() if repoName == "" { cmd.ui.Say(T("Getting plugins from all repositories ... ")) } else { index := cmd.findRepoIndex(repoName) if index != -1 { cmd.ui.Say(T("Getting plugins from repository '") + repoName + "' ...") repos = []models.PluginRepo{repos[index]} } else { cmd.ui.Failed(repoName + T(" does not exist as an available plugin repo."+"\nTip: use `add-plugin-repo` command to add repos.")) } } cmd.ui.Say("") repoPlugins, repoError := cmd.pluginRepo.GetPlugins(repos) cmd.printTable(repoPlugins) cmd.printErrors(repoError) }
func (cmd *CreateUserProvidedService) Execute(c flags.FlagContext) { name := c.Args()[0] drainUrl := c.String("l") params := c.String("p") params = strings.Trim(params, `"`) paramsMap := make(map[string]interface{}) err := json.Unmarshal([]byte(params), ¶msMap) if err != nil && params != "" { paramsMap = cmd.mapValuesFromPrompt(params, paramsMap) } cmd.ui.Say(T("Creating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", map[string]interface{}{ "ServiceName": terminal.EntityNameColor(name), "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), })) apiErr := cmd.userProvidedServiceInstanceRepo.Create(name, drainUrl, paramsMap) if apiErr != nil { cmd.ui.Failed(apiErr.Error()) return } cmd.ui.Ok() }
func (cmd *CreateOrg) Execute(c flags.FlagContext) { name := c.Args()[0] cmd.ui.Say(T("Creating org {{.OrgName}} as {{.Username}}...", map[string]interface{}{ "OrgName": terminal.EntityNameColor(name), "Username": terminal.EntityNameColor(cmd.config.Username())})) org := models.Organization{OrganizationFields: models.OrganizationFields{Name: name}} quotaName := c.String("q") if quotaName != "" { quota, err := cmd.quotaRepo.FindByName(quotaName) if err != nil { cmd.ui.Failed(err.Error()) } org.QuotaDefinition.Guid = quota.Guid } err := cmd.orgRepo.Create(org) if err != nil { if apiErr, ok := err.(errors.HttpError); ok && apiErr.ErrorCode() == errors.ORG_EXISTS { cmd.ui.Ok() cmd.ui.Warn(T("Org {{.OrgName}} already exists", map[string]interface{}{"OrgName": name})) return } else { cmd.ui.Failed(err.Error()) } } cmd.ui.Ok() cmd.ui.Say(T("\nTIP: Use '{{.Command}}' to target new org", map[string]interface{}{"Command": terminal.CommandColor(cf.Name() + " target -o " + name)})) }
func (cmd *DeleteRoute) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) ([]requirements.Requirement, error) { if len(fc.Args()) != 1 { cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + command_registry.Commands.CommandUsage("delete-route")) } cmd.domainReq = requirementsFactory.NewDomainRequirement(fc.Args()[0]) requiredVersion, err := semver.Make("2.36.0") if err != nil { panic(err.Error()) } var reqs []requirements.Requirement if fc.String("path") != "" { reqs = append(reqs, requirementsFactory.NewMinAPIVersionRequirement("Option '--path'", requiredVersion)) } reqs = append(reqs, []requirements.Requirement{ requirementsFactory.NewLoginRequirement(), cmd.domainReq, }...) return reqs, nil }
func (cmd *Target) Execute(c flags.FlagContext) { orgName := c.String("o") spaceName := c.String("s") if orgName != "" { err := cmd.setOrganization(orgName) if err != nil { cmd.ui.Failed(err.Error()) } else if spaceName == "" { spaceList, apiErr := cmd.getSpaceList() if apiErr == nil && len(spaceList) == 1 { cmd.setSpace(spaceList[0].Name) } } } if spaceName != "" { err := cmd.setSpace(spaceName) if err != nil { cmd.ui.Failed(err.Error()) } } cmd.ui.ShowConfiguration(cmd.config) if !cmd.config.IsLoggedIn() { cmd.ui.PanicQuietly() } cmd.ui.NotifyUpdateIfNeeded(cmd.config) return }
func (cmd Login) setOrganization(c flags.FlagContext) (bool, error) { orgName := c.String("o") if orgName == "" { orgs, err := cmd.orgRepo.ListOrgs(maxChoices) if err != nil { return false, errors.New(T("Error finding available orgs\n{{.APIErr}}", map[string]interface{}{"APIErr": err.Error()})) } switch len(orgs) { case 0: return false, nil case 1: cmd.targetOrganization(orgs[0]) return true, nil default: orgName = cmd.promptForOrgName(orgs) if orgName == "" { cmd.ui.Say("") return false, nil } } } org, err := cmd.orgRepo.FindByName(orgName) if err != nil { return false, errors.New(T("Error finding org {{.OrgName}}\n{{.Err}}", map[string]interface{}{"OrgName": terminal.EntityNameColor(orgName), "Err": err.Error()})) } cmd.targetOrganization(org) return true, nil }
func (cmd *CreateQuota) Execute(context flags.FlagContext) { name := context.Args()[0] cmd.ui.Say(T("Creating quota {{.QuotaName}} as {{.Username}}...", map[string]interface{}{ "QuotaName": terminal.EntityNameColor(name), "Username": terminal.EntityNameColor(cmd.config.Username()), })) quota := models.QuotaFields{ Name: name, } memoryLimit := context.String("m") if memoryLimit != "" { parsedMemory, err := formatters.ToMegabytes(memoryLimit) if err != nil { cmd.ui.Failed(T("Invalid memory limit: {{.MemoryLimit}}\n{{.Err}}", map[string]interface{}{"MemoryLimit": memoryLimit, "Err": err})) } quota.MemoryLimit = parsedMemory } instanceMemoryLimit := context.String("i") if instanceMemoryLimit == "-1" || instanceMemoryLimit == "" { quota.InstanceMemoryLimit = -1 } else { parsedMemory, errr := formatters.ToMegabytes(instanceMemoryLimit) if errr != nil { cmd.ui.Failed(T("Invalid instance memory limit: {{.MemoryLimit}}\n{{.Err}}", map[string]interface{}{"MemoryLimit": instanceMemoryLimit, "Err": errr})) } quota.InstanceMemoryLimit = parsedMemory } if context.IsSet("r") { quota.RoutesLimit = context.Int("r") } if context.IsSet("s") { quota.ServicesLimit = context.Int("s") } if context.IsSet("allow-paid-service-plans") { quota.NonBasicServicesAllowed = true } err := cmd.quotaRepo.Create(quota) httpErr, ok := err.(errors.HttpError) if ok && httpErr.ErrorCode() == errors.QUOTA_EXISTS { cmd.ui.Ok() cmd.ui.Warn(T("Quota Definition {{.QuotaName}} already exists", map[string]interface{}{"QuotaName": quota.Name})) return } if err != nil { cmd.ui.Failed(err.Error()) } cmd.ui.Ok() }
func (cmd *EnableServiceAccess) Execute(c flags.FlagContext) error { _, err := cmd.tokenRefresher.RefreshAuthToken() if err != nil { return err } serviceName := c.Args()[0] planName := c.String("p") orgName := c.String("o") if planName != "" && orgName != "" { err = cmd.enablePlanAndOrgForService(serviceName, planName, orgName) } else if planName != "" { err = cmd.enablePlanForService(serviceName, planName) } else if orgName != "" { err = cmd.enableAllPlansForSingleOrgForService(serviceName, orgName) } else { err = cmd.enableAllPlansForService(serviceName) } if err != nil { return err } cmd.ui.Ok() return nil }
func (cmd *Push) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) []requirements.Requirement { var reqs []requirements.Requirement usageReq := requirements.NewUsageRequirement(command_registry.CliCommandUsagePresenter(cmd), "", func() bool { return len(fc.Args()) > 1 }, ) reqs = append(reqs, usageReq) if fc.String("route-path") != "" { reqs = append(reqs, requirementsFactory.NewMinAPIVersionRequirement("Option '--route-path'", cf.RoutePathMinimumApiVersion)) } if fc.String("app-ports") != "" { reqs = append(reqs, requirementsFactory.NewMinAPIVersionRequirement("Option '--app-ports'", cf.MultipleAppPortsMinimumApiVersion)) } reqs = append(reqs, []requirements.Requirement{ requirementsFactory.NewLoginRequirement(), requirementsFactory.NewTargetedSpaceRequirement(), }...) return reqs }
func (cmd *CreateRoute) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) ([]requirements.Requirement, error) { if len(fc.Args()) != 2 { cmd.ui.Failed(T("Incorrect Usage. Requires SPACE and DOMAIN as arguments\n\n") + command_registry.Commands.CommandUsage("create-route")) } domainName := fc.Args()[1] cmd.spaceReq = requirementsFactory.NewSpaceRequirement(fc.Args()[0]) cmd.domainReq = requirementsFactory.NewDomainRequirement(domainName) requiredVersion, err := semver.Make("2.36.0") if err != nil { panic(err.Error()) } var reqs []requirements.Requirement if fc.String("path") != "" { reqs = append(reqs, requirementsFactory.NewMinAPIVersionRequirement("Option '--path'", requiredVersion)) } reqs = append(reqs, []requirements.Requirement{ requirementsFactory.NewLoginRequirement(), requirementsFactory.NewTargetedOrgRequirement(), cmd.spaceReq, cmd.domainReq, }...) return reqs, nil }
func (cmd *UnmapRoute) Execute(c flags.FlagContext) { hostName := c.String("n") domain := cmd.domainReq.GetDomain() app := cmd.appReq.GetApplication() route, apiErr := cmd.routeRepo.FindByHostAndDomain(hostName, domain) if apiErr != nil { cmd.ui.Failed(apiErr.Error()) } cmd.ui.Say(T("Removing route {{.URL}} from app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ "URL": terminal.EntityNameColor(route.URL()), "AppName": terminal.EntityNameColor(app.Name), "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), "Username": terminal.EntityNameColor(cmd.config.Username())})) var routeFound bool for _, routeApp := range route.Apps { if routeApp.Guid == app.Guid { routeFound = true apiErr = cmd.routeRepo.Unbind(route.Guid, app.Guid) if apiErr != nil { cmd.ui.Failed(apiErr.Error()) return } } } cmd.ui.Ok() if !routeFound { cmd.ui.Warn(T("\nRoute to be unmapped is not currently mapped to the application.")) } }
func (cmd *MapRoute) Execute(c flags.FlagContext) { hostName := c.String("n") path := c.String("path") domain := cmd.domainReq.GetDomain() app := cmd.appReq.GetApplication() port := c.Int("port") randomPort := c.Bool("random-port") route, apiErr := cmd.routeCreator.CreateRoute(hostName, path, port, randomPort, domain, cmd.config.SpaceFields()) if apiErr != nil { cmd.ui.Failed(T("Error resolving route:\n{{.Err}}", map[string]interface{}{"Err": apiErr.Error()})) } cmd.ui.Say(T("Adding route {{.URL}} to app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ "URL": terminal.EntityNameColor(route.URL()), "AppName": terminal.EntityNameColor(app.Name), "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), "Username": terminal.EntityNameColor(cmd.config.Username())})) apiErr = cmd.routeRepo.Bind(route.GUID, app.GUID) if apiErr != nil { cmd.ui.Failed(apiErr.Error()) return } cmd.ui.Ok() }
func (cmd Login) authenticate(c flags.FlagContext) { usernameFlagValue := c.String("u") passwordFlagValue := c.String("p") prompts, err := cmd.authenticator.GetLoginPromptsAndSaveUAAServerURL() if err != nil { cmd.ui.Failed(err.Error()) } passwordKeys := []string{} credentials := make(map[string]string) if value, ok := prompts["username"]; ok { if prompts["username"].Type == core_config.AuthPromptTypeText && usernameFlagValue != "" { credentials["username"] = usernameFlagValue } else { credentials["username"] = cmd.ui.Ask("%s", value.DisplayName) } } for key, prompt := range prompts { if prompt.Type == core_config.AuthPromptTypePassword { if key == "passcode" { continue } passwordKeys = append(passwordKeys, key) } else if key == "username" { continue } else { credentials[key] = cmd.ui.Ask("%s", prompt.DisplayName) } } for i := 0; i < maxLoginTries; i++ { for _, key := range passwordKeys { if key == "password" && passwordFlagValue != "" { credentials[key] = passwordFlagValue passwordFlagValue = "" } else { credentials[key] = cmd.ui.AskForPassword("%s", prompts[key].DisplayName) } } cmd.ui.Say(T("Authenticating...")) err = cmd.authenticator.Authenticate(credentials) if err == nil { cmd.ui.Ok() cmd.ui.Say("") break } cmd.ui.Say(err.Error()) } if err != nil { cmd.ui.Failed(T("Unable to authenticate.")) } }
func (cmd *PluginInstall) Execute(c flags.FlagContext) error { if !cmd.confirmWithUser( c, T("**Attention: Plugins are binaries written by potentially untrusted authors. Install and use plugins at your own risk.**\n\nDo you want to install the plugin {{.Plugin}}? (y or n)", map[string]interface{}{"Plugin": c.Args()[0]}), ) { return errors.New(T("Plugin installation cancelled")) } fileDownloader := downloader.NewDownloader(os.TempDir()) removeTmpFile := func() { err := fileDownloader.RemoveFile() if err != nil { cmd.ui.Say(T("Problem removing downloaded binary in temp directory: ") + err.Error()) } } defer removeTmpFile() deps := &plugininstaller.Context{ Checksummer: cmd.checksum, GetPluginRepos: cmd.config.PluginRepos, FileDownloader: fileDownloader, PluginRepo: cmd.pluginRepo, RepoName: c.String("r"), UI: cmd.ui, } installer := plugininstaller.NewPluginInstaller(deps) pluginSourceFilepath := installer.Install(c.Args()[0]) _, pluginExecutableName := filepath.Split(pluginSourceFilepath) cmd.ui.Say(fmt.Sprintf(T("Installing plugin {{.PluginPath}}...", map[string]interface{}{"PluginPath": pluginExecutableName}))) pluginDestinationFilepath := filepath.Join(cmd.pluginConfig.GetPluginPath(), pluginExecutableName) err := cmd.ensurePluginBinaryWithSameFileNameDoesNotAlreadyExist(pluginDestinationFilepath, pluginExecutableName) if err != nil { return err } pluginMetadata, err := cmd.runBinaryAndObtainPluginMetadata(pluginSourceFilepath) if err != nil { return err } err = cmd.ensurePluginIsSafeForInstallation(pluginMetadata, pluginDestinationFilepath, pluginSourceFilepath) if err != nil { return err } err = cmd.installPlugin(pluginMetadata, pluginDestinationFilepath, pluginSourceFilepath) if err != nil { return err } cmd.ui.Ok() cmd.ui.Say(fmt.Sprintf(T("Plugin {{.PluginName}} v{{.Version}} successfully installed.", map[string]interface{}{"PluginName": pluginMetadata.Name, "Version": fmt.Sprintf("%d.%d.%d", pluginMetadata.Version.Major, pluginMetadata.Version.Minor, pluginMetadata.Version.Build)}))) return nil }
func (cmd *BindRouteService) Execute(c flags.FlagContext) { host := c.String("hostname") domain := cmd.domainReq.GetDomain() path := "" // path is not currently supported route, err := cmd.routeRepo.Find(host, domain, path) if err != nil { cmd.ui.Failed(err.Error()) } serviceInstance := cmd.serviceInstanceReq.GetServiceInstance() if !serviceInstance.IsUserProvided() { var requiresRouteForwarding bool for _, requirement := range serviceInstance.ServiceOffering.Requires { if requirement == "route_forwarding" { requiresRouteForwarding = true break } } confirmed := c.Bool("force") if requiresRouteForwarding && !confirmed { confirmed = cmd.ui.Confirm(T("Binding may cause requests for route {{.URL}} to be altered by service instance {{.ServiceInstanceName}}. Do you want to proceed?", map[string]interface{}{ "URL": route.URL(), "ServiceInstanceName": serviceInstance.Name, })) if !confirmed { cmd.ui.Warn(T("Bind cancelled")) return } } } cmd.ui.Say(T("Binding route {{.URL}} to service instance {{.ServiceInstanceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", map[string]interface{}{ "ServiceInstanceName": terminal.EntityNameColor(serviceInstance.Name), "URL": terminal.EntityNameColor(route.URL()), "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), })) err = cmd.BindRoute(route, serviceInstance) if err != nil { if httpErr, ok := err.(errors.HttpError); ok && httpErr.ErrorCode() == errors.ROUTE_ALREADY_BOUND_TO_SAME_SERVICE { cmd.ui.Warn(T("Route {{.URL}} is already bound to service instance {{.ServiceInstanceName}}.", map[string]interface{}{ "URL": route.URL(), "ServiceInstanceName": serviceInstance.Name, })) } else { cmd.ui.Failed(err.Error()) } } cmd.ui.Ok() }
func (cmd *MarketplaceServices) Execute(c flags.FlagContext) { serviceName := c.String("s") if serviceName != "" { cmd.marketplaceByService(serviceName) } else { cmd.marketplace() } }
func (cmd *CreateRoute) Execute(c flags.FlagContext) { hostName := c.String("n") space := cmd.spaceReq.GetSpace() domain := cmd.domainReq.GetDomain() _, apiErr := cmd.CreateRoute(hostName, domain, space.SpaceFields) if apiErr != nil { cmd.ui.Failed(apiErr.Error()) return } }
func (cmd *CreateSpace) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { if len(fc.Args()) != 1 { cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + command_registry.Commands.CommandUsage("create-space")) } reqs = []requirements.Requirement{requirementsFactory.NewLoginRequirement()} if fc.String("o") == "" { reqs = append(reqs, requirementsFactory.NewTargetedOrgRequirement()) } return }
func (cmd *MapRoute) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) []requirements.Requirement { if len(fc.Args()) != 2 { cmd.ui.Failed(T("Incorrect Usage. Requires APP_NAME and DOMAIN as arguments\n\n") + commandregistry.Commands.CommandUsage("map-route")) } if fc.IsSet("port") && (fc.IsSet("hostname") || fc.IsSet("path")) { cmd.ui.Failed(T("Cannot specify port together with hostname and/or path.")) } if fc.IsSet("random-port") && (fc.IsSet("port") || fc.IsSet("hostname") || fc.IsSet("path")) { cmd.ui.Failed(T("Cannot specify random-port together with port, hostname and/or path.")) } appName := fc.Args()[0] domainName := fc.Args()[1] requirement := requirementsFactory.NewApplicationRequirement(appName) cmd.appReq = requirement cmd.domainReq = requirementsFactory.NewDomainRequirement(domainName) var reqs []requirements.Requirement if fc.String("path") != "" { requiredVersion, err := semver.Make("2.36.0") if err != nil { panic(err.Error()) } reqs = append(reqs, requirementsFactory.NewMinAPIVersionRequirement("Option '--path'", requiredVersion)) } var flag string switch { case fc.IsSet("port"): flag = "port" case fc.IsSet("random-port"): flag = "random-port" } if flag != "" { reqs = append(reqs, requirementsFactory.NewMinAPIVersionRequirement(fmt.Sprintf("Option '--%s'", flag), cf.TCPRoutingMinimumAPIVersion)) reqs = append(reqs, requirementsFactory.NewDiegoApplicationRequirement(appName)) } reqs = append(reqs, []requirements.Requirement{ requirementsFactory.NewLoginRequirement(), cmd.appReq, cmd.domainReq, }...) return reqs }
func (cmd *UnbindRouteService) Execute(c flags.FlagContext) error { var port int host := c.String("hostname") domain := cmd.domainReq.GetDomain() path := c.String("path") if !strings.HasPrefix(path, "/") && len(path) > 0 { path = fmt.Sprintf("/%s", path) } route, err := cmd.routeRepo.Find(host, domain, path, port) if err != nil { return err } serviceInstance := cmd.serviceInstanceReq.GetServiceInstance() confirmed := c.Bool("f") if !confirmed { confirmed = cmd.ui.Confirm(T("Unbinding may leave apps mapped to route {{.URL}} vulnerable; e.g. if service instance {{.ServiceInstanceName}} provides authentication. Do you want to proceed?", map[string]interface{}{ "URL": route.URL(), "ServiceInstanceName": serviceInstance.Name, })) if !confirmed { cmd.ui.Warn(T("Unbind cancelled")) return nil } } cmd.ui.Say(T("Unbinding route {{.URL}} from service instance {{.ServiceInstanceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", map[string]interface{}{ "ServiceInstanceName": terminal.EntityNameColor(serviceInstance.Name), "URL": terminal.EntityNameColor(route.URL()), "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), })) err = cmd.UnbindRoute(route, serviceInstance) if err != nil { httpError, ok := err.(errors.HTTPError) if ok && httpError.ErrorCode() == errors.InvalidRelation { cmd.ui.Warn(T("Route {{.Route}} was not bound to service instance {{.ServiceInstance}}.", map[string]interface{}{"Route": route.URL(), "ServiceInstance": serviceInstance.Name})) } else { return err } } cmd.ui.Ok() return nil }
func (cmd *CreateRoute) Execute(c flags.FlagContext) { hostName := c.String("n") space := cmd.spaceReq.GetSpace() domain := cmd.domainReq.GetDomain() path := c.String("path") port := c.Int("port") randomPort := c.Bool("random-port") _, err := cmd.CreateRoute(hostName, path, port, randomPort, domain, space.SpaceFields) if err != nil { cmd.ui.Failed(err.Error()) } }
func (cmd *CreateService) Execute(c flags.FlagContext) error { serviceName := c.Args()[0] planName := c.Args()[1] serviceInstanceName := c.Args()[2] params := c.String("c") tags := c.String("t") tagsList := uihelpers.ParseTags(tags) paramsMap, err := json.ParseJSONFromFileOrString(params) if err != nil { return errors.New(T("Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.")) } cmd.ui.Say(T("Creating service instance {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", map[string]interface{}{ "ServiceName": terminal.EntityNameColor(serviceInstanceName), "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), })) plan, err := cmd.CreateService(serviceName, planName, serviceInstanceName, paramsMap, tagsList) switch err.(type) { case nil: err := printSuccessMessageForServiceInstance(serviceInstanceName, cmd.serviceRepo, cmd.ui) if err != nil { return err } if !plan.Free { cmd.ui.Say("") cmd.ui.Say(T("Attention: The plan `{{.PlanName}}` of service `{{.ServiceName}}` is not free. The instance `{{.ServiceInstanceName}}` will incur a cost. Contact your administrator if you think this is in error.", map[string]interface{}{ "PlanName": terminal.EntityNameColor(plan.Name), "ServiceName": terminal.EntityNameColor(serviceName), "ServiceInstanceName": terminal.EntityNameColor(serviceInstanceName), })) cmd.ui.Say("") } case *errors.ModelAlreadyExistsError: cmd.ui.Ok() cmd.ui.Warn(err.Error()) default: return err } return nil }
func (cmd *MarketplaceServices) Execute(c flags.FlagContext) error { serviceName := c.String("s") var err error if serviceName != "" { err = cmd.marketplaceByService(serviceName) } else { err = cmd.marketplace() } if err != nil { return err } return nil }
func (cmd *PurgeServiceOffering) Execute(c flags.FlagContext) error { serviceName := c.Args()[0] var offering models.ServiceOffering if c.IsSet("p") { var err error offering, err = cmd.serviceRepo.FindServiceOfferingByLabelAndProvider(serviceName, c.String("p")) if err != nil { if _, ok := err.(*errors.ModelNotFoundError); ok { cmd.ui.Warn(T("Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.")) return nil } return err } } else { offerings, err := cmd.serviceRepo.FindServiceOfferingsByLabel(serviceName) if err != nil { if _, ok := err.(*errors.ModelNotFoundError); ok { cmd.ui.Warn(T("Service offering does not exist\nTIP: If you are trying to purge a v1 service offering, you must set the -p flag.")) return nil } return err } offering = offerings[0] } confirmed := c.Bool("f") if !confirmed { cmd.ui.Warn(scaryWarningMessage()) confirmed = cmd.ui.Confirm(T("Really purge service offering {{.ServiceName}} from Cloud Foundry?", map[string]interface{}{"ServiceName": serviceName}, )) } if !confirmed { return nil } cmd.ui.Say(T("Purging service {{.ServiceName}}...", map[string]interface{}{"ServiceName": serviceName})) err := cmd.serviceRepo.PurgeServiceOffering(offering) if err != nil { return err } cmd.ui.Ok() return nil }
func (cmd *UpdateService) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) []requirements.Requirement { if len(fc.Args()) != 1 { cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + commandregistry.Commands.CommandUsage("update-service")) } reqs := []requirements.Requirement{ requirementsFactory.NewLoginRequirement(), requirementsFactory.NewTargetedSpaceRequirement(), } if fc.String("p") != "" { reqs = append(reqs, requirementsFactory.NewMinAPIVersionRequirement("Updating a plan", cf.UpdateServicePlanMinimumAPIVersion)) } return reqs }
func (cmd Login) decideEndpoint(c flags.FlagContext) (string, bool) { endpoint := c.String("a") skipSSL := c.Bool("skip-ssl-validation") if endpoint == "" { endpoint = cmd.config.APIEndpoint() skipSSL = cmd.config.IsSSLDisabled() || skipSSL } if endpoint == "" { endpoint = cmd.ui.Ask(T("API endpoint")) } else { cmd.ui.Say(T("API endpoint: {{.Endpoint}}", map[string]interface{}{"Endpoint": terminal.EntityNameColor(endpoint)})) } return endpoint, skipSSL }