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

     1  package v7
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/sharedaction"
     5  	"code.cloudfoundry.org/cli/actor/v7action"
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
     7  	"code.cloudfoundry.org/cli/command"
     8  	"code.cloudfoundry.org/cli/command/flag"
     9  	"code.cloudfoundry.org/cli/command/v7/shared"
    10  	"code.cloudfoundry.org/clock"
    11  )
    12  
    13  //go:generate counterfeiter . EnableSSHActor
    14  
    15  type EnableSSHActor interface {
    16  	GetApplicationByNameAndSpace(appName string, spaceGUID string) (v7action.Application, v7action.Warnings, error)
    17  	GetAppFeature(appGUID string, featureName string) (ccv3.ApplicationFeature, v7action.Warnings, error)
    18  	GetSSHEnabled(appGUID string) (ccv3.SSHEnabled, v7action.Warnings, error)
    19  	UpdateAppFeature(app v7action.Application, enabled bool, featureName string) (v7action.Warnings, error)
    20  }
    21  
    22  type EnableSSHCommand struct {
    23  	RequiredArgs    flag.AppName `positional-args:"yes"`
    24  	usage           interface{}  `usage:"CF_NAME enable-ssh APP_NAME"`
    25  	relatedCommands interface{}  `related_commands:"allow-space-ssh, space-ssh-allowed, ssh, ssh-enabled"`
    26  
    27  	UI          command.UI
    28  	Config      command.Config
    29  	SharedActor command.SharedActor
    30  	Actor       EnableSSHActor
    31  }
    32  
    33  func (cmd *EnableSSHCommand) Setup(config command.Config, ui command.UI) error {
    34  	cmd.UI = ui
    35  	cmd.Config = config
    36  	sharedActor := sharedaction.NewActor(config)
    37  	cmd.SharedActor = sharedActor
    38  
    39  	ccClient, _, err := shared.GetNewClientsAndConnectToCF(config, ui, "")
    40  	if err != nil {
    41  		return err
    42  	}
    43  	cmd.Actor = v7action.NewActor(ccClient, config, sharedActor, nil, clock.NewClock())
    44  	return nil
    45  }
    46  
    47  func (cmd *EnableSSHCommand) Execute(args []string) error {
    48  	err := cmd.SharedActor.CheckTarget(true, true)
    49  	if err != nil {
    50  		return err
    51  	}
    52  
    53  	username, err := cmd.Config.CurrentUserName()
    54  	if err != nil {
    55  		return err
    56  	}
    57  
    58  	cmd.UI.DisplayTextWithFlavor("Enabling ssh support for app {{.AppName}} as {{.CurrentUserName}}...", map[string]interface{}{
    59  		"AppName":         cmd.RequiredArgs.AppName,
    60  		"CurrentUserName": username,
    61  	})
    62  
    63  	app, getAppWarnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID)
    64  	if err != nil {
    65  		return err
    66  	}
    67  	cmd.UI.DisplayWarnings(getAppWarnings)
    68  
    69  	appFeature, getAppFeatureWarnings, err := cmd.Actor.GetAppFeature(app.GUID, "ssh")
    70  	if err != nil {
    71  		return err
    72  	}
    73  
    74  	cmd.UI.DisplayWarnings(getAppFeatureWarnings)
    75  
    76  	if appFeature.Enabled {
    77  		cmd.UI.DisplayTextWithFlavor("ssh support for app '{{.AppName}}' is already enabled.", map[string]interface{}{
    78  			"AppName": cmd.RequiredArgs.AppName,
    79  		})
    80  	}
    81  
    82  	updateSSHWarnings, err := cmd.Actor.UpdateAppFeature(app, true, "ssh")
    83  	if err != nil {
    84  		return err
    85  	}
    86  	cmd.UI.DisplayWarnings(updateSSHWarnings)
    87  
    88  	sshEnabled, getSSHEnabledWarnings, err := cmd.Actor.GetSSHEnabled(app.GUID)
    89  	if err != nil {
    90  		return err
    91  	}
    92  	cmd.UI.DisplayWarnings(getSSHEnabledWarnings)
    93  
    94  	cmd.UI.DisplayOK()
    95  
    96  	if !sshEnabled.Enabled {
    97  		cmd.UI.DisplayText("TIP: Ensure ssh is also enabled on the space and global level.")
    98  	}
    99  
   100  	return nil
   101  }