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  }