github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v7/buildpacks_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"strconv"
     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/ui"
    11  	"code.cloudfoundry.org/clock"
    12  )
    13  
    14  //go:generate counterfeiter . BuildpacksActor
    15  
    16  type BuildpacksActor interface {
    17  	GetBuildpacks(labelSelector string) ([]v7action.Buildpack, v7action.Warnings, error)
    18  }
    19  
    20  type BuildpacksCommand struct {
    21  	usage           interface{} `usage:"CF_NAME buildpacks [--labels SELECTOR]\n\nEXAMPLES:\n   CF_NAME buildpacks\n   CF_NAME buildpacks --labels 'environment in (production,staging),tier in (backend)'\n   CF_NAME buildpacks --labels 'env=dev,!chargeback-code,tier in (backend,worker)'"`
    22  	relatedCommands interface{} `related_commands:"create-buildpack, delete-buildpack, rename-buildpack, update-buildpack"`
    23  
    24  	UI          command.UI
    25  	Config      command.Config
    26  	SharedActor command.SharedActor
    27  	Actor       BuildpacksActor
    28  	Labels      string `long:"labels" description:"Selector to filter buildpacks by labels"`
    29  }
    30  
    31  func (cmd *BuildpacksCommand) Setup(config command.Config, ui command.UI) error {
    32  	cmd.UI = ui
    33  	cmd.Config = config
    34  	sharedActor := sharedaction.NewActor(config)
    35  	cmd.SharedActor = sharedActor
    36  
    37  	ccClient, uaaClient, err := shared.GetNewClientsAndConnectToCF(config, ui, "")
    38  	if err != nil {
    39  		return err
    40  	}
    41  	cmd.Actor = v7action.NewActor(ccClient, config, sharedActor, uaaClient, clock.NewClock())
    42  
    43  	return nil
    44  }
    45  
    46  func (cmd BuildpacksCommand) 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 buildpacks as {{.Username}}...", map[string]interface{}{
    58  		"Username": user.Name,
    59  	})
    60  	cmd.UI.DisplayNewline()
    61  
    62  	buildpacks, warnings, err := cmd.Actor.GetBuildpacks(cmd.Labels)
    63  	cmd.UI.DisplayWarnings(warnings)
    64  	if err != nil {
    65  		return err
    66  	}
    67  
    68  	if len(buildpacks) == 0 {
    69  		cmd.UI.DisplayTextWithFlavor("No buildpacks found")
    70  	} else {
    71  		cmd.displayTable(buildpacks)
    72  	}
    73  	return nil
    74  }
    75  
    76  func (cmd BuildpacksCommand) displayTable(buildpacks []v7action.Buildpack) {
    77  	if len(buildpacks) > 0 {
    78  		var keyValueTable = [][]string{
    79  			{"position", "name", "stack", "enabled", "locked", "filename"},
    80  		}
    81  		for _, buildpack := range buildpacks {
    82  			keyValueTable = append(keyValueTable, []string{
    83  				strconv.Itoa(buildpack.Position.Value),
    84  				buildpack.Name,
    85  				buildpack.Stack,
    86  				strconv.FormatBool(buildpack.Enabled.Value),
    87  				strconv.FormatBool(buildpack.Locked.Value),
    88  				buildpack.Filename,
    89  			})
    90  		}
    91  
    92  		cmd.UI.DisplayTableWithHeader("", keyValueTable, ui.DefaultTableSpacePadding)
    93  	}
    94  }