mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-01 02:52:58 +00:00
Add support for "iothread" disk option for VM (#97)
This commit is contained in:
parent
7799010cbb
commit
e9d2d607c1
@ -9,8 +9,15 @@ resource "proxmox_virtual_environment_vm" "example_template" {
|
||||
datastore_id = element(data.proxmox_virtual_environment_datastores.example.datastore_ids, index(data.proxmox_virtual_environment_datastores.example.datastore_ids, "local-lvm"))
|
||||
file_id = proxmox_virtual_environment_file.ubuntu_cloud_image.id
|
||||
interface = "scsi0"
|
||||
iothread = true
|
||||
}
|
||||
|
||||
# disk {
|
||||
# datastore_id = "nfs"
|
||||
# interface = "scsi1"
|
||||
# iothread = true
|
||||
# }
|
||||
|
||||
initialization {
|
||||
datastore_id = element(data.proxmox_virtual_environment_datastores.example.datastore_ids, index(data.proxmox_virtual_environment_datastores.example.datastore_ids, "local-lvm"))
|
||||
|
||||
|
@ -163,6 +163,7 @@ type CustomStorageDevice struct {
|
||||
Media *string `json:"media,omitempty" url:"media,omitempty"`
|
||||
Size *string `json:"size,omitempty" url:"size,omitempty"`
|
||||
Format *string `json:"format,omitempty" url:"format,omitempty"`
|
||||
IOThread *CustomBool `json:"iothread,omitempty" url:"iothread,omitempty,int"`
|
||||
Interface *string
|
||||
ID *string
|
||||
FileID *string
|
||||
@ -1059,6 +1060,14 @@ func (r CustomStorageDevice) EncodeValues(key string, v *url.Values) error {
|
||||
values = append(values, fmt.Sprintf("size=%s", *r.Size))
|
||||
}
|
||||
|
||||
if r.IOThread != nil {
|
||||
if *r.IOThread {
|
||||
values = append(values, "iothread=1")
|
||||
} else {
|
||||
values = append(values, "iothread=0")
|
||||
}
|
||||
}
|
||||
|
||||
v.Add(key, strings.Join(values, ","))
|
||||
|
||||
return nil
|
||||
@ -1588,6 +1597,9 @@ func (r *CustomStorageDevice) UnmarshalJSON(b []byte) error {
|
||||
r.Size = &v[1]
|
||||
case "format":
|
||||
r.Format = &v[1]
|
||||
case "iothread":
|
||||
bv := CustomBool(v[1] == "1")
|
||||
r.IOThread = &bv
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -49,6 +49,7 @@ const (
|
||||
dvResourceVirtualEnvironmentVMDiskFileFormat = "qcow2"
|
||||
dvResourceVirtualEnvironmentVMDiskFileID = ""
|
||||
dvResourceVirtualEnvironmentVMDiskSize = 8
|
||||
dvResourceVirtualEnvironmentVMDiskIOThread = false
|
||||
dvResourceVirtualEnvironmentVMDiskSpeedRead = 0
|
||||
dvResourceVirtualEnvironmentVMDiskSpeedReadBurstable = 0
|
||||
dvResourceVirtualEnvironmentVMDiskSpeedWrite = 0
|
||||
@ -132,6 +133,7 @@ const (
|
||||
mkResourceVirtualEnvironmentVMDiskFileFormat = "file_format"
|
||||
mkResourceVirtualEnvironmentVMDiskFileID = "file_id"
|
||||
mkResourceVirtualEnvironmentVMDiskSize = "size"
|
||||
mkResourceVirtualEnvironmentVMDiskIOThread = "iothread"
|
||||
mkResourceVirtualEnvironmentVMDiskSpeed = "speed"
|
||||
mkResourceVirtualEnvironmentVMDiskSpeedRead = "read"
|
||||
mkResourceVirtualEnvironmentVMDiskSpeedReadBurstable = "read_burstable"
|
||||
@ -478,6 +480,7 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
|
||||
mkResourceVirtualEnvironmentVMDiskFileID: dvResourceVirtualEnvironmentVMDiskFileID,
|
||||
mkResourceVirtualEnvironmentVMDiskInterface: dvResourceVirtualEnvironmentVMDiskInterface,
|
||||
mkResourceVirtualEnvironmentVMDiskSize: dvResourceVirtualEnvironmentVMDiskSize,
|
||||
mkResourceVirtualEnvironmentVMDiskIOThread: dvResourceVirtualEnvironmentVMDiskIOThread,
|
||||
},
|
||||
}, nil
|
||||
},
|
||||
@ -517,6 +520,12 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
|
||||
Default: dvResourceVirtualEnvironmentVMDiskSize,
|
||||
ValidateDiagFunc: validation.ToDiagFunc(validation.IntAtLeast(1)),
|
||||
},
|
||||
mkResourceVirtualEnvironmentVMDiskIOThread: {
|
||||
Type: schema.TypeBool,
|
||||
Description: "Whether to use iothreads for this disk drive",
|
||||
Optional: true,
|
||||
Default: dvResourceVirtualEnvironmentVMDiskIOThread,
|
||||
},
|
||||
mkResourceVirtualEnvironmentVMDiskSpeed: {
|
||||
Type: schema.TypeList,
|
||||
Description: "The speed limits",
|
||||
@ -1783,6 +1792,7 @@ func resourceVirtualEnvironmentVMCreateCustomDisks(ctx context.Context, d *schem
|
||||
size, _ := block[mkResourceVirtualEnvironmentVMDiskSize].(int)
|
||||
speed := block[mkResourceVirtualEnvironmentVMDiskSpeed].([]interface{})
|
||||
diskInterface, _ := block[mkResourceVirtualEnvironmentVMDiskInterface].(string)
|
||||
ioThread := proxmox.CustomBool(block[mkResourceVirtualEnvironmentVMDiskIOThread].(bool))
|
||||
|
||||
if len(speed) == 0 {
|
||||
diskSpeedDefault, err := diskSpeedResource.DefaultValue()
|
||||
@ -1800,6 +1810,10 @@ func resourceVirtualEnvironmentVMCreateCustomDisks(ctx context.Context, d *schem
|
||||
|
||||
diskOptions := ""
|
||||
|
||||
if ioThread {
|
||||
diskOptions += ",iothread=1"
|
||||
}
|
||||
|
||||
if speedLimitRead > 0 {
|
||||
diskOptions += fmt.Sprintf(",mbps_rd=%d", speedLimitRead)
|
||||
}
|
||||
@ -2083,6 +2097,7 @@ func resourceVirtualEnvironmentVMGetDiskDeviceObjects(d *schema.ResourceData, di
|
||||
fileID, _ := block[mkResourceVirtualEnvironmentVMDiskFileID].(string)
|
||||
size, _ := block[mkResourceVirtualEnvironmentVMDiskSize].(int)
|
||||
diskInterface, _ := block[mkResourceVirtualEnvironmentVMDiskInterface].(string)
|
||||
ioThread := proxmox.CustomBool(block[mkResourceVirtualEnvironmentVMDiskIOThread].(bool))
|
||||
|
||||
speedBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMDisk, mkResourceVirtualEnvironmentVMDiskSpeed}, 0, false)
|
||||
|
||||
@ -2102,6 +2117,7 @@ func resourceVirtualEnvironmentVMGetDiskDeviceObjects(d *schema.ResourceData, di
|
||||
sizeString := fmt.Sprintf("%dG", size)
|
||||
diskDevice.Size = &sizeString
|
||||
diskDevice.SizeInt = &size
|
||||
diskDevice.IOThread = &ioThread
|
||||
|
||||
if len(speedBlock) > 0 {
|
||||
speedLimitRead := speedBlock[mkResourceVirtualEnvironmentVMDiskSpeedRead].(int)
|
||||
|
Loading…
Reference in New Issue
Block a user