github.com/arunkumar7540/cli@v6.45.0+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 ) 13 14 //go:generate counterfeiter . StacksActor 15 16 type StacksActor interface { 17 GetStacks() ([]v7action.Stack, v7action.Warnings, error) 18 } 19 20 type StacksCommand struct { 21 usage interface{} `usage:"CF_NAME stacks"` 22 relatedCommands interface{} `related_commands:"app, push"` 23 24 UI command.UI 25 Config command.Config 26 SharedActor command.SharedActor 27 Actor StacksActor 28 } 29 30 func (cmd *StacksCommand) Setup(config command.Config, ui command.UI) error { 31 cmd.UI = ui 32 cmd.Config = config 33 cmd.SharedActor = sharedaction.NewActor(config) 34 35 ccClient, _, err := shared.NewClients(config, ui, true, "") 36 if err != nil { 37 return err 38 } 39 cmd.Actor = v7action.NewActor(ccClient, config, nil, nil) 40 41 return nil 42 } 43 44 func (cmd StacksCommand) Execute(args []string) error { 45 err := cmd.SharedActor.CheckTarget(false, false) 46 if err != nil { 47 return err 48 } 49 50 user, err := cmd.Config.CurrentUser() 51 if err != nil { 52 return err 53 } 54 55 cmd.UI.DisplayTextWithFlavor("Getting stacks as {{.Username}}...", map[string]interface{}{ 56 "Username": user.Name, 57 }) 58 cmd.UI.DisplayNewline() 59 60 stacks, warnings, err := cmd.Actor.GetStacks() 61 cmd.UI.DisplayWarnings(warnings) 62 if err != nil { 63 return err 64 } 65 66 sort.Slice(stacks, func(i, j int) bool { return sorting.LessIgnoreCase(stacks[i].Name, stacks[j].Name) }) 67 68 cmd.displayTable(stacks) 69 70 return nil 71 } 72 73 func (cmd StacksCommand) displayTable(stacks []v7action.Stack) { 74 if len(stacks) > 0 { 75 var keyValueTable = [][]string{ 76 {"name", "description"}, 77 } 78 for _, stack := range stacks { 79 keyValueTable = append(keyValueTable, []string{stack.Name, stack.Description}) 80 } 81 82 cmd.UI.DisplayTableWithHeader("", keyValueTable, ui.DefaultTableSpacePadding) 83 } else { 84 cmd.UI.DisplayText("No stacks found.") 85 } 86 }