Skip to content
This repository was archived by the owner on Feb 27, 2018. It is now read-only.

Commit ddde716

Browse files
committed
Merge pull request #219 from Moghedrin/master
Fix atypical error handling in `cmd` functions.
2 parents 5a714f8 + 17262b4 commit ddde716

3 files changed

Lines changed: 101 additions & 124 deletions

File tree

cmds.go

Lines changed: 77 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -15,38 +15,33 @@ import (
1515
)
1616

1717
// Initialize the boot2docker VM from scratch.
18-
func cmdInit() int {
18+
func cmdInit() error {
1919
B2D.Init = true
2020
_, err := driver.GetMachine(&B2D)
2121
if err != nil {
22-
logf("Failed to initialize machine %q: %s", B2D.VM, err)
23-
return 1
22+
return fmt.Errorf("Failed to initialize machine %q: %s", B2D.VM, err)
2423
}
25-
return 0
24+
return nil
2625
}
2726

2827
// Bring up the VM from all possible states.
29-
func cmdUp() int {
28+
func cmdUp() error {
3029
m, err := driver.GetMachine(&B2D)
3130
if err != nil {
32-
logf("Failed to get machine %q: %s", B2D.VM, err)
33-
return 2
31+
return fmt.Errorf("Failed to get machine %q: %s", B2D.VM, err)
3432
}
3533
if err := m.Start(); err != nil {
36-
logf("Failed to start machine %q: %s", B2D.VM, err)
37-
return 1
34+
return fmt.Errorf("Failed to start machine %q: %s", B2D.VM, err)
3835
}
3936

4037
if err := m.Refresh(); err != nil {
41-
logf("Failed to start machine %q: %s", B2D.VM, err)
42-
return 1
38+
return fmt.Errorf("Failed to start machine %q: %s", B2D.VM, err)
4339
}
4440
if m.GetState() != driver.Running {
45-
logf("Failed to start machine %q (run again with -v for details)", B2D.VM)
46-
return 1
41+
return fmt.Errorf("Failed to start machine %q (run again with -v for details)", B2D.VM)
4742
}
4843

49-
logf("Waiting for VM to be started...")
44+
fmt.Printf("Waiting for VM to be started...")
5045
//give the VM a little time to start, so we don't kill the Serial Pipe/Socket
5146
time.Sleep(600 * time.Millisecond)
5247
natSSH := fmt.Sprintf("localhost:%d", m.GetSSHPort())
@@ -66,190 +61,171 @@ func cmdUp() int {
6661
}
6762
print("\n")
6863

69-
logf("Started.")
64+
fmt.Printf("Started.")
7065

7166
if IP == "" {
7267
// lets try one more time
7368
time.Sleep(600 * time.Millisecond)
74-
logf(" Trying to get IP one more time")
69+
fmt.Printf(" Trying to get IP one more time")
7570

7671
IP = RequestIPFromSSH(m)
7772
}
7873
switch runtime.GOOS {
7974
case "windows":
80-
logf("Docker client does not run on Windows for now. Please use")
81-
logf(" \"%s\" ssh", os.Args[0])
82-
logf("to SSH into the VM instead.")
75+
fmt.Printf("Docker client does not run on Windows for now. Please use")
76+
fmt.Printf(" \"%s\" ssh", os.Args[0])
77+
fmt.Printf("to SSH into the VM instead.")
8378
default:
8479
if IP == "" {
85-
logf("Auto detection of the VM's IP address failed.")
86-
logf("Please run `boot2docker -v up` to diagnose.")
80+
fmt.Fprintf(os.Stderr, "Auto detection of the VM's IP address failed.")
81+
fmt.Fprintf(os.Stderr, "Please run `boot2docker -v up` to diagnose.")
8782
} else {
8883
// Check if $DOCKER_HOST ENV var is properly configured.
8984
if os.Getenv("DOCKER_HOST") != fmt.Sprintf("tcp://%s:%d", IP, driver.DockerPort) {
90-
logf("To connect the Docker client to the Docker daemon, please set:")
91-
logf(" export DOCKER_HOST=tcp://%s:%d", IP, driver.DockerPort)
85+
fmt.Printf("To connect the Docker client to the Docker daemon, please set:")
86+
fmt.Printf(" export DOCKER_HOST=tcp://%s:%d", IP, driver.DockerPort)
9287
} else {
93-
logf("Your DOCKER_HOST env variable is already set correctly.")
88+
fmt.Printf("Your DOCKER_HOST env variable is already set correctly.")
9489
}
9590
}
9691
}
97-
return 0
92+
return nil
9893
}
9994

10095
// Tell the user the config (and later let them set it?)
101-
func cmdConfig() int {
96+
func cmdConfig() error {
10297
dir, err := getCfgDir(".boot2docker")
10398
if err != nil {
104-
logf("Error working out Profile file location: %s", err)
105-
return 1
99+
return fmt.Errorf("Error working out Profile file location: %s", err)
106100
}
107101
filename := getCfgFilename(dir)
108-
logf("boot2docker profile filename: %s", filename)
102+
fmt.Printf("boot2docker profile filename: %s", filename)
109103
fmt.Println(printConfig())
110-
return 0
104+
return nil
111105
}
112106

113107
// Suspend and save the current state of VM on disk.
114-
func cmdSave() int {
108+
func cmdSave() error {
115109
m, err := driver.GetMachine(&B2D)
116110
if err != nil {
117-
logf("Failed to get machine %q: %s", B2D.VM, err)
118-
return 2
111+
return fmt.Errorf("Failed to get machine %q: %s", B2D.VM, err)
119112
}
120113
if err := m.Save(); err != nil {
121-
logf("Failed to save machine %q: %s", B2D.VM, err)
122-
return 1
114+
return fmt.Errorf("Failed to save machine %q: %s", B2D.VM, err)
123115
}
124-
return 0
116+
return nil
125117
}
126118

127119
// Gracefully stop the VM by sending ACPI shutdown signal.
128-
func cmdStop() int {
120+
func cmdStop() error {
129121
m, err := driver.GetMachine(&B2D)
130122
if err != nil {
131-
logf("Failed to get machine %q: %s", B2D.VM, err)
132-
return 2
123+
return fmt.Errorf("Failed to get machine %q: %s", B2D.VM, err)
133124
}
134125
if err := m.Stop(); err != nil {
135-
logf("Failed to stop machine %q: %s", B2D.VM, err)
136-
return 1
126+
return fmt.Errorf("Failed to stop machine %q: %s", B2D.VM, err)
137127
}
138-
return 0
128+
return nil
139129
}
140130

141131
// Forcefully power off the VM (equivalent to unplug power). Might corrupt disk
142132
// image.
143-
func cmdPoweroff() int {
133+
func cmdPoweroff() error {
144134
m, err := driver.GetMachine(&B2D)
145135
if err != nil {
146-
logf("Failed to get machine %q: %s", B2D.VM, err)
147-
return 2
136+
return fmt.Errorf("Failed to get machine %q: %s", B2D.VM, err)
148137
}
149138
if err := m.Poweroff(); err != nil {
150-
logf("Failed to poweroff machine %q: %s", B2D.VM, err)
151-
return 1
139+
return fmt.Errorf("Failed to poweroff machine %q: %s", B2D.VM, err)
152140
}
153-
return 0
141+
return nil
154142
}
155143

156144
// Upgrade the boot2docker ISO - preserving server state
157-
func cmdUpgrade() int {
145+
func cmdUpgrade() error {
158146
m, err := driver.GetMachine(&B2D)
159147
if err == nil && m.GetState() == driver.Running {
160148
// Windows won't let us move the ISO aside while it's in use
161-
if cmdStop() == 0 && cmdDownload() == 0 {
149+
if cmdStop() == nil && cmdDownload() == nil {
162150
return cmdUp()
163151
} else {
164-
return 0
152+
return nil
165153
}
166154
} else {
167155
return cmdDownload()
168156
}
169157
}
170158

171159
// Gracefully stop and then start the VM.
172-
func cmdRestart() int {
160+
func cmdRestart() error {
173161
m, err := driver.GetMachine(&B2D)
174162
if err != nil {
175-
logf("Failed to get machine %q: %s", B2D.VM, err)
176-
return 2
163+
return fmt.Errorf("Failed to get machine %q: %s", B2D.VM, err)
177164
}
178165
if err := m.Restart(); err != nil {
179-
logf("Failed to restart machine %q: %s", B2D.VM, err)
180-
return 1
166+
return fmt.Errorf("Failed to restart machine %q: %s", B2D.VM, err)
181167
}
182-
return 0
168+
return nil
183169
}
184170

185171
// Forcefully reset (equivalent to cold boot) the VM. Might corrupt disk image.
186-
func cmdReset() int {
172+
func cmdReset() error {
187173
m, err := driver.GetMachine(&B2D)
188174
if err != nil {
189-
logf("Failed to get machine %q: %s", B2D.VM, err)
190-
return 2
175+
return fmt.Errorf("Failed to get machine %q: %s", B2D.VM, err)
191176
}
192177
if err := m.Reset(); err != nil {
193-
logf("Failed to reset machine %q: %s", B2D.VM, err)
194-
return 1
178+
return fmt.Errorf("Failed to reset machine %q: %s", B2D.VM, err)
195179
}
196-
return 0
180+
return nil
197181
}
198182

199183
// Delete the VM and associated disk image.
200-
func cmdDelete() int {
184+
func cmdDelete() error {
201185
m, err := driver.GetMachine(&B2D)
202186
if err != nil {
203187
if err == driver.ErrMachineNotExist {
204-
logf("Machine %q does not exist.", B2D.VM)
205-
return 0
188+
return fmt.Errorf("Machine %q does not exist.", B2D.VM)
206189
}
207-
logf("Failed to get machine %q: %s", B2D.VM, err)
208-
return 2
190+
return fmt.Errorf("Failed to get machine %q: %s", B2D.VM, err)
209191
}
210192
if err := m.Delete(); err != nil {
211-
logf("Failed to delete machine %q: %s", B2D.VM, err)
212-
return 1
193+
return fmt.Errorf("Failed to delete machine %q: %s", B2D.VM, err)
213194
}
214-
return 0
195+
return nil
215196
}
216197

217198
// Show detailed info of the VM.
218-
func cmdInfo() int {
199+
func cmdInfo() error {
219200
m, err := driver.GetMachine(&B2D)
220201
if err != nil {
221-
logf("Failed to get machine %q: %s", B2D.VM, err)
222-
return 2
202+
return fmt.Errorf("Failed to get machine %q: %s", B2D.VM, err)
223203
}
224204
if err := json.NewEncoder(os.Stdout).Encode(m); err != nil {
225-
logf("Failed to encode machine %q info: %s", B2D.VM, err)
226-
return 1
205+
return fmt.Errorf("Failed to encode machine %q info: %s", B2D.VM, err)
227206
}
228-
return 0
207+
return nil
229208
}
230209

231210
// Show the current state of the VM.
232-
func cmdStatus() int {
211+
func cmdStatus() error {
233212
m, err := driver.GetMachine(&B2D)
234213
if err != nil {
235-
logf("Failed to get machine %q: %s", B2D.VM, err)
236-
return 2
214+
return fmt.Errorf("Failed to get machine %q: %s", B2D.VM, err)
237215
}
238216
fmt.Println(m.GetState())
239-
return 0
217+
return nil
240218
}
241219

242220
// Call the external SSH command to login into boot2docker VM.
243-
func cmdSSH() int {
221+
func cmdSSH() error {
244222
m, err := driver.GetMachine(&B2D)
245223
if err != nil {
246-
logf("Failed to get machine %q: %s", B2D.VM, err)
247-
return 2
224+
return fmt.Errorf("Failed to get machine %q: %s", B2D.VM, err)
248225
}
249226

250227
if m.GetState() != driver.Running {
251-
logf("VM %q is not running.", B2D.VM)
252-
return 1
228+
return fmt.Errorf("VM %q is not running.", B2D.VM)
253229
}
254230

255231
// find the ssh cmd string and then pass any remaining strings to ssh
@@ -271,22 +247,19 @@ func cmdSSH() int {
271247
}, os.Args[i:]...)
272248

273249
if err := cmdInteractive(B2D.SSH, sshArgs...); err != nil {
274-
logf("%s", err)
275-
return 1
250+
return fmt.Errorf("%s", err)
276251
}
277-
return 0
252+
return nil
278253
}
279254

280-
func cmdIP() int {
255+
func cmdIP() error {
281256
m, err := driver.GetMachine(&B2D)
282257
if err != nil {
283-
logf("Failed to get machine %q: %s", B2D.VM, err)
284-
return 2
258+
return fmt.Errorf("Failed to get machine %q: %s", B2D.VM, err)
285259
}
286260

287261
if m.GetState() != driver.Running {
288-
logf("VM %q is not running.", B2D.VM)
289-
return 1
262+
return fmt.Errorf("VM %q is not running.", B2D.VM)
290263
}
291264

292265
IP := ""
@@ -311,7 +284,7 @@ func cmdIP() int {
311284
fmt.Fprintf(os.Stderr, "\nFailed to get VM Host only IP address.\n")
312285
fmt.Fprintf(os.Stderr, "\tWas the VM initilized using boot2docker?\n")
313286
}
314-
return 0
287+
return nil
315288
}
316289

317290
func RequestIPFromSSH(m driver.Machine) string {
@@ -328,10 +301,10 @@ func RequestIPFromSSH(m driver.Machine) string {
328301
)
329302
IP := ""
330303
if err != nil {
331-
logf("%s", err)
304+
fmt.Fprintf(os.Stderr, "request ip from ssh error: %v", err)
332305
} else {
333306
if B2D.Verbose {
334-
logf("SSH returned: %s\nEND SSH\n", out)
307+
fmt.Printf("SSH returned: %s\nEND SSH\n", out)
335308
}
336309
// parse to find: inet 192.168.59.103/24 brd 192.168.59.255 scope global eth1
337310
lines := strings.Split(out, "\n")
@@ -347,21 +320,19 @@ func RequestIPFromSSH(m driver.Machine) string {
347320
}
348321

349322
// Download the boot2docker ISO image.
350-
func cmdDownload() int {
351-
logf("Downloading boot2docker ISO image...")
323+
func cmdDownload() error {
324+
fmt.Printf("Downloading boot2docker ISO image...")
352325
url := "https://api.github.com/repos/boot2docker/boot2docker/releases"
353326
tag, err := getLatestReleaseName(url)
354327
if err != nil {
355-
logf("Failed to get latest release: %s", err)
356-
return 1
328+
return fmt.Errorf("Failed to get latest release: %s", err)
357329
}
358-
logf("Latest release is %s", tag)
330+
fmt.Printf("Latest release is %s", tag)
359331

360332
url = fmt.Sprintf("https://github.com/boot2docker/boot2docker/releases/download/%s/boot2docker.iso", tag)
361333
if err := download(B2D.ISO, url); err != nil {
362-
logf("Failed to download ISO image: %s", err)
363-
return 1
334+
return fmt.Errorf("Failed to download ISO image: %s", err)
364335
}
365-
logf("Success: downloaded %s\n\tto %s", url, B2D.ISO)
366-
return 0
336+
fmt.Printf("Success: downloaded %s\n\tto %s", url, B2D.ISO)
337+
return nil
367338
}

0 commit comments

Comments
 (0)