|
5 | 5 | package cli
|
6 | 6 |
|
7 | 7 | import (
|
8 |
| - "fmt" |
9 |
| - "os" |
| 8 | + "strings" |
10 | 9 |
|
| 10 | + "github.com/scaleway/scaleway-cli/vendor/github.com/Sirupsen/logrus" |
11 | 11 | log "github.com/scaleway/scaleway-cli/vendor/github.com/Sirupsen/logrus"
|
12 | 12 |
|
13 |
| - api "github.com/scaleway/scaleway-cli/pkg/api" |
14 |
| - "github.com/scaleway/scaleway-cli/pkg/utils" |
| 13 | + "github.com/scaleway/scaleway-cli/pkg/commands" |
15 | 14 | )
|
16 | 15 |
|
17 | 16 | var cmdRun = &Command{
|
@@ -52,85 +51,39 @@ var runAttachFlag bool // -a, --attach flag
|
52 | 51 | var runDetachFlag bool // -d, --detach flag
|
53 | 52 | var runGateway string // -g, --gateway flag
|
54 | 53 |
|
55 |
| -func runRun(cmd *Command, args []string) { |
| 54 | +func runRun(cmd *Command, rawArgs []string) { |
56 | 55 | if runHelpFlag {
|
57 | 56 | cmd.PrintUsage()
|
58 | 57 | }
|
59 |
| - if len(args) < 1 { |
| 58 | + if len(rawArgs) < 1 { |
60 | 59 | cmd.PrintShortUsage()
|
61 | 60 | }
|
62 |
| - if runAttachFlag && len(args) > 1 { |
| 61 | + if runAttachFlag && len(rawArgs) > 1 { |
63 | 62 | log.Fatalf("Conflicting options: -a and COMMAND")
|
64 | 63 | }
|
65 | 64 | if runAttachFlag && runDetachFlag {
|
66 | 65 | log.Fatalf("Conflicting options: -a and -d")
|
67 | 66 | }
|
68 |
| - if runDetachFlag && len(args) > 1 { |
| 67 | + if runDetachFlag && len(rawArgs) > 1 { |
69 | 68 | log.Fatalf("Conflicting options: -d and COMMAND")
|
70 | 69 | }
|
71 | 70 |
|
72 |
| - if runGateway == "" { |
73 |
| - runGateway = os.Getenv("SCW_GATEWAY") |
| 71 | + args := commands.RunArgs{ |
| 72 | + Attach: runAttachFlag, |
| 73 | + Bootscript: runCreateBootscript, |
| 74 | + Command: rawArgs[1:], |
| 75 | + Detach: runDetachFlag, |
| 76 | + Gateway: runGateway, |
| 77 | + Image: rawArgs[0], |
| 78 | + Name: runCreateName, |
| 79 | + Tags: strings.Split(runCreateEnv, " "), |
| 80 | + Volumes: strings.Split(runCreateVolume, " "), |
| 81 | + // FIXME: DynamicIPRequired |
| 82 | + // FIXME: Timeout |
74 | 83 | }
|
75 |
| - |
76 |
| - // create IMAGE |
77 |
| - log.Info("Server creation ...") |
78 |
| - dynamicIPRequired := runGateway == "" |
79 |
| - serverID, err := api.CreateServer(cmd.API, args[0], runCreateName, runCreateBootscript, runCreateEnv, runCreateVolume, dynamicIPRequired) |
| 84 | + ctx := cmd.GetContext(rawArgs) |
| 85 | + err := commands.RunRun(ctx, args) |
80 | 86 | if err != nil {
|
81 |
| - log.Fatalf("Failed to create server: %v", err) |
82 |
| - } |
83 |
| - log.Infof("Server created: %s", serverID) |
84 |
| - |
85 |
| - // start SERVER |
86 |
| - log.Info("Server start requested ...") |
87 |
| - err = api.StartServer(cmd.API, serverID, false) |
88 |
| - if err != nil { |
89 |
| - log.Fatalf("Failed to start server %s: %v", serverID, err) |
90 |
| - } |
91 |
| - log.Info("Server is starting, this may take up to a minute ...") |
92 |
| - |
93 |
| - if runDetachFlag { |
94 |
| - fmt.Println(serverID) |
95 |
| - return |
96 |
| - } |
97 |
| - |
98 |
| - if runAttachFlag { |
99 |
| - // Attach to server serial |
100 |
| - log.Info("Attaching to server console ...") |
101 |
| - err = utils.AttachToSerial(serverID, cmd.API.Token, true) |
102 |
| - if err != nil { |
103 |
| - log.Fatalf("Cannot attach to server serial: %v", err) |
104 |
| - } |
105 |
| - } else { |
106 |
| - // Resolve gateway |
107 |
| - gateway, err := api.ResolveGateway(cmd.API, runGateway) |
108 |
| - if err != nil { |
109 |
| - log.Fatalf("Cannot resolve Gateway '%s': %v", runGateway, err) |
110 |
| - } |
111 |
| - |
112 |
| - // waiting for server to be ready |
113 |
| - log.Debug("Waiting for server to be ready") |
114 |
| - // We wait for 30 seconds, which is the minimal amount of time needed by a server to boot |
115 |
| - server, err := api.WaitForServerReady(cmd.API, serverID, gateway) |
116 |
| - if err != nil { |
117 |
| - log.Fatalf("Cannot get access to server %s: %v", serverID, err) |
118 |
| - } |
119 |
| - log.Debugf("SSH server is available: %s:22", server.PublicAddress.IP) |
120 |
| - log.Info("Server is ready !") |
121 |
| - |
122 |
| - // exec -w SERVER COMMAND ARGS... |
123 |
| - if len(args) < 2 { |
124 |
| - log.Info("Connecting to server ...") |
125 |
| - err = utils.SSHExec(server.PublicAddress.IP, server.PrivateIP, []string{}, false, gateway) |
126 |
| - } else { |
127 |
| - log.Infof("Executing command: %s ...", args[1:]) |
128 |
| - err = utils.SSHExec(server.PublicAddress.IP, server.PrivateIP, args[1:], false, gateway) |
129 |
| - } |
130 |
| - if err != nil { |
131 |
| - log.Infof("Command execution failed: %v", err) |
132 |
| - os.Exit(1) |
133 |
| - } |
134 |
| - log.Info("Command successfuly executed") |
| 87 | + logrus.Fatalf("Cannot execute 'run': %v", err) |
135 | 88 | }
|
136 | 89 | }
|
0 commit comments