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  }