Merge pull request #7191 from arizvisa/GH-7190

Adds support to the vmware builders for specifying the number of cores per socket via the `cores` option.
This commit is contained in:
Megan Marsh 2019-01-31 15:27:52 -08:00 committed by GitHub
commit 6ea64bc378
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 22 additions and 1 deletions

View File

@ -14,6 +14,7 @@ type HWConfig struct {
// cpu information // cpu information
CpuCount int `mapstructure:"cpus"` CpuCount int `mapstructure:"cpus"`
MemorySize int `mapstructure:"memory"` MemorySize int `mapstructure:"memory"`
CoreCount int `mapstructure:"cores"`
// network type and adapter // network type and adapter
Network string `mapstructure:"network"` Network string `mapstructure:"network"`
@ -40,6 +41,11 @@ func (c *HWConfig) Prepare(ctx *interpolate.Context) []error {
errs = append(errs, fmt.Errorf("An invalid amount of memory was specified (memory < 0): %d", c.MemorySize)) errs = append(errs, fmt.Errorf("An invalid amount of memory was specified (memory < 0): %d", c.MemorySize))
} }
// Hardware and cpu options
if c.CoreCount < 0 {
errs = append(errs, fmt.Errorf("An invalid number of cores was specified (cores < 0): %d", c.CoreCount))
}
// Peripherals // Peripherals
if !c.Sound { if !c.Sound {
c.Sound = false c.Sound = false

View File

@ -8,6 +8,7 @@ import (
func testHWConfig() *HWConfig { func testHWConfig() *HWConfig {
return &HWConfig{ return &HWConfig{
CpuCount: 1, CpuCount: 1,
CoreCount: 1,
MemorySize: 512, MemorySize: 512,
Sound: true, Sound: true,
@ -26,6 +27,10 @@ func TestHWConfigPrepare(t *testing.T) {
t.Errorf("bad cpu count: %d", c.CpuCount) t.Errorf("bad cpu count: %d", c.CpuCount)
} }
if c.CoreCount < 0 {
t.Errorf("bad core count: %d", c.CoreCount)
}
if c.MemorySize < 0 { if c.MemorySize < 0 {
t.Errorf("bad memory size: %d", c.MemorySize) t.Errorf("bad memory size: %d", c.MemorySize)
} }

View File

@ -423,12 +423,19 @@ func (s *stepCreateVMX) Run(_ context.Context, state multistep.StateBag) multist
s.tempDir = vmxDir s.tempDir = vmxDir
} }
/// Now to handle options that will modify the template /// Now to handle options that will modify the template without using "vmxTemplateData"
vmxData := vmwcommon.ParseVMX(vmxContents) vmxData := vmwcommon.ParseVMX(vmxContents)
// If no cpus were specified, then remove the entry to use the default
if vmxData["numvcpus"] == "" { if vmxData["numvcpus"] == "" {
delete(vmxData, "numvcpus") delete(vmxData, "numvcpus")
} }
// If some number of cores were specified, then update "cpuid.coresPerSocket" with the requested value
if config.HWConfig.CoreCount > 0 {
vmxData["cpuid.corespersocket"] = strconv.Itoa(config.HWConfig.CoreCount)
}
/// Write the vmxData to the vmxPath /// Write the vmxData to the vmxPath
vmxPath := filepath.Join(vmxDir, config.VMName+".vmx") vmxPath := filepath.Join(vmxDir, config.VMName+".vmx")
if err := vmwcommon.WriteVMX(vmxPath, vmxData); err != nil { if err := vmwcommon.WriteVMX(vmxPath, vmxData); err != nil {

View File

@ -100,6 +100,9 @@ builder.
- `cpus` (number) - The number of cpus to use when building the VM. - `cpus` (number) - The number of cpus to use when building the VM.
- `cores` (number) - The number of cores per socket to use when building the VM.
This corresponds to the `cpuid.coresPerSocket` option in the .vmx file.
- `cdrom_adapter_type` (string) - The adapter type (or bus) that will be used - `cdrom_adapter_type` (string) - The adapter type (or bus) that will be used
by the cdrom device. This is chosen by default based on the disk adapter by the cdrom device. This is chosen by default based on the disk adapter
type. VMware tends to lean towards `ide` for the cdrom device unless type. VMware tends to lean towards `ide` for the cdrom device unless