github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+incompatible/command/v6/v3_app_command.go (about)

     1  package v6
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/sharedaction"
     5  	"code.cloudfoundry.org/cli/actor/v2action"
     6  	"code.cloudfoundry.org/cli/actor/v2v3action"
     7  	"code.cloudfoundry.org/cli/actor/v3action"
     8  	"code.cloudfoundry.org/cli/command"
     9  	"code.cloudfoundry.org/cli/command/flag"
    10  	"code.cloudfoundry.org/cli/command/v6/shared"
    11  )
    12  
    13  //go:generate counterfeiter . V2V3AppSummaryActor
    14  
    15  type V2V3AppSummaryActor interface {
    16  	GetApplicationSummaryByNameAndSpace(appName string, spaceGUID string, withObfuscatedValues bool) (v2v3action.ApplicationSummary, v2v3action.Warnings, error)
    17  }
    18  
    19  //go:generate counterfeiter . V3AppActor
    20  
    21  type V3AppActor interface {
    22  	shared.V3AppSummaryActor
    23  	GetApplicationByNameAndSpace(name string, spaceGUID string) (v3action.Application, v3action.Warnings, error)
    24  }
    25  
    26  type V3AppCommand struct {
    27  	RequiredArgs    flag.AppName `positional-args:"yes"`
    28  	GUID            bool         `long:"guid" description:"Retrieve and display the given app's guid.  All other health and status output for the app is suppressed."`
    29  	usage           interface{}  `usage:"CF_NAME app APP_NAME [--guid]"`
    30  	relatedCommands interface{}  `related_commands:"apps, events, logs, map-route, unmap-route, push"`
    31  
    32  	UI              command.UI
    33  	Config          command.Config
    34  	SharedActor     command.SharedActor
    35  	AppSummaryActor V2V3AppSummaryActor
    36  	Actor           V3AppActor
    37  }
    38  
    39  func (cmd *V3AppCommand) Setup(config command.Config, ui command.UI) error {
    40  	cmd.UI = ui
    41  	cmd.Config = config
    42  	cmd.SharedActor = sharedaction.NewActor(config)
    43  
    44  	ccClient, _, err := shared.NewV3BasedClients(config, ui, true, "")
    45  	if err != nil {
    46  		return err
    47  	}
    48  
    49  	ccClientV2, uaaClientV2, err := shared.NewClients(config, ui, true)
    50  	if err != nil {
    51  		return err
    52  	}
    53  
    54  	v2Actor := v2action.NewActor(ccClientV2, uaaClientV2, config)
    55  	v3Actor := v3action.NewActor(ccClient, config, nil, nil)
    56  	cmd.AppSummaryActor = v2v3action.NewActor(v2Actor, v3Actor)
    57  	cmd.Actor = v3Actor
    58  
    59  	return nil
    60  }
    61  
    62  func (cmd V3AppCommand) Execute(args []string) error {
    63  	err := cmd.SharedActor.CheckTarget(true, true)
    64  	if err != nil {
    65  		return err
    66  	}
    67  
    68  	if cmd.GUID {
    69  		return cmd.displayAppGUID()
    70  	}
    71  
    72  	user, err := cmd.Config.CurrentUser()
    73  	if err != nil {
    74  		return err
    75  	}
    76  
    77  	cmd.UI.DisplayTextWithFlavor("Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{
    78  		"AppName":   cmd.RequiredArgs.AppName,
    79  		"OrgName":   cmd.Config.TargetedOrganization().Name,
    80  		"SpaceName": cmd.Config.TargetedSpace().Name,
    81  		"Username":  user.Name,
    82  	})
    83  	cmd.UI.DisplayNewline()
    84  
    85  	appSummaryDisplayer := shared.NewAppSummaryDisplayer2(cmd.UI)
    86  	summary, warnings, err := cmd.AppSummaryActor.GetApplicationSummaryByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID, false)
    87  	cmd.UI.DisplayWarnings(warnings)
    88  	if err != nil {
    89  		return err
    90  	}
    91  
    92  	appSummaryDisplayer.AppDisplay(summary, false)
    93  	return nil
    94  }
    95  
    96  func (cmd V3AppCommand) displayAppGUID() error {
    97  	app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID)
    98  	cmd.UI.DisplayWarnings(warnings)
    99  	if err != nil {
   100  		return err
   101  	}
   102  
   103  	cmd.UI.DisplayText(app.GUID)
   104  	return nil
   105  }