15
15
// Package qemu provides an interface for interacting with running QEMU instances.
16
16
package qemu
17
17
18
+ //go:generate stringer -type=Status -output=string.gen.go
19
+
18
20
import (
19
21
"encoding/json"
20
22
"errors"
@@ -26,6 +28,7 @@ import (
26
28
"time"
27
29
28
30
"github.com/digitalocean/go-qemu/qmp"
31
+ "github.com/digitalocean/go-qemu/qmp/raw"
29
32
)
30
33
31
34
var (
@@ -269,48 +272,46 @@ func (d *Domain) ScreenDump() (io.ReadCloser, error) {
269
272
}
270
273
271
274
// Status represents the current status of the domain.
272
- type Status string
275
+ type Status int
273
276
274
277
// Status constants which indicate the status of a domain.
275
278
const (
276
- StatusDebug Status = "debug"
277
- StatusFinishMigrate Status = "finish-migrate"
278
- StatusIOError Status = "io-error"
279
- StatusInMigrate Status = "inmigrate"
280
- StatusInternalError Status = "internal-error"
281
- StatusPaused Status = "paused"
282
- StatusPostMigrate Status = "postmigrate"
283
- StatusPreLaunch Status = "prelaunch"
284
- StatusRestoreVM Status = "restore-vm"
285
- StatusRunning Status = "running"
286
- StatusSaveVM Status = "save-vm"
287
- StatusShutdown Status = "shutdown"
288
- StatusWatchdog Status = "watchdog"
279
+ StatusDebug Status = Status (raw .RunStateDebug )
280
+ StatusFinishMigrate Status = Status (raw .RunStateFinishMigrate )
281
+ StatusGuestPanicked Status = Status (raw .RunStateGuestPanicked )
282
+ StatusIOError Status = Status (raw .RunStateIOError )
283
+ StatusInMigrate Status = Status (raw .RunStateInmigrate )
284
+ StatusInternalError Status = Status (raw .RunStateInternalError )
285
+ StatusPaused Status = Status (raw .RunStatePaused )
286
+ StatusPostMigrate Status = Status (raw .RunStatePostmigrate )
287
+ StatusPreLaunch Status = Status (raw .RunStatePrelaunch )
288
+ StatusRestoreVM Status = Status (raw .RunStateRestoreVM )
289
+ StatusRunning Status = Status (raw .RunStateRunning )
290
+ StatusSaveVM Status = Status (raw .RunStateSaveVM )
291
+ StatusShutdown Status = Status (raw .RunStateShutdown )
292
+ StatusSuspended Status = Status (raw .RunStateSuspended )
293
+ StatusWatchdog Status = Status (raw .RunStateWatchdog )
289
294
)
290
295
291
296
// Status returns the current status of the domain.
292
297
func (d * Domain ) Status () (Status , error ) {
293
- raw , err := d .Run (qmp.Command {Execute : "query-status" })
298
+ out , err := d .Run (qmp.Command {Execute : "query-status" })
294
299
if err != nil {
295
300
// libvirt returns an error if the domain is not running
296
301
if strings .Contains (err .Error (), "not running" ) {
297
302
return StatusShutdown , nil
298
303
}
299
304
300
- return "" , err
305
+ return 0 , err
301
306
}
302
307
303
308
var response struct {
304
- ID string `json:"id"`
305
- Return struct {
306
- Running bool `json:"running"`
307
- Singlestep bool `json:"singlestep"`
308
- Status string `json:"status"`
309
- } `json:"return"`
309
+ ID string `json:"id"`
310
+ Return raw.StatusInfo `json:"return"`
310
311
}
311
312
312
- if err = json .Unmarshal (raw , & response ); err != nil {
313
- return "" , err
313
+ if err = json .Unmarshal (out , & response ); err != nil {
314
+ return 0 , err
314
315
}
315
316
316
317
return Status (response .Return .Status ), nil
0 commit comments