github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v7/stacks_command.go (about) 1 package v7 2 3 import ( 4 "sort" 5 6 "code.cloudfoundry.org/cli/actor/sharedaction" 7 "code.cloudfoundry.org/cli/actor/v7action" 8 "code.cloudfoundry.org/cli/command" 9 "code.cloudfoundry.org/cli/command/v7/shared" 10 "code.cloudfoundry.org/cli/util/sorting" 11 "code.cloudfoundry.org/cli/util/ui" 12 "code.cloudfoundry.org/clock" 13 ) 14 15 //go:generate counterfeiter . StacksActor 16 17 type StacksActor interface { 18 GetStacks(string) ([]v7action.Stack, v7action.Warnings, error) 19 } 20 21 type StacksCommand struct { 22 usage interface{} `usage:"CF_NAME stacks [--labels SELECTOR]\n\nEXAMPLES:\n CF_NAME stacks\n CF_NAME stacks --labels 'environment in (production,staging),tier in (backend)'\n CF_NAME stacks --labels 'env=dev,!chargeback-code,tier in (backend,worker)'"` 23 relatedCommands interface{} `related_commands:"create-buildpack, delete-buildpack, rename-buildpack, stack, update-buildpack"` 24 25 UI command.UI 26 Config command.Config 27 SharedActor command.SharedActor 28 Actor StacksActor 29 Labels string `long:"labels" description:"Selector to filter stacks by labels"` 30 } 31 32 func (cmd *StacksCommand) Setup(config command.Config, ui command.UI) error { 33 cmd.UI = ui 34 cmd.Config = config 35 cmd.SharedActor = sharedaction.NewActor(config) 36 37 ccClient, _, err := shared.GetNewClientsAndConnectToCF(config, ui, "") 38 if err != nil { 39 return err 40 } 41 cmd.Actor = v7action.NewActor(ccClient, config, nil, nil, clock.NewClock()) 42 43 return nil 44 } 45 46 func (cmd StacksCommand) Execute(args []string) error { 47 err := cmd.SharedActor.CheckTarget(false, false) 48 if err != nil { 49 return err 50 } 51 52 user, err := cmd.Config.CurrentUser() 53 if err != nil { 54 return err 55 } 56 57 cmd.UI.DisplayTextWithFlavor("Getting stacks as {{.Username}}...", map[string]interface{}{ 58 "Username": user.Name, 59 }) 60 cmd.UI.DisplayNewline() 61 62 stacks, warnings, err := cmd.Actor.GetStacks(cmd.Labels) 63 cmd.UI.DisplayWarnings(warnings) 64 if err != nil { 65 return err 66 } 67 68 sort.Slice(stacks, func(i, j int) bool { return sorting.LessIgnoreCase(stacks[i].Name, stacks[j].Name) }) 69 70 cmd.displayTable(stacks) 71 72 return nil 73 } 74 75 func (cmd StacksCommand) displayTable(stacks []v7action.Stack) { 76 if len(stacks) > 0 { 77 var keyValueTable = [][]string{ 78 {"name", "description"}, 79 } 80 for _, stack := range stacks { 81 keyValueTable = append(keyValueTable, []string{stack.Name, stack.Description}) 82 } 83 84 cmd.UI.DisplayTableWithHeader("", keyValueTable, ui.DefaultTableSpacePadding) 85 } else { 86 cmd.UI.DisplayText("No stacks found.") 87 } 88 }