Merge pull request #2932 from sipicsg/master

added hyperv static mac address and vlan option for machine creation
This commit is contained in:
Jean-Laurent de Morlhon 2016-02-18 09:56:34 +01:00
commit cf7885163c
3 changed files with 55 additions and 12 deletions

View File

@ -31,13 +31,17 @@ Options:
- `--hyperv-disk-size`: Size of disk for the host in MB. - `--hyperv-disk-size`: Size of disk for the host in MB.
- `--hyperv-memory`: Size of memory for the host in MB. - `--hyperv-memory`: Size of memory for the host in MB.
- `--hyperv-cpu-count`: Number of CPUs for the host. - `--hyperv-cpu-count`: Number of CPUs for the host.
- `--hyperv-static-macaddress`: Hyper-V network adapter's static MAC address.
- `--hyperv-vlan-id`: Hyper-V network adapter's VLAN ID if any.
Environment variables and default values: Environment variables and default values:
| CLI option | Environment variable | Default | | CLI option | Environment variable | Default |
| -------------------------- | ------------------------ | ------------------------ | | ---------------------------- | -------------------------- | ------------------------ |
| `--hyperv-boot2docker-url` | `HYPERV_BOOT2DOCKER_URL` | _Latest boot2docker url_ | | `--hyperv-boot2docker-url` | `HYPERV_BOOT2DOCKER_URL` | _Latest boot2docker url_ |
| `--hyperv-virtual-switch` | `HYPERV_VIRTUAL_SWITCH` | _first found_ | | `--hyperv-virtual-switch` | `HYPERV_VIRTUAL_SWITCH` | _first found_ |
| `--hyperv-disk-size` | `HYPERV_DISK_SIZE` | `20000` | | `--hyperv-disk-size` | `HYPERV_DISK_SIZE` | `20000` |
| `--hyperv-memory` | `HYPERV_MEMORY` | `1024` | | `--hyperv-memory` | `HYPERV_MEMORY` | `1024` |
| `--hyperv-cpu-count` | `HYPERV_CPU_COUNT` | `1` | | `--hyperv-cpu-count` | `HYPERV_CPU_COUNT` | `1` |
| `--hyperv-static-macaddress` | `HYPERV_STATIC_MACADDRESS` | _undefined_ |
| `--hyperv-cpu-count` | `HYPERV_VLAN_ID` | _undefined_ |

View File

@ -23,12 +23,15 @@ type Driver struct {
DiskSize int DiskSize int
MemSize int MemSize int
CPU int CPU int
MacAddr string
VLanID int
} }
const ( const (
defaultDiskSize = 20000 defaultDiskSize = 20000
defaultMemory = 1024 defaultMemory = 1024
defaultCPU = 1 defaultCPU = 1
defaultVLanID = 0
) )
// NewDriver creates a new Hyper-v driver with default settings. // NewDriver creates a new Hyper-v driver with default settings.
@ -76,6 +79,17 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
Value: defaultCPU, Value: defaultCPU,
EnvVar: "HYPERV_CPU_COUNT", EnvVar: "HYPERV_CPU_COUNT",
}, },
mcnflag.StringFlag{
Name: "hyperv-static-macaddress",
Usage: "Hyper-V network adapter's static MAC address.",
EnvVar: "HYPERV_STATIC_MACADDRESS",
},
mcnflag.IntFlag{
Name: "hyperv-vlan-id",
Usage: "Hyper-V network adapter's VLAN ID if any",
Value: defaultVLanID,
EnvVar: "HYPERV_VLAN_ID",
},
} }
} }
@ -88,6 +102,8 @@ func (d *Driver) SetConfigFromFlags(flags drivers.DriverOptions) error {
d.DiskSize = flags.Int("hyperv-disk-size") d.DiskSize = flags.Int("hyperv-disk-size")
d.MemSize = flags.Int("hyperv-memory") d.MemSize = flags.Int("hyperv-memory")
d.CPU = flags.Int("hyperv-cpu-count") d.CPU = flags.Int("hyperv-cpu-count")
d.MacAddr = flags.String("hyperv-static-macaddress")
d.VLanID = flags.Int("hyperv-vlan-id")
d.SSHUser = "docker" d.SSHUser = "docker"
d.SetSwarmConfigFromFlags(flags) d.SetSwarmConfigFromFlags(flags)
@ -213,6 +229,23 @@ func (d *Driver) Create() error {
} }
} }
if d.MacAddr != "" {
if err := cmd("Set-VMNetworkAdapter",
"-VMName", d.MachineName,
"-StaticMacAddress", fmt.Sprintf("\"%s\"", d.MacAddr)); err != nil {
return err
}
}
if d.VLanID > 0 {
if err := cmd("Set-VMNetworkAdapterVlan",
"-VMName", d.MachineName,
"-Access",
"-VlanId", fmt.Sprintf("%d", d.VLanID)); err != nil {
return err
}
}
if err := cmd("Set-VMDvdDrive", if err := cmd("Set-VMDvdDrive",
"-VMName", d.MachineName, "-VMName", d.MachineName,
"-Path", quote(d.ResolveStorePath("boot2docker.iso"))); err != nil { "-Path", quote(d.ResolveStorePath("boot2docker.iso"))); err != nil {

View File

@ -28,6 +28,8 @@ func TestSetConfigFromDefaultFlags(t *testing.T) {
assert.Equal(t, defaultDiskSize, driver.DiskSize) assert.Equal(t, defaultDiskSize, driver.DiskSize)
assert.Equal(t, defaultMemory, driver.MemSize) assert.Equal(t, defaultMemory, driver.MemSize)
assert.Equal(t, defaultCPU, driver.CPU) assert.Equal(t, defaultCPU, driver.CPU)
assert.Equal(t, "", driver.MacAddr)
assert.Equal(t, defaultVLanID, driver.VLanID)
assert.Equal(t, "docker", driver.GetSSHUsername()) assert.Equal(t, "docker", driver.GetSSHUsername())
} }
@ -41,6 +43,8 @@ func TestSetConfigFromCustomFlags(t *testing.T) {
"hyperv-disk-size": 100000, "hyperv-disk-size": 100000,
"hyperv-memory": 4096, "hyperv-memory": 4096,
"hyperv-cpu-count": 4, "hyperv-cpu-count": 4,
"hyperv-static-macaddress": "00:0a:95:9d:68:16",
"hyperv-vlan-id": 2,
}, },
CreateFlags: driver.GetCreateFlags(), CreateFlags: driver.GetCreateFlags(),
} }
@ -58,5 +62,7 @@ func TestSetConfigFromCustomFlags(t *testing.T) {
assert.Equal(t, 100000, driver.DiskSize) assert.Equal(t, 100000, driver.DiskSize)
assert.Equal(t, 4096, driver.MemSize) assert.Equal(t, 4096, driver.MemSize)
assert.Equal(t, 4, driver.CPU) assert.Equal(t, 4, driver.CPU)
assert.Equal(t, "00:0a:95:9d:68:16", driver.MacAddr)
assert.Equal(t, 2, driver.VLanID)
assert.Equal(t, "docker", driver.GetSSHUsername()) assert.Equal(t, "docker", driver.GetSSHUsername())
} }