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:
commit
6ea64bc378
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue