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

     1  package v6
     2  
     3  import (
     4  	"strings"
     5  
     6  	"code.cloudfoundry.org/cli/actor/sharedaction"
     7  	"code.cloudfoundry.org/cli/actor/v2action"
     8  	"code.cloudfoundry.org/cli/actor/v3action"
     9  	"code.cloudfoundry.org/cli/command"
    10  	"code.cloudfoundry.org/cli/command/v6/shared"
    11  	"code.cloudfoundry.org/cli/util/ui"
    12  )
    13  
    14  //go:generate counterfeiter . V3AppsActor
    15  
    16  type V3AppsActor interface {
    17  	GetApplicationsWithProcessesBySpace(spaceGUID string) ([]v3action.ApplicationWithProcessSummary, v3action.Warnings, error)
    18  }
    19  
    20  type V3AppsCommand struct {
    21  	usage interface{} `usage:"CF_NAME v3-apps"`
    22  
    23  	UI          command.UI
    24  	Config      command.Config
    25  	Actor       V3AppsActor
    26  	V2AppActor  shared.V2AppActor
    27  	SharedActor command.SharedActor
    28  }
    29  
    30  func (cmd *V3AppsCommand) 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.NewV3BasedClients(config, ui, true)
    36  	if err != nil {
    37  		return err
    38  	}
    39  	cmd.Actor = v3action.NewActor(ccClient, config, nil, nil)
    40  
    41  	ccClientV2, uaaClientV2, err := shared.GetNewClientsAndConnectToCF(config, ui)
    42  	if err != nil {
    43  		return err
    44  	}
    45  
    46  	cmd.V2AppActor = v2action.NewActor(ccClientV2, uaaClientV2, config)
    47  
    48  	return nil
    49  }
    50  
    51  func (cmd V3AppsCommand) Execute(args []string) error {
    52  	cmd.UI.DisplayWarning(command.ExperimentalWarning)
    53  
    54  	err := cmd.SharedActor.CheckTarget(true, true)
    55  	if err != nil {
    56  		return err
    57  	}
    58  
    59  	user, err := cmd.Config.CurrentUser()
    60  	if err != nil {
    61  		return err
    62  	}
    63  
    64  	cmd.UI.DisplayTextWithFlavor("Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{
    65  		"OrgName":   cmd.Config.TargetedOrganization().Name,
    66  		"SpaceName": cmd.Config.TargetedSpace().Name,
    67  		"Username":  user.Name,
    68  	})
    69  	cmd.UI.DisplayNewline()
    70  
    71  	summaries, warnings, err := cmd.Actor.GetApplicationsWithProcessesBySpace(cmd.Config.TargetedSpace().GUID)
    72  	cmd.UI.DisplayWarnings(warnings)
    73  	if err != nil {
    74  		return err
    75  	}
    76  
    77  	if len(summaries) == 0 {
    78  		cmd.UI.DisplayText("No apps found")
    79  		return nil
    80  	}
    81  
    82  	table := [][]string{
    83  		{
    84  			cmd.UI.TranslateText("name"),
    85  			cmd.UI.TranslateText("requested state"),
    86  			cmd.UI.TranslateText("processes"),
    87  			cmd.UI.TranslateText("routes"),
    88  		},
    89  	}
    90  
    91  	for _, summary := range summaries {
    92  		var routesList string
    93  		if len(summary.ProcessSummaries) > 0 {
    94  			routes, warnings, err := cmd.V2AppActor.GetApplicationRoutes(summary.GUID)
    95  			cmd.UI.DisplayWarnings(warnings)
    96  			if err != nil {
    97  				return err
    98  			}
    99  			routesList = routes.Summary()
   100  		}
   101  
   102  		table = append(table, []string{
   103  			summary.Name,
   104  			cmd.UI.TranslateText(strings.ToLower(string(summary.State))),
   105  			summary.ProcessSummaries.String(),
   106  			routesList,
   107  		})
   108  	}
   109  
   110  	cmd.UI.DisplayTableWithHeader("", table, ui.DefaultTableSpacePadding)
   111  
   112  	return nil
   113  }