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 }