Skip to content
This repository was archived by the owner on Jul 18, 2025. It is now read-only.

Commit 6aeb46f

Browse files
committed
Add support to disable hyperv dynamic memory management during VM creation
Signed-off-by: Shahid Iqbal <[email protected]>
1 parent 7890e8d commit 6aeb46f

File tree

2 files changed

+40
-21
lines changed

2 files changed

+40
-21
lines changed

drivers/hyperv/hyperv.go

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,31 @@ import (
1616

1717
type Driver struct {
1818
*drivers.BaseDriver
19-
Boot2DockerURL string
20-
VSwitch string
21-
DiskSize int
22-
MemSize int
23-
CPU int
24-
MacAddr string
25-
VLanID int
19+
Boot2DockerURL string
20+
VSwitch string
21+
DiskSize int
22+
MemSize int
23+
CPU int
24+
MacAddr string
25+
VLanID int
26+
DisableDynamicMemory bool
2627
}
2728

2829
const (
29-
defaultDiskSize = 20000
30-
defaultMemory = 1024
31-
defaultCPU = 1
32-
defaultVLanID = 0
30+
defaultDiskSize = 20000
31+
defaultMemory = 1024
32+
defaultCPU = 1
33+
defaultVLanID = 0
34+
defaultDisableDynamicMemory = false
3335
)
3436

3537
// NewDriver creates a new Hyper-v driver with default settings.
3638
func NewDriver(hostName, storePath string) *Driver {
3739
return &Driver{
38-
DiskSize: defaultDiskSize,
39-
MemSize: defaultMemory,
40-
CPU: defaultCPU,
40+
DiskSize: defaultDiskSize,
41+
MemSize: defaultMemory,
42+
CPU: defaultCPU,
43+
DisableDynamicMemory: defaultDisableDynamicMemory,
4144
BaseDriver: &drivers.BaseDriver{
4245
MachineName: hostName,
4346
StorePath: storePath,
@@ -88,6 +91,11 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
8891
Value: defaultVLanID,
8992
EnvVar: "HYPERV_VLAN_ID",
9093
},
94+
mcnflag.BoolFlag{
95+
Name: "hyperv-disable-dynamic-memory",
96+
Usage: "Disable dynamic memory management setting",
97+
EnvVar: "HYPERV_DISABLE_DYNAMIC_MEMORY",
98+
},
9199
}
92100
}
93101

@@ -100,6 +108,7 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
100108
d.MacAddr = flags.String("hyperv-static-macaddress")
101109
d.VLanID = flags.Int("hyperv-vlan-id")
102110
d.SSHUser = "docker"
111+
d.DisableDynamicMemory = flags.Bool("hyperv-disable-dynamic-memory")
103112
d.SetSwarmConfigFromFlags(flags)
104113

105114
return nil
@@ -212,6 +221,13 @@ func (d *Driver) Create() error {
212221
"-MemoryStartupBytes", toMb(d.MemSize)); err != nil {
213222
return err
214223
}
224+
if d.DisableDynamicMemory {
225+
if err := cmd("Hyper-V\\Set-VMMemory",
226+
"-VMName", d.MachineName,
227+
"-DynamicMemoryEnabled", "$false"); err != nil {
228+
return err
229+
}
230+
}
215231

216232
if d.CPU > 1 {
217233
if err := cmd("Hyper-V\\Set-VMProcessor",

drivers/hyperv/hyperv_test.go

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,22 @@ func TestSetConfigFromDefaultFlags(t *testing.T) {
3131
assert.Equal(t, "", driver.MacAddr)
3232
assert.Equal(t, defaultVLanID, driver.VLanID)
3333
assert.Equal(t, "docker", driver.GetSSHUsername())
34+
assert.Equal(t, defaultDisableDynamicMemory, driver.DisableDynamicMemory)
3435
}
3536

3637
func TestSetConfigFromCustomFlags(t *testing.T) {
3738
driver := NewDriver("default", "path")
3839

3940
checkFlags := &drivers.CheckDriverOptions{
4041
FlagsValues: map[string]interface{}{
41-
"hyperv-boot2docker-url": "B2D_URL",
42-
"hyperv-virtual-switch": "TheSwitch",
43-
"hyperv-disk-size": 100000,
44-
"hyperv-memory": 4096,
45-
"hyperv-cpu-count": 4,
46-
"hyperv-static-macaddress": "00:0a:95:9d:68:16",
47-
"hyperv-vlan-id": 2,
42+
"hyperv-boot2docker-url": "B2D_URL",
43+
"hyperv-virtual-switch": "TheSwitch",
44+
"hyperv-disk-size": 100000,
45+
"hyperv-memory": 4096,
46+
"hyperv-cpu-count": 4,
47+
"hyperv-static-macaddress": "00:0a:95:9d:68:16",
48+
"hyperv-vlan-id": 2,
49+
"hyperv-disable-dynamic-memory": true,
4850
},
4951
CreateFlags: driver.GetCreateFlags(),
5052
}
@@ -65,4 +67,5 @@ func TestSetConfigFromCustomFlags(t *testing.T) {
6567
assert.Equal(t, "00:0a:95:9d:68:16", driver.MacAddr)
6668
assert.Equal(t, 2, driver.VLanID)
6769
assert.Equal(t, "docker", driver.GetSSHUsername())
70+
assert.Equal(t, true, driver.DisableDynamicMemory)
6871
}

0 commit comments

Comments
 (0)