From ea0c17bfcaec81c717ccb38054143119379b44dd Mon Sep 17 00:00:00 2001 From: Dan Petersen Date: Tue, 31 Dec 2019 06:11:13 +0100 Subject: [PATCH] Additional CPU argument --- CHANGELOG.md | 2 +- README.md | 1 + proxmoxtf/resource_virtual_environment_vm.go | 37 ++++++++++++++++--- .../resource_virtual_environment_vm_test.go | 3 ++ 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e0b627fe..12e7f92e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ENHANCEMENTS: -resource/virtual_environment_vm: Add `cpu.flags`, `cpu.type` and `vga` arguments +resource/virtual_environment_vm: Add `cpu.flags`, `cpu.type`, `cpu.units` and `vga` arguments ## 0.1.0 diff --git a/README.md b/README.md index d56ed38b..be1a6839 100644 --- a/README.md +++ b/README.md @@ -405,6 +405,7 @@ This resource doesn't expose any additional attributes. * `pentium3` - Intel Pentium 3 (1999-2001) * `phenom` - AMD Phenom (2010) * `qemu32`/`qemu64` - QEMU Virtual CPU version 2.5+ (32 & 64 bit variants) + * `units` - (Optional) The CPU units (defaults to `1024`) * `description` - (Optional) The description * `disk` - (Optional) The disk configuration (multiple blocks supported) * `datastore_id` - (Optional) The ID of the datastore to create the disk in (defaults to `local-lvm`) diff --git a/proxmoxtf/resource_virtual_environment_vm.go b/proxmoxtf/resource_virtual_environment_vm.go index 7d47f8cf..501a3745 100644 --- a/proxmoxtf/resource_virtual_environment_vm.go +++ b/proxmoxtf/resource_virtual_environment_vm.go @@ -29,6 +29,7 @@ const ( dvResourceVirtualEnvironmentVMCPUHotplugged = 0 dvResourceVirtualEnvironmentVMCPUSockets = 1 dvResourceVirtualEnvironmentVMCPUType = "qemu64" + dvResourceVirtualEnvironmentVMCPUUnits = 1024 dvResourceVirtualEnvironmentVMDescription = "" dvResourceVirtualEnvironmentVMDiskDatastoreID = "local-lvm" dvResourceVirtualEnvironmentVMDiskFileFormat = "qcow2" @@ -86,6 +87,7 @@ const ( mkResourceVirtualEnvironmentVMCPUHotplugged = "hotplugged" mkResourceVirtualEnvironmentVMCPUSockets = "sockets" mkResourceVirtualEnvironmentVMCPUType = "type" + mkResourceVirtualEnvironmentVMCPUUnits = "units" mkResourceVirtualEnvironmentVMDescription = "description" mkResourceVirtualEnvironmentVMDisk = "disk" mkResourceVirtualEnvironmentVMDiskDatastoreID = "datastore_id" @@ -370,6 +372,7 @@ func resourceVirtualEnvironmentVM() *schema.Resource { defaultMap[mkResourceVirtualEnvironmentVMCPUHotplugged] = dvResourceVirtualEnvironmentVMCPUHotplugged defaultMap[mkResourceVirtualEnvironmentVMCPUSockets] = dvResourceVirtualEnvironmentVMCPUSockets defaultMap[mkResourceVirtualEnvironmentVMCPUType] = dvResourceVirtualEnvironmentVMCPUType + defaultMap[mkResourceVirtualEnvironmentVMCPUUnits] = dvResourceVirtualEnvironmentVMCPUUnits defaultList[0] = defaultMap @@ -414,6 +417,13 @@ func resourceVirtualEnvironmentVM() *schema.Resource { Default: dvResourceVirtualEnvironmentVMCPUType, ValidateFunc: getCPUTypeValidator(), }, + mkResourceVirtualEnvironmentVMCPUUnits: { + Type: schema.TypeInt, + Description: "The CPU units", + Optional: true, + Default: dvResourceVirtualEnvironmentVMCPUUnits, + ValidateFunc: validation.IntBetween(2, 262144), + }, }, }, MaxItems: 1, @@ -811,6 +821,7 @@ func resourceVirtualEnvironmentVMCreate(d *schema.ResourceData, m interface{}) e cpuHotplugged := cpuBlock[mkResourceVirtualEnvironmentVMCPUHotplugged].(int) cpuSockets := cpuBlock[mkResourceVirtualEnvironmentVMCPUSockets].(int) cpuType := cpuBlock[mkResourceVirtualEnvironmentVMCPUType].(string) + cpuUnits := cpuBlock[mkResourceVirtualEnvironmentVMCPUUnits].(int) description := d.Get(mkResourceVirtualEnvironmentVMDescription).(string) diskDeviceObjects, err := resourceVirtualEnvironmentVMGetDiskDeviceObjects(d, m) @@ -917,6 +928,7 @@ func resourceVirtualEnvironmentVMCreate(d *schema.ResourceData, m interface{}) e Type: cpuType, }, CPUSockets: &cpuSockets, + CPUUnits: &cpuUnits, DedicatedMemory: &memoryDedicated, FloatingMemory: &memoryFloating, IDEDevices: ideDevices, @@ -1609,6 +1621,12 @@ func resourceVirtualEnvironmentVMRead(d *schema.ResourceData, m interface{}) err cpu[mkResourceVirtualEnvironmentVMCPUType] = "" } + if vmConfig.CPUUnits != nil { + cpu[mkResourceVirtualEnvironmentVMCPUUnits] = *vmConfig.CPUUnits + } else { + cpu[mkResourceVirtualEnvironmentVMCPUUnits] = 0 + } + currentCPU := d.Get(mkResourceVirtualEnvironmentVMCPU).([]interface{}) if len(currentCPU) > 0 || @@ -1616,7 +1634,8 @@ func resourceVirtualEnvironmentVMRead(d *schema.ResourceData, m interface{}) err len(cpu[mkResourceVirtualEnvironmentVMCPUFlags].([]interface{})) > 0 || cpu[mkResourceVirtualEnvironmentVMCPUHotplugged] != dvResourceVirtualEnvironmentVMCPUHotplugged || cpu[mkResourceVirtualEnvironmentVMCPUSockets] != dvResourceVirtualEnvironmentVMCPUSockets || - cpu[mkResourceVirtualEnvironmentVMCPUType] != dvResourceVirtualEnvironmentVMCPUType { + cpu[mkResourceVirtualEnvironmentVMCPUType] != dvResourceVirtualEnvironmentVMCPUType || + cpu[mkResourceVirtualEnvironmentVMCPUUnits] != dvResourceVirtualEnvironmentVMCPUUnits { d.Set(mkResourceVirtualEnvironmentVMCPU, []interface{}{cpu}) } @@ -2094,23 +2113,31 @@ func resourceVirtualEnvironmentVMUpdate(d *schema.ResourceData, m interface{}) e } cpuCores := cpuBlock[mkResourceVirtualEnvironmentVMCPUCores].(int) - cpuFlags := cpuBlock[mkResourceVirtualEnvironmentVMCPUFlags].([]interface{}) - cpuHotplugged := cpuBlock[mkResourceVirtualEnvironmentVMCPUHotplugged].(int) - cpuSockets := cpuBlock[mkResourceVirtualEnvironmentVMCPUSockets].(int) - cpuType := cpuBlock[mkResourceVirtualEnvironmentVMCPUType].(string) if cpuCores > 0 { body.CPUCores = &cpuCores } + cpuFlags := cpuBlock[mkResourceVirtualEnvironmentVMCPUFlags].([]interface{}) + cpuHotplugged := cpuBlock[mkResourceVirtualEnvironmentVMCPUHotplugged].(int) + if cpuHotplugged > 0 { body.VirtualCPUCount = &cpuHotplugged } + cpuSockets := cpuBlock[mkResourceVirtualEnvironmentVMCPUSockets].(int) + if cpuSockets > 0 { body.CPUSockets = &cpuSockets } + cpuType := cpuBlock[mkResourceVirtualEnvironmentVMCPUType].(string) + cpuUnits := cpuBlock[mkResourceVirtualEnvironmentVMCPUUnits].(int) + + if cpuUnits > 0 { + body.CPUUnits = &cpuUnits + } + cpuFlagsConverted := make([]string, len(cpuFlags)) for fi, flag := range cpuFlags { diff --git a/proxmoxtf/resource_virtual_environment_vm_test.go b/proxmoxtf/resource_virtual_environment_vm_test.go index a360d120..4288a597 100644 --- a/proxmoxtf/resource_virtual_environment_vm_test.go +++ b/proxmoxtf/resource_virtual_environment_vm_test.go @@ -231,6 +231,7 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) { mkResourceVirtualEnvironmentVMCPUHotplugged, mkResourceVirtualEnvironmentVMCPUSockets, mkResourceVirtualEnvironmentVMCPUType, + mkResourceVirtualEnvironmentVMCPUUnits, }) testSchemaValueTypes(t, cpuSchema, []string{ @@ -239,12 +240,14 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) { mkResourceVirtualEnvironmentVMCPUHotplugged, mkResourceVirtualEnvironmentVMCPUSockets, mkResourceVirtualEnvironmentVMCPUType, + mkResourceVirtualEnvironmentVMCPUUnits, }, []schema.ValueType{ schema.TypeInt, schema.TypeList, schema.TypeInt, schema.TypeInt, schema.TypeString, + schema.TypeInt, }) diskSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMDisk)