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 NewSSHOptions(fc flags.FlagContext) (*SSHOptions, error) { sshOptions := &SSHOptions{} sshOptions.AppName = fc.Args()[0] sshOptions.Index = uint(fc.Int("i")) sshOptions.SkipHostValidation = fc.Bool("k") sshOptions.SkipRemoteExecution = fc.Bool("N") sshOptions.Command = fc.StringSlice("c") if fc.IsSet("L") { for _, arg := range fc.StringSlice("L") { forwardSpec, err := sshOptions.parseLocalForwardingSpec(arg) if err != nil { return sshOptions, err } sshOptions.ForwardSpecs = append(sshOptions.ForwardSpecs, *forwardSpec) } } if fc.IsSet("t") && fc.Bool("t") { sshOptions.TerminalRequest = REQUEST_TTY_YES } if fc.IsSet("tt") && fc.Bool("tt") { sshOptions.TerminalRequest = REQUEST_TTY_FORCE } if fc.Bool("T") { sshOptions.TerminalRequest = REQUEST_TTY_NO } return sshOptions, nil }
func (cmd *ConfigCommands) Execute(context flags.FlagContext) { if !context.IsSet("trace") && !context.IsSet("async-timeout") && !context.IsSet("color") && !context.IsSet("locale") { cmd.ui.Failed(T("Incorrect Usage\n\n") + command_registry.Commands.CommandUsage("config")) return } if context.IsSet("async-timeout") { asyncTimeout := context.Int("async-timeout") if asyncTimeout < 0 { cmd.ui.Failed(T("Incorrect Usage\n\n") + command_registry.Commands.CommandUsage("config")) } cmd.config.SetAsyncTimeout(uint(asyncTimeout)) } if context.IsSet("trace") { cmd.config.SetTrace(context.String("trace")) } if context.IsSet("color") { value := context.String("color") switch value { case "true": cmd.config.SetColorEnabled("true") case "false": cmd.config.SetColorEnabled("false") default: cmd.ui.Failed(T("Incorrect Usage\n\n") + command_registry.Commands.CommandUsage("config")) } } if context.IsSet("locale") { locale := context.String("locale") if locale == "CLEAR" { cmd.config.SetLocale("") return } foundLocale := false for _, value := range SUPPORTED_LOCALES { if value == locale { cmd.config.SetLocale(locale) foundLocale = true break } } if !foundLocale { cmd.ui.Say(fmt.Sprintf("Could not find locale %s. The known locales are:", locale)) cmd.ui.Say("") for _, locale := range SUPPORTED_LOCALES { cmd.ui.Say(locale) } } } }
func (cmd *ConfigCommands) Execute(context flags.FlagContext) { if !context.IsSet("trace") && !context.IsSet("async-timeout") && !context.IsSet("color") && !context.IsSet("locale") { cmd.ui.Failed(T("Incorrect Usage\n\n") + command_registry.Commands.CommandUsage("config")) return } if context.IsSet("async-timeout") { asyncTimeout := context.Int("async-timeout") if asyncTimeout < 0 { cmd.ui.Failed(T("Incorrect Usage\n\n") + command_registry.Commands.CommandUsage("config")) } cmd.config.SetAsyncTimeout(uint(asyncTimeout)) } if context.IsSet("trace") { cmd.config.SetTrace(context.String("trace")) } if context.IsSet("color") { value := context.String("color") switch value { case "true": cmd.config.SetColorEnabled("true") case "false": cmd.config.SetColorEnabled("false") default: cmd.ui.Failed(T("Incorrect Usage\n\n") + command_registry.Commands.CommandUsage("config")) } } if context.IsSet("locale") { locale := context.String("locale") if locale == "CLEAR" { cmd.config.SetLocale("") return } if IsSupportedLocale(locale) { cmd.config.SetLocale(locale) return } cmd.ui.Say(fmt.Sprintf("Could not find locale '%s'. The known locales are:", locale)) cmd.ui.Say("") supportedLocales := SupportedLocales() sort.Strings(supportedLocales) for i := range supportedLocales { cmd.ui.Say(supportedLocales[i]) } } }
func (cmd *Files) Execute(c flags.FlagContext) { app := cmd.appReq.GetApplication() var instance int if c.IsSet("i") { instance = c.Int("i") if instance < 0 { cmd.ui.Failed(T("Invalid instance: {{.Instance}}\nInstance must be a positive integer", map[string]interface{}{ "Instance": instance, })) } if instance >= app.InstanceCount { cmd.ui.Failed(T("Invalid instance: {{.Instance}}\nInstance must be less than {{.InstanceCount}}", map[string]interface{}{ "Instance": instance, "InstanceCount": app.InstanceCount, })) } } cmd.ui.Say(T("Getting files for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ "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())})) path := "/" if len(c.Args()) > 1 { path = c.Args()[1] } list, apiErr := cmd.appFilesRepo.ListFiles(app.Guid, instance, path) if apiErr != nil { cmd.ui.Failed(apiErr.Error()) return } cmd.ui.Ok() cmd.ui.Say("") if list == "" { cmd.ui.Say("No files found") } else { cmd.ui.Say("%s", list) } }
func (cmd *SSH) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { if len(fc.Args()) == 0 { cmd.ui.Failed(T("Incorrect Usage. Requires APP_NAME as argument") + "\n\n" + command_registry.Commands.CommandUsage("ssh")) } if fc.IsSet("i") && fc.Int("i") < 0 { cmd.ui.Failed(fmt.Sprintf(T("Incorrect Usage:")+" %s\n\n%s", T("Value for flag 'app-instance-index' cannot be negative"), command_registry.Commands.CommandUsage("ssh"))) } cmd.opts, err = options.NewSSHOptions(fc) if err != nil { cmd.ui.Failed(fmt.Sprintf(T("Incorrect Usage:")+" %s\n\n%s", err.Error(), command_registry.Commands.CommandUsage("ssh"))) } cmd.appReq = requirementsFactory.NewApplicationRequirement(cmd.opts.AppName) reqs = []requirements.Requirement{ requirementsFactory.NewLoginRequirement(), requirementsFactory.NewTargetedSpaceRequirement(), cmd.appReq, } return }
func (cmd *Push) getAppParamsFromContext(c flags.FlagContext) (appParams models.AppParams) { if len(c.Args()) > 0 { appParams.Name = &c.Args()[0] } appParams.NoRoute = c.Bool("no-route") appParams.UseRandomHostname = c.Bool("random-route") appParams.NoHostname = c.Bool("no-hostname") if c.String("n") != "" { appParams.Hosts = &[]string{c.String("n")} } if c.String("b") != "" { buildpack := c.String("b") if buildpack == "null" || buildpack == "default" { buildpack = "" } appParams.BuildpackUrl = &buildpack } if c.String("c") != "" { command := c.String("c") if command == "null" || command == "default" { command = "" } appParams.Command = &command } if c.String("d") != "" { appParams.Domains = &[]string{c.String("d")} } if c.IsSet("i") { instances := c.Int("i") if instances < 1 { cmd.ui.Failed(T("Invalid instance count: {{.InstancesCount}}\nInstance count must be a positive integer", map[string]interface{}{"InstancesCount": instances})) } appParams.InstanceCount = &instances } if c.String("k") != "" { diskQuota, err := formatters.ToMegabytes(c.String("k")) if err != nil { cmd.ui.Failed(T("Invalid disk quota: {{.DiskQuota}}\n{{.Err}}", map[string]interface{}{"DiskQuota": c.String("k"), "Err": err.Error()})) } appParams.DiskQuota = &diskQuota } if c.String("m") != "" { memory, err := formatters.ToMegabytes(c.String("m")) if err != nil { cmd.ui.Failed(T("Invalid memory limit: {{.MemLimit}}\n{{.Err}}", map[string]interface{}{"MemLimit": c.String("m"), "Err": err.Error()})) } appParams.Memory = &memory } if c.String("docker-image") != "" { dockerImage := c.String("docker-image") appParams.DockerImage = &dockerImage } if c.String("p") != "" { path := c.String("p") appParams.Path = &path } if c.String("s") != "" { stackName := c.String("s") appParams.StackName = &stackName } if c.String("t") != "" { timeout, err := strconv.Atoi(c.String("t")) if err != nil { cmd.ui.Failed("Error: %s", errors.NewWithFmt(T("Invalid timeout param: {{.Timeout}}\n{{.Err}}", map[string]interface{}{"Timeout": c.String("t"), "Err": err.Error()}))) } appParams.HealthCheckTimeout = &timeout } if healthCheckType := c.String("u"); healthCheckType != "" { if healthCheckType != "port" && healthCheckType != "none" { cmd.ui.Failed("Error: %s", errors.NewWithFmt(T("Invalid health-check-type param: {{.healthCheckType}}", map[string]interface{}{"healthCheckType": healthCheckType}))) } appParams.HealthCheckType = &healthCheckType } return }
func (cmd *updateQuota) Execute(c flags.FlagContext) { oldQuotaName := c.Args()[0] quota, err := cmd.quotaRepo.FindByName(oldQuotaName) if err != nil { cmd.ui.Failed(err.Error()) } allowPaidServices := c.Bool("allow-paid-service-plans") disallowPaidServices := c.Bool("disallow-paid-service-plans") if allowPaidServices && disallowPaidServices { cmd.ui.Failed(T("Please choose either allow or disallow. Both flags are not permitted to be passed in the same command.")) } if allowPaidServices { quota.NonBasicServicesAllowed = true } if disallowPaidServices { quota.NonBasicServicesAllowed = false } if c.String("i") != "" { var memory int64 if c.String("i") == "-1" { memory = -1 } else { var formatError error memory, formatError = formatters.ToMegabytes(c.String("i")) if formatError != nil { cmd.ui.Failed(T("Incorrect Usage.\n\n") + command_registry.Commands.CommandUsage("update-quota")) } } quota.InstanceMemoryLimit = memory } if c.String("m") != "" { memory, formatError := formatters.ToMegabytes(c.String("m")) if formatError != nil { cmd.ui.Failed(T("Incorrect Usage.\n\n") + command_registry.Commands.CommandUsage("update-quota")) } quota.MemoryLimit = memory } if c.String("n") != "" { quota.Name = c.String("n") } if c.IsSet("s") { quota.ServicesLimit = c.Int("s") } if c.IsSet("r") { quota.RoutesLimit = c.Int("r") } cmd.ui.Say(T("Updating quota {{.QuotaName}} as {{.Username}}...", map[string]interface{}{ "QuotaName": terminal.EntityNameColor(oldQuotaName), "Username": terminal.EntityNameColor(cmd.config.Username()), })) err = cmd.quotaRepo.Update(quota) if err != nil { cmd.ui.Failed(err.Error()) } cmd.ui.Ok() }
func (cmd *Scale) Execute(c flags.FlagContext) { currentApp := cmd.appReq.GetApplication() if !anyFlagsSet(c) { cmd.ui.Say(T("Showing current scale of app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", map[string]interface{}{ "AppName": terminal.EntityNameColor(currentApp.Name), "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), })) cmd.ui.Ok() cmd.ui.Say("") cmd.ui.Say("%s %s", terminal.HeaderColor(T("memory:")), formatters.ByteSize(currentApp.Memory*bytesInAMegabyte)) cmd.ui.Say("%s %s", terminal.HeaderColor(T("disk:")), formatters.ByteSize(currentApp.DiskQuota*bytesInAMegabyte)) cmd.ui.Say("%s %d", terminal.HeaderColor(T("instances:")), currentApp.InstanceCount) return } params := models.AppParams{} shouldRestart := false if c.String("m") != "" { memory, err := formatters.ToMegabytes(c.String("m")) if err != nil { cmd.ui.Failed(T("Invalid memory limit: {{.Memory}}\n{{.ErrorDescription}}", map[string]interface{}{ "Memory": c.String("m"), "ErrorDescription": err, })) } params.Memory = &memory shouldRestart = true } if c.String("k") != "" { diskQuota, err := formatters.ToMegabytes(c.String("k")) if err != nil { cmd.ui.Failed(T("Invalid disk quota: {{.DiskQuota}}\n{{.ErrorDescription}}", map[string]interface{}{ "DiskQuota": c.String("k"), "ErrorDescription": err, })) } params.DiskQuota = &diskQuota shouldRestart = true } if c.IsSet("i") { instances := c.Int("i") params.InstanceCount = &instances } if shouldRestart && !cmd.confirmRestart(c, currentApp.Name) { return } cmd.ui.Say(T("Scaling app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...", map[string]interface{}{ "AppName": terminal.EntityNameColor(currentApp.Name), "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), })) updatedApp, apiErr := cmd.appRepo.Update(currentApp.Guid, params) if apiErr != nil { cmd.ui.Failed(apiErr.Error()) return } cmd.ui.Ok() if shouldRestart { cmd.restarter.ApplicationRestart(updatedApp, cmd.config.OrganizationFields().Name, cmd.config.SpaceFields().Name) } }
Ω(fc.IsSet("force")).To(BeFalse()) fc.NewBoolFlag("force", "f", "force process") fc.Parse("--force") Ω(fc.IsSet("force")).To(BeTrue()) Ω(fc.IsSet("f")).To(BeTrue()) Ω(fc.Bool("force")).To(BeTrue()) Ω(fc.Bool("f")).To(BeTrue()) }) }) Describe("NewIntFlag()", func() { It("init the flag context with a new int flagset", func() { fc.Parse("-i", "5") Ω(fc.IsSet("i")).To(BeFalse()) Ω(fc.Int("i")).To(Equal(0)) fc.NewIntFlag("i", "i2", "setting new int flag") fc.Parse("-i", "5") Ω(fc.IsSet("i")).To(BeTrue()) Ω(fc.IsSet("i2")).To(BeTrue()) Ω(fc.Int("i")).To(Equal(5)) Ω(fc.Int("i2")).To(Equal(5)) }) }) Describe("NewIntFlagWithDefault()", func() { It("init the flag context with a new int flagset with default value", func() { fc.Parse("-i", "5") Ω(fc.IsSet("i")).To(BeFalse()) Ω(fc.Int("i")).To(Equal(0))
func (cmd *UpdateBuildpack) Execute(c flags.FlagContext) { buildpack := cmd.buildpackReq.GetBuildpack() cmd.ui.Say(T("Updating buildpack {{.BuildpackName}}...", map[string]interface{}{"BuildpackName": terminal.EntityNameColor(buildpack.Name)})) updateBuildpack := false if c.IsSet("i") { position := c.Int("i") buildpack.Position = &position updateBuildpack = true } enabled := c.Bool("enable") disabled := c.Bool("disable") if enabled && disabled { cmd.ui.Failed(T("Cannot specify both {{.Enabled}} and {{.Disabled}}.", map[string]interface{}{ "Enabled": "enabled", "Disabled": "disabled", })) } if enabled { buildpack.Enabled = &enabled updateBuildpack = true } if disabled { disabled = false buildpack.Enabled = &disabled updateBuildpack = true } lock := c.Bool("lock") unlock := c.Bool("unlock") if lock && unlock { cmd.ui.Failed(T("Cannot specify both lock and unlock options.")) return } path := c.String("p") var dir string var err error if path != "" { dir, err = filepath.Abs(path) if err != nil { cmd.ui.Failed(err.Error()) return } } if dir != "" && (lock || unlock) { cmd.ui.Failed(T("Cannot specify buildpack bits and lock/unlock.")) } if lock { buildpack.Locked = &lock updateBuildpack = true } if unlock { unlock = false buildpack.Locked = &unlock updateBuildpack = true } if updateBuildpack { newBuildpack, apiErr := cmd.buildpackRepo.Update(buildpack) if apiErr != nil { cmd.ui.Failed(T("Error updating buildpack {{.Name}}\n{{.Error}}", map[string]interface{}{ "Name": terminal.EntityNameColor(buildpack.Name), "Error": apiErr.Error(), })) } buildpack = newBuildpack } if dir != "" { apiErr := cmd.buildpackBitsRepo.UploadBuildpack(buildpack, dir) if apiErr != nil { cmd.ui.Failed(T("Error uploading buildpack {{.Name}}\n{{.Error}}", map[string]interface{}{ "Name": terminal.EntityNameColor(buildpack.Name), "Error": apiErr.Error(), })) } } cmd.ui.Ok() }