github.com/scaleway/scaleway-cli@v1.11.1/pkg/cli/cmd_exec.go (about) 1 // Copyright (C) 2015 Scaleway. All rights reserved. 2 // Use of this source code is governed by a MIT-style 3 // license that can be found in the LICENSE.md file. 4 5 package cli 6 7 import "github.com/scaleway/scaleway-cli/pkg/commands" 8 9 var cmdExec = &Command{ 10 Exec: runExec, 11 UsageLine: "exec [OPTIONS] SERVER [COMMAND] [ARGS...]", 12 Description: "Run a command on a running server", 13 Help: "Run a command on a running server.", 14 Examples: ` 15 $ scw exec myserver 16 $ scw exec myserver bash 17 $ scw exec --gateway=myotherserver myserver bash 18 $ scw exec myserver 'tmux a -t joe || tmux new -s joe || bash' 19 $ SCW_SECURE_EXEC=1 scw exec myserver bash 20 $ scw exec -w $(scw start $(scw create ubuntu-trusty)) bash 21 $ scw exec $(scw start -w $(scw create ubuntu-trusty)) bash 22 $ scw exec myserver tmux new -d sleep 10 23 $ scw exec myserver ls -la | grep password 24 $ cat local-file | scw exec myserver 'cat > remote/path' 25 `, 26 } 27 28 func init() { 29 cmdExec.Flag.BoolVar(&execHelp, []string{"h", "-help"}, false, "Print usage") 30 cmdExec.Flag.Float64Var(&execTimeout, []string{"T", "-timeout"}, 0, "Set timeout values to seconds") 31 cmdExec.Flag.BoolVar(&execW, []string{"w", "-wait"}, false, "Wait for SSH to be ready") 32 cmdExec.Flag.StringVar(&execGateway, []string{"g", "-gateway"}, "", "Use a SSH gateway") 33 cmdExec.Flag.StringVar(&execSSHUser, []string{"-user"}, "root", "Specify SSH user") 34 cmdExec.Flag.IntVar(&execSSHPort, []string{"-p", "-port"}, 22, "Specify SSH port") 35 } 36 37 // Flags 38 var execW bool // -w, --wait flag 39 var execTimeout float64 // -T flag 40 var execHelp bool // -h, --help flag 41 var execGateway string // -g, --gateway flag 42 var execSSHUser string // --user flag 43 var execSSHPort int // -p, --port flag 44 45 func runExec(cmd *Command, rawArgs []string) error { 46 if execHelp { 47 return cmd.PrintUsage() 48 } 49 if len(rawArgs) < 1 { 50 return cmd.PrintShortUsage() 51 } 52 53 args := commands.ExecArgs{ 54 Timeout: execTimeout, 55 Wait: execW, 56 Gateway: execGateway, 57 Server: rawArgs[0], 58 Command: rawArgs[1:], 59 SSHUser: execSSHUser, 60 SSHPort: execSSHPort, 61 } 62 ctx := cmd.GetContext(rawArgs) 63 return commands.RunExec(ctx, args) 64 }