github.com/loafoe/cli@v7.1.0+incompatible/command/v7/stacks_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"sort"
     5  
     6  	"code.cloudfoundry.org/cli/actor/v7action"
     7  	"code.cloudfoundry.org/cli/util/sorting"
     8  	"code.cloudfoundry.org/cli/util/ui"
     9  )
    10  
    11  type StacksCommand struct {
    12  	BaseCommand
    13  
    14  	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)'"`
    15  	relatedCommands interface{} `related_commands:"create-buildpack, delete-buildpack, rename-buildpack, stack, update-buildpack"`
    16  	Labels          string      `long:"labels" description:"Selector to filter stacks by labels"`
    17  }
    18  
    19  func (cmd StacksCommand) Execute(args []string) error {
    20  	err := cmd.SharedActor.CheckTarget(false, false)
    21  	if err != nil {
    22  		return err
    23  	}
    24  
    25  	user, err := cmd.Config.CurrentUser()
    26  	if err != nil {
    27  		return err
    28  	}
    29  
    30  	cmd.UI.DisplayTextWithFlavor("Getting stacks as {{.Username}}...", map[string]interface{}{
    31  		"Username": user.Name,
    32  	})
    33  	cmd.UI.DisplayNewline()
    34  
    35  	stacks, warnings, err := cmd.Actor.GetStacks(cmd.Labels)
    36  	cmd.UI.DisplayWarnings(warnings)
    37  	if err != nil {
    38  		return err
    39  	}
    40  
    41  	sort.Slice(stacks, func(i, j int) bool { return sorting.LessIgnoreCase(stacks[i].Name, stacks[j].Name) })
    42  
    43  	cmd.displayTable(stacks)
    44  
    45  	return nil
    46  }
    47  
    48  func (cmd StacksCommand) displayTable(stacks []v7action.Stack) {
    49  	if len(stacks) > 0 {
    50  		var keyValueTable = [][]string{
    51  			{"name", "description"},
    52  		}
    53  		for _, stack := range stacks {
    54  			keyValueTable = append(keyValueTable, []string{stack.Name, stack.Description})
    55  		}
    56  
    57  		cmd.UI.DisplayTableWithHeader("", keyValueTable, ui.DefaultTableSpacePadding)
    58  	} else {
    59  		cmd.UI.DisplayText("No stacks found.")
    60  	}
    61  }