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-memory`: Size of memory for the host in MB.
- `--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:
| CLI option | Environment variable | Default |
| -------------------------- | ------------------------ | ------------------------ |
| `--hyperv-boot2docker-url` | `HYPERV_BOOT2DOCKER_URL` | _Latest boot2docker url_ |
| `--hyperv-virtual-switch` | `HYPERV_VIRTUAL_SWITCH` | _first found_ |
| `--hyperv-disk-size` | `HYPERV_DISK_SIZE` | `20000` |
| `--hyperv-memory` | `HYPERV_MEMORY` | `1024` |
| `--hyperv-cpu-count` | `HYPERV_CPU_COUNT` | `1` |
| CLI option | Environment variable | Default |
| ---------------------------- | -------------------------- | ------------------------ |
| `--hyperv-boot2docker-url` | `HYPERV_BOOT2DOCKER_URL` | _Latest boot2docker url_ |
| `--hyperv-virtual-switch` | `HYPERV_VIRTUAL_SWITCH` | _first found_ |
| `--hyperv-disk-size` | `HYPERV_DISK_SIZE` | `20000` |
| `--hyperv-memory` | `HYPERV_MEMORY` | `1024` |
| `--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
MemSize int
CPU int
MacAddr string
VLanID int
}
const (
defaultDiskSize = 20000
defaultMemory = 1024
defaultCPU = 1
defaultVLanID = 0
)
// NewDriver creates a new Hyper-v driver with default settings.
@ -76,6 +79,17 @@ func (d *Driver) GetCreateFlags() []mcnflag.Flag {
Value: defaultCPU,
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.MemSize = flags.Int("hyperv-memory")
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.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",
"-VMName", d.MachineName,
"-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, defaultMemory, driver.MemSize)
assert.Equal(t, defaultCPU, driver.CPU)
assert.Equal(t, "", driver.MacAddr)
assert.Equal(t, defaultVLanID, driver.VLanID)
assert.Equal(t, "docker", driver.GetSSHUsername())
}
@ -36,11 +38,13 @@ func TestSetConfigFromCustomFlags(t *testing.T) {
checkFlags := &drivers.CheckDriverOptions{
FlagsValues: map[string]interface{}{
"hyperv-boot2docker-url": "B2D_URL",
"hyperv-virtual-switch": "TheSwitch",
"hyperv-disk-size": 100000,
"hyperv-memory": 4096,
"hyperv-cpu-count": 4,
"hyperv-boot2docker-url": "B2D_URL",
"hyperv-virtual-switch": "TheSwitch",
"hyperv-disk-size": 100000,
"hyperv-memory": 4096,
"hyperv-cpu-count": 4,
"hyperv-static-macaddress": "00:0a:95:9d:68:16",
"hyperv-vlan-id": 2,
},
CreateFlags: driver.GetCreateFlags(),
}
@ -58,5 +62,7 @@ func TestSetConfigFromCustomFlags(t *testing.T) {
assert.Equal(t, 100000, driver.DiskSize)
assert.Equal(t, 4096, driver.MemSize)
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())
}