0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-07-02 03:22:59 +00:00

Additional CPU argument

This commit is contained in:
Dan Petersen 2019-12-31 06:11:13 +01:00
parent a9349cfbd0
commit ea0c17bfca
4 changed files with 37 additions and 6 deletions

View File

@ -2,7 +2,7 @@
ENHANCEMENTS: 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 ## 0.1.0

View File

@ -405,6 +405,7 @@ This resource doesn't expose any additional attributes.
* `pentium3` - Intel Pentium 3 (1999-2001) * `pentium3` - Intel Pentium 3 (1999-2001)
* `phenom` - AMD Phenom (2010) * `phenom` - AMD Phenom (2010)
* `qemu32`/`qemu64` - QEMU Virtual CPU version 2.5+ (32 & 64 bit variants) * `qemu32`/`qemu64` - QEMU Virtual CPU version 2.5+ (32 & 64 bit variants)
* `units` - (Optional) The CPU units (defaults to `1024`)
* `description` - (Optional) The description * `description` - (Optional) The description
* `disk` - (Optional) The disk configuration (multiple blocks supported) * `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`) * `datastore_id` - (Optional) The ID of the datastore to create the disk in (defaults to `local-lvm`)

View File

@ -29,6 +29,7 @@ const (
dvResourceVirtualEnvironmentVMCPUHotplugged = 0 dvResourceVirtualEnvironmentVMCPUHotplugged = 0
dvResourceVirtualEnvironmentVMCPUSockets = 1 dvResourceVirtualEnvironmentVMCPUSockets = 1
dvResourceVirtualEnvironmentVMCPUType = "qemu64" dvResourceVirtualEnvironmentVMCPUType = "qemu64"
dvResourceVirtualEnvironmentVMCPUUnits = 1024
dvResourceVirtualEnvironmentVMDescription = "" dvResourceVirtualEnvironmentVMDescription = ""
dvResourceVirtualEnvironmentVMDiskDatastoreID = "local-lvm" dvResourceVirtualEnvironmentVMDiskDatastoreID = "local-lvm"
dvResourceVirtualEnvironmentVMDiskFileFormat = "qcow2" dvResourceVirtualEnvironmentVMDiskFileFormat = "qcow2"
@ -86,6 +87,7 @@ const (
mkResourceVirtualEnvironmentVMCPUHotplugged = "hotplugged" mkResourceVirtualEnvironmentVMCPUHotplugged = "hotplugged"
mkResourceVirtualEnvironmentVMCPUSockets = "sockets" mkResourceVirtualEnvironmentVMCPUSockets = "sockets"
mkResourceVirtualEnvironmentVMCPUType = "type" mkResourceVirtualEnvironmentVMCPUType = "type"
mkResourceVirtualEnvironmentVMCPUUnits = "units"
mkResourceVirtualEnvironmentVMDescription = "description" mkResourceVirtualEnvironmentVMDescription = "description"
mkResourceVirtualEnvironmentVMDisk = "disk" mkResourceVirtualEnvironmentVMDisk = "disk"
mkResourceVirtualEnvironmentVMDiskDatastoreID = "datastore_id" mkResourceVirtualEnvironmentVMDiskDatastoreID = "datastore_id"
@ -370,6 +372,7 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
defaultMap[mkResourceVirtualEnvironmentVMCPUHotplugged] = dvResourceVirtualEnvironmentVMCPUHotplugged defaultMap[mkResourceVirtualEnvironmentVMCPUHotplugged] = dvResourceVirtualEnvironmentVMCPUHotplugged
defaultMap[mkResourceVirtualEnvironmentVMCPUSockets] = dvResourceVirtualEnvironmentVMCPUSockets defaultMap[mkResourceVirtualEnvironmentVMCPUSockets] = dvResourceVirtualEnvironmentVMCPUSockets
defaultMap[mkResourceVirtualEnvironmentVMCPUType] = dvResourceVirtualEnvironmentVMCPUType defaultMap[mkResourceVirtualEnvironmentVMCPUType] = dvResourceVirtualEnvironmentVMCPUType
defaultMap[mkResourceVirtualEnvironmentVMCPUUnits] = dvResourceVirtualEnvironmentVMCPUUnits
defaultList[0] = defaultMap defaultList[0] = defaultMap
@ -414,6 +417,13 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
Default: dvResourceVirtualEnvironmentVMCPUType, Default: dvResourceVirtualEnvironmentVMCPUType,
ValidateFunc: getCPUTypeValidator(), ValidateFunc: getCPUTypeValidator(),
}, },
mkResourceVirtualEnvironmentVMCPUUnits: {
Type: schema.TypeInt,
Description: "The CPU units",
Optional: true,
Default: dvResourceVirtualEnvironmentVMCPUUnits,
ValidateFunc: validation.IntBetween(2, 262144),
},
}, },
}, },
MaxItems: 1, MaxItems: 1,
@ -811,6 +821,7 @@ func resourceVirtualEnvironmentVMCreate(d *schema.ResourceData, m interface{}) e
cpuHotplugged := cpuBlock[mkResourceVirtualEnvironmentVMCPUHotplugged].(int) cpuHotplugged := cpuBlock[mkResourceVirtualEnvironmentVMCPUHotplugged].(int)
cpuSockets := cpuBlock[mkResourceVirtualEnvironmentVMCPUSockets].(int) cpuSockets := cpuBlock[mkResourceVirtualEnvironmentVMCPUSockets].(int)
cpuType := cpuBlock[mkResourceVirtualEnvironmentVMCPUType].(string) cpuType := cpuBlock[mkResourceVirtualEnvironmentVMCPUType].(string)
cpuUnits := cpuBlock[mkResourceVirtualEnvironmentVMCPUUnits].(int)
description := d.Get(mkResourceVirtualEnvironmentVMDescription).(string) description := d.Get(mkResourceVirtualEnvironmentVMDescription).(string)
diskDeviceObjects, err := resourceVirtualEnvironmentVMGetDiskDeviceObjects(d, m) diskDeviceObjects, err := resourceVirtualEnvironmentVMGetDiskDeviceObjects(d, m)
@ -917,6 +928,7 @@ func resourceVirtualEnvironmentVMCreate(d *schema.ResourceData, m interface{}) e
Type: cpuType, Type: cpuType,
}, },
CPUSockets: &cpuSockets, CPUSockets: &cpuSockets,
CPUUnits: &cpuUnits,
DedicatedMemory: &memoryDedicated, DedicatedMemory: &memoryDedicated,
FloatingMemory: &memoryFloating, FloatingMemory: &memoryFloating,
IDEDevices: ideDevices, IDEDevices: ideDevices,
@ -1609,6 +1621,12 @@ func resourceVirtualEnvironmentVMRead(d *schema.ResourceData, m interface{}) err
cpu[mkResourceVirtualEnvironmentVMCPUType] = "" cpu[mkResourceVirtualEnvironmentVMCPUType] = ""
} }
if vmConfig.CPUUnits != nil {
cpu[mkResourceVirtualEnvironmentVMCPUUnits] = *vmConfig.CPUUnits
} else {
cpu[mkResourceVirtualEnvironmentVMCPUUnits] = 0
}
currentCPU := d.Get(mkResourceVirtualEnvironmentVMCPU).([]interface{}) currentCPU := d.Get(mkResourceVirtualEnvironmentVMCPU).([]interface{})
if len(currentCPU) > 0 || if len(currentCPU) > 0 ||
@ -1616,7 +1634,8 @@ func resourceVirtualEnvironmentVMRead(d *schema.ResourceData, m interface{}) err
len(cpu[mkResourceVirtualEnvironmentVMCPUFlags].([]interface{})) > 0 || len(cpu[mkResourceVirtualEnvironmentVMCPUFlags].([]interface{})) > 0 ||
cpu[mkResourceVirtualEnvironmentVMCPUHotplugged] != dvResourceVirtualEnvironmentVMCPUHotplugged || cpu[mkResourceVirtualEnvironmentVMCPUHotplugged] != dvResourceVirtualEnvironmentVMCPUHotplugged ||
cpu[mkResourceVirtualEnvironmentVMCPUSockets] != dvResourceVirtualEnvironmentVMCPUSockets || cpu[mkResourceVirtualEnvironmentVMCPUSockets] != dvResourceVirtualEnvironmentVMCPUSockets ||
cpu[mkResourceVirtualEnvironmentVMCPUType] != dvResourceVirtualEnvironmentVMCPUType { cpu[mkResourceVirtualEnvironmentVMCPUType] != dvResourceVirtualEnvironmentVMCPUType ||
cpu[mkResourceVirtualEnvironmentVMCPUUnits] != dvResourceVirtualEnvironmentVMCPUUnits {
d.Set(mkResourceVirtualEnvironmentVMCPU, []interface{}{cpu}) d.Set(mkResourceVirtualEnvironmentVMCPU, []interface{}{cpu})
} }
@ -2094,23 +2113,31 @@ func resourceVirtualEnvironmentVMUpdate(d *schema.ResourceData, m interface{}) e
} }
cpuCores := cpuBlock[mkResourceVirtualEnvironmentVMCPUCores].(int) cpuCores := cpuBlock[mkResourceVirtualEnvironmentVMCPUCores].(int)
cpuFlags := cpuBlock[mkResourceVirtualEnvironmentVMCPUFlags].([]interface{})
cpuHotplugged := cpuBlock[mkResourceVirtualEnvironmentVMCPUHotplugged].(int)
cpuSockets := cpuBlock[mkResourceVirtualEnvironmentVMCPUSockets].(int)
cpuType := cpuBlock[mkResourceVirtualEnvironmentVMCPUType].(string)
if cpuCores > 0 { if cpuCores > 0 {
body.CPUCores = &cpuCores body.CPUCores = &cpuCores
} }
cpuFlags := cpuBlock[mkResourceVirtualEnvironmentVMCPUFlags].([]interface{})
cpuHotplugged := cpuBlock[mkResourceVirtualEnvironmentVMCPUHotplugged].(int)
if cpuHotplugged > 0 { if cpuHotplugged > 0 {
body.VirtualCPUCount = &cpuHotplugged body.VirtualCPUCount = &cpuHotplugged
} }
cpuSockets := cpuBlock[mkResourceVirtualEnvironmentVMCPUSockets].(int)
if cpuSockets > 0 { if cpuSockets > 0 {
body.CPUSockets = &cpuSockets body.CPUSockets = &cpuSockets
} }
cpuType := cpuBlock[mkResourceVirtualEnvironmentVMCPUType].(string)
cpuUnits := cpuBlock[mkResourceVirtualEnvironmentVMCPUUnits].(int)
if cpuUnits > 0 {
body.CPUUnits = &cpuUnits
}
cpuFlagsConverted := make([]string, len(cpuFlags)) cpuFlagsConverted := make([]string, len(cpuFlags))
for fi, flag := range cpuFlags { for fi, flag := range cpuFlags {

View File

@ -231,6 +231,7 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
mkResourceVirtualEnvironmentVMCPUHotplugged, mkResourceVirtualEnvironmentVMCPUHotplugged,
mkResourceVirtualEnvironmentVMCPUSockets, mkResourceVirtualEnvironmentVMCPUSockets,
mkResourceVirtualEnvironmentVMCPUType, mkResourceVirtualEnvironmentVMCPUType,
mkResourceVirtualEnvironmentVMCPUUnits,
}) })
testSchemaValueTypes(t, cpuSchema, []string{ testSchemaValueTypes(t, cpuSchema, []string{
@ -239,12 +240,14 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
mkResourceVirtualEnvironmentVMCPUHotplugged, mkResourceVirtualEnvironmentVMCPUHotplugged,
mkResourceVirtualEnvironmentVMCPUSockets, mkResourceVirtualEnvironmentVMCPUSockets,
mkResourceVirtualEnvironmentVMCPUType, mkResourceVirtualEnvironmentVMCPUType,
mkResourceVirtualEnvironmentVMCPUUnits,
}, []schema.ValueType{ }, []schema.ValueType{
schema.TypeInt, schema.TypeInt,
schema.TypeList, schema.TypeList,
schema.TypeInt, schema.TypeInt,
schema.TypeInt, schema.TypeInt,
schema.TypeString, schema.TypeString,
schema.TypeInt,
}) })
diskSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMDisk) diskSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMDisk)