mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-06-30 02:31:10 +00:00
feat(vm): add cpu.limit
attribute (#814)
* feat(vm): add `cpu.limit` attribute Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com> * update docs and examples Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com> --------- Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
This commit is contained in:
parent
3b4a69edfa
commit
9712952e26
@ -182,6 +182,7 @@ output "ubuntu_vm_public_key" {
|
||||
protection for AMD models.
|
||||
- `hotplugged` - (Optional) The number of hotplugged vCPUs (defaults
|
||||
to `0`).
|
||||
- `limit` - (Optional) Limit of CPU usage, `0...128`. (defaults to `0` -- no limit).
|
||||
- `numa` - (Boolean) Enable/disable NUMA. (default to `false`)
|
||||
- `sockets` - (Optional) The number of CPU sockets (defaults to `1`).
|
||||
- `type` - (Optional) The emulated CPU type, it's recommended to
|
||||
|
@ -13,6 +13,7 @@ resource "proxmox_virtual_environment_vm" "example_template" {
|
||||
cpu {
|
||||
cores = 2
|
||||
numa = true
|
||||
limit = 64
|
||||
}
|
||||
|
||||
smbios {
|
||||
|
@ -56,6 +56,7 @@ const (
|
||||
dvResourceVirtualEnvironmentVMCPUArchitecture = "x86_64"
|
||||
dvResourceVirtualEnvironmentVMCPUCores = 1
|
||||
dvResourceVirtualEnvironmentVMCPUHotplugged = 0
|
||||
dvResourceVirtualEnvironmentVMCPULimit = 0
|
||||
dvResourceVirtualEnvironmentVMCPUNUMA = false
|
||||
dvResourceVirtualEnvironmentVMCPUSockets = 1
|
||||
dvResourceVirtualEnvironmentVMCPUType = "qemu64"
|
||||
@ -175,6 +176,7 @@ const (
|
||||
mkResourceVirtualEnvironmentVMCPUCores = "cores"
|
||||
mkResourceVirtualEnvironmentVMCPUFlags = "flags"
|
||||
mkResourceVirtualEnvironmentVMCPUHotplugged = "hotplugged"
|
||||
mkResourceVirtualEnvironmentVMCPULimit = "limit"
|
||||
mkResourceVirtualEnvironmentVMCPUNUMA = "numa"
|
||||
mkResourceVirtualEnvironmentVMCPUSockets = "sockets"
|
||||
mkResourceVirtualEnvironmentVMCPUType = "type"
|
||||
@ -526,8 +528,9 @@ func VM() *schema.Resource {
|
||||
mkResourceVirtualEnvironmentVMCPUArchitecture: dvResourceVirtualEnvironmentVMCPUArchitecture,
|
||||
mkResourceVirtualEnvironmentVMCPUCores: dvResourceVirtualEnvironmentVMCPUCores,
|
||||
mkResourceVirtualEnvironmentVMCPUFlags: []interface{}{},
|
||||
mkResourceVirtualEnvironmentVMCPUNUMA: dvResourceVirtualEnvironmentVMCPUNUMA,
|
||||
mkResourceVirtualEnvironmentVMCPUHotplugged: dvResourceVirtualEnvironmentVMCPUHotplugged,
|
||||
mkResourceVirtualEnvironmentVMCPULimit: dvResourceVirtualEnvironmentVMCPULimit,
|
||||
mkResourceVirtualEnvironmentVMCPUNUMA: dvResourceVirtualEnvironmentVMCPUNUMA,
|
||||
mkResourceVirtualEnvironmentVMCPUSockets: dvResourceVirtualEnvironmentVMCPUSockets,
|
||||
mkResourceVirtualEnvironmentVMCPUType: dvResourceVirtualEnvironmentVMCPUType,
|
||||
mkResourceVirtualEnvironmentVMCPUUnits: dvResourceVirtualEnvironmentVMCPUUnits,
|
||||
@ -566,6 +569,15 @@ func VM() *schema.Resource {
|
||||
Default: dvResourceVirtualEnvironmentVMCPUHotplugged,
|
||||
ValidateDiagFunc: validation.ToDiagFunc(validation.IntBetween(0, 2304)),
|
||||
},
|
||||
mkResourceVirtualEnvironmentVMCPULimit: {
|
||||
Type: schema.TypeInt,
|
||||
Description: "Limit of CPU usage",
|
||||
Optional: true,
|
||||
Default: dvResourceVirtualEnvironmentVMCPULimit,
|
||||
ValidateDiagFunc: validation.ToDiagFunc(
|
||||
validation.IntBetween(0, 128),
|
||||
),
|
||||
},
|
||||
mkResourceVirtualEnvironmentVMCPUNUMA: {
|
||||
Type: schema.TypeBool,
|
||||
Description: "Enable/disable NUMA.",
|
||||
@ -2028,6 +2040,7 @@ func vmCreateClone(ctx context.Context, d *schema.ResourceData, m interface{}) d
|
||||
cpuCores := cpuBlock[mkResourceVirtualEnvironmentVMCPUCores].(int)
|
||||
cpuFlags := cpuBlock[mkResourceVirtualEnvironmentVMCPUFlags].([]interface{})
|
||||
cpuHotplugged := cpuBlock[mkResourceVirtualEnvironmentVMCPUHotplugged].(int)
|
||||
cpuLimit := cpuBlock[mkResourceVirtualEnvironmentVMCPULimit].(int)
|
||||
cpuNUMA := types.CustomBool(cpuBlock[mkResourceVirtualEnvironmentVMCPUNUMA].(bool))
|
||||
cpuSockets := cpuBlock[mkResourceVirtualEnvironmentVMCPUSockets].(int)
|
||||
cpuType := cpuBlock[mkResourceVirtualEnvironmentVMCPUType].(string)
|
||||
@ -2057,6 +2070,10 @@ func vmCreateClone(ctx context.Context, d *schema.ResourceData, m interface{}) d
|
||||
if cpuHotplugged > 0 {
|
||||
updateBody.VirtualCPUCount = &cpuHotplugged
|
||||
}
|
||||
|
||||
if cpuLimit > 0 {
|
||||
updateBody.CPULimit = &cpuLimit
|
||||
}
|
||||
}
|
||||
|
||||
vmConfig, err := vmAPI.GetVM(ctx)
|
||||
@ -2504,6 +2521,7 @@ func vmCreateCustom(ctx context.Context, d *schema.ResourceData, m interface{})
|
||||
cpuCores := cpuBlock[mkResourceVirtualEnvironmentVMCPUCores].(int)
|
||||
cpuFlags := cpuBlock[mkResourceVirtualEnvironmentVMCPUFlags].([]interface{})
|
||||
cpuHotplugged := cpuBlock[mkResourceVirtualEnvironmentVMCPUHotplugged].(int)
|
||||
cpuLimit := cpuBlock[mkResourceVirtualEnvironmentVMCPULimit].(int)
|
||||
cpuSockets := cpuBlock[mkResourceVirtualEnvironmentVMCPUSockets].(int)
|
||||
cpuNUMA := types.CustomBool(cpuBlock[mkResourceVirtualEnvironmentVMCPUNUMA].(bool))
|
||||
cpuType := cpuBlock[mkResourceVirtualEnvironmentVMCPUType].(string)
|
||||
@ -2779,6 +2797,10 @@ func vmCreateCustom(ctx context.Context, d *schema.ResourceData, m interface{})
|
||||
createBody.VirtualCPUCount = &cpuHotplugged
|
||||
}
|
||||
|
||||
if cpuLimit > 0 {
|
||||
createBody.CPULimit = &cpuLimit
|
||||
}
|
||||
|
||||
if description != "" {
|
||||
createBody.Description = &description
|
||||
}
|
||||
@ -4041,6 +4063,13 @@ func vmReadCustom(
|
||||
cpu[mkResourceVirtualEnvironmentVMCPUHotplugged] = 0
|
||||
}
|
||||
|
||||
if vmConfig.CPULimit != nil {
|
||||
cpu[mkResourceVirtualEnvironmentVMCPULimit] = *vmConfig.CPULimit
|
||||
} else {
|
||||
// Default value of "cpulimit" is "0" according to the API documentation.
|
||||
cpu[mkResourceVirtualEnvironmentVMCPULimit] = 0
|
||||
}
|
||||
|
||||
if vmConfig.NUMAEnabled != nil {
|
||||
cpu[mkResourceVirtualEnvironmentVMCPUNUMA] = *vmConfig.NUMAEnabled
|
||||
} else {
|
||||
@ -4094,6 +4123,7 @@ func vmReadCustom(
|
||||
cpu[mkResourceVirtualEnvironmentVMCPUCores] != dvResourceVirtualEnvironmentVMCPUCores ||
|
||||
len(cpu[mkResourceVirtualEnvironmentVMCPUFlags].([]interface{})) > 0 ||
|
||||
cpu[mkResourceVirtualEnvironmentVMCPUHotplugged] != dvResourceVirtualEnvironmentVMCPUHotplugged ||
|
||||
cpu[mkResourceVirtualEnvironmentVMCPULimit] != dvResourceVirtualEnvironmentVMCPULimit ||
|
||||
cpu[mkResourceVirtualEnvironmentVMCPUSockets] != dvResourceVirtualEnvironmentVMCPUSockets ||
|
||||
cpu[mkResourceVirtualEnvironmentVMCPUType] != dvResourceVirtualEnvironmentVMCPUType ||
|
||||
cpu[mkResourceVirtualEnvironmentVMCPUUnits] != dvResourceVirtualEnvironmentVMCPUUnits {
|
||||
@ -5559,6 +5589,7 @@ func vmUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.D
|
||||
cpuCores := cpuBlock[mkResourceVirtualEnvironmentVMCPUCores].(int)
|
||||
cpuFlags := cpuBlock[mkResourceVirtualEnvironmentVMCPUFlags].([]interface{})
|
||||
cpuHotplugged := cpuBlock[mkResourceVirtualEnvironmentVMCPUHotplugged].(int)
|
||||
cpuLimit := cpuBlock[mkResourceVirtualEnvironmentVMCPULimit].(int)
|
||||
cpuNUMA := types.CustomBool(cpuBlock[mkResourceVirtualEnvironmentVMCPUNUMA].(bool))
|
||||
cpuSockets := cpuBlock[mkResourceVirtualEnvironmentVMCPUSockets].(int)
|
||||
cpuType := cpuBlock[mkResourceVirtualEnvironmentVMCPUType].(string)
|
||||
@ -5581,6 +5612,12 @@ func vmUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.D
|
||||
del = append(del, "vcpus")
|
||||
}
|
||||
|
||||
if cpuLimit > 0 {
|
||||
updateBody.CPULimit = &cpuLimit
|
||||
} else {
|
||||
del = append(del, "cpulimit")
|
||||
}
|
||||
|
||||
cpuFlagsConverted := make([]string, len(cpuFlags))
|
||||
|
||||
for fi, flag := range cpuFlags {
|
||||
|
Loading…
Reference in New Issue
Block a user