118 lines
3.1 KiB
Go
118 lines
3.1 KiB
Go
//go:build windows
|
|
// +build windows
|
|
|
|
package hypervctl
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
type vmState uint16
|
|
|
|
const (
|
|
// Changes the state to 'Running'.
|
|
start vmState = 2
|
|
// Stops the job temporarily. The intention is to subsequently restart the job with 'Start'. It might be possible to
|
|
// enter the 'Service' state while suspended. (This is job-specific.)
|
|
suspend vmState = 3
|
|
// Stops the job cleanly, saves data, preserves the state, and shuts down all underlying processes'
|
|
// in an orderly manner.
|
|
terminate vmState = 4
|
|
//Terminates the job immediately with no requirement to save data or preserve the state.
|
|
kill vmState = 5
|
|
)
|
|
|
|
type EnabledState uint16
|
|
|
|
const (
|
|
// Unknown The state of the element could not be determined.
|
|
Unknown EnabledState = 0
|
|
// Other No description
|
|
Other EnabledState = 1
|
|
// Enabled The element is running.
|
|
Enabled EnabledState = 2
|
|
// Disabled The element is turned off.
|
|
Disabled EnabledState = 3
|
|
// ShuttingDown Shutting_Down The element is in the process of going to a Disabled state.
|
|
ShuttingDown EnabledState = 4
|
|
// NotApplicable The element does not support being enabled or disabled.
|
|
NotApplicable EnabledState = 5
|
|
// EnabledButOffline The element might be completing commands, and it will drop any new requests.
|
|
EnabledButOffline EnabledState = 6
|
|
// InTest The element is in a test state.
|
|
InTest EnabledState = 7
|
|
// Deferred The element might be completing commands, but it will queue any new requests.
|
|
Deferred EnabledState = 8
|
|
// Quiesce The element is enabled but in a restricted mode. The behavior of the element is similar to the Enabled state
|
|
//(2), but it processes only a restricted set of commands. All other requests are queued.
|
|
Quiesce EnabledState = 9
|
|
// Starting The element is in the process of going to an Enabled state (2). New requests are queued.
|
|
Starting EnabledState = 10
|
|
)
|
|
|
|
func (es EnabledState) String() string {
|
|
switch es {
|
|
case Unknown:
|
|
return "unknown"
|
|
case Other:
|
|
return "other"
|
|
case Enabled:
|
|
return "enabled"
|
|
case Disabled:
|
|
return "disabled"
|
|
case ShuttingDown:
|
|
return "shutting down"
|
|
case NotApplicable:
|
|
return "not applicable"
|
|
case EnabledButOffline:
|
|
return "enabled but offline"
|
|
case InTest:
|
|
return "in test"
|
|
case Deferred:
|
|
return "deferred"
|
|
case Quiesce:
|
|
return "quiesce"
|
|
}
|
|
return "starting"
|
|
}
|
|
|
|
func (es EnabledState) equal(s uint16) bool {
|
|
return es == EnabledState(s)
|
|
}
|
|
|
|
// HyperVConfig describes physical attributes of the machine
|
|
type HyperVConfig struct {
|
|
// Hardware configuration for HyperV
|
|
Hardware HardwareConfig
|
|
// state and descriptive info
|
|
Status Statuses
|
|
}
|
|
|
|
type HardwareConfig struct {
|
|
// CPUs to be assigned to the VM
|
|
CPUs uint16
|
|
// Diskpath is fully qualified location of the
|
|
// bootable disk image
|
|
DiskPath string
|
|
// Disk size in gigabytes assigned to the vm
|
|
DiskSize uint64
|
|
// Memory in megabytes assigned to the vm
|
|
Memory uint64
|
|
// Network is bool to add a Network Connection to the
|
|
// default network switch in Microsoft HyperV
|
|
Network bool
|
|
}
|
|
|
|
type Statuses struct {
|
|
// time vm created
|
|
Created time.Time
|
|
// last time vm ran
|
|
LastUp time.Time
|
|
// is vm running
|
|
Running bool
|
|
// is vm starting up
|
|
Starting bool
|
|
// vm state
|
|
State EnabledState
|
|
}
|