mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-02 03:22:59 +00:00
Add support for "discard" disk option for VM (#128)
This commit is contained in:
parent
769dea4c48
commit
42e0e725a5
@ -9,12 +9,14 @@ 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"))
|
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
|
file_id = proxmox_virtual_environment_file.ubuntu_cloud_image.id
|
||||||
interface = "scsi0"
|
interface = "scsi0"
|
||||||
|
discard = "on"
|
||||||
iothread = true
|
iothread = true
|
||||||
}
|
}
|
||||||
|
|
||||||
# disk {
|
# disk {
|
||||||
# datastore_id = "nfs"
|
# datastore_id = "nfs"
|
||||||
# interface = "scsi1"
|
# interface = "scsi1"
|
||||||
|
# discard = "ignore"
|
||||||
# iothread = true
|
# iothread = true
|
||||||
# }
|
# }
|
||||||
|
|
||||||
|
@ -156,14 +156,15 @@ type CustomStorageDevice struct {
|
|||||||
BackupEnabled *CustomBool `json:"backup,omitempty" url:"backup,omitempty,int"`
|
BackupEnabled *CustomBool `json:"backup,omitempty" url:"backup,omitempty,int"`
|
||||||
BurstableReadSpeedMbps *int `json:"mbps_rd_max,omitempty" url:"mbps_rd_max,omitempty"`
|
BurstableReadSpeedMbps *int `json:"mbps_rd_max,omitempty" url:"mbps_rd_max,omitempty"`
|
||||||
BurstableWriteSpeedMbps *int `json:"mbps_wr_max,omitempty" url:"mbps_wr_max,omitempty"`
|
BurstableWriteSpeedMbps *int `json:"mbps_wr_max,omitempty" url:"mbps_wr_max,omitempty"`
|
||||||
|
Discard *string `json:"discard,omitempty" url:"discard,omitempty"`
|
||||||
Enabled bool `json:"-" url:"-"`
|
Enabled bool `json:"-" url:"-"`
|
||||||
FileVolume string `json:"file" url:"file"`
|
FileVolume string `json:"file" url:"file"`
|
||||||
|
Format *string `json:"format,omitempty" url:"format,omitempty"`
|
||||||
|
IOThread *CustomBool `json:"iothread,omitempty" url:"iothread,omitempty,int"`
|
||||||
MaxReadSpeedMbps *int `json:"mbps_rd,omitempty" url:"mbps_rd,omitempty"`
|
MaxReadSpeedMbps *int `json:"mbps_rd,omitempty" url:"mbps_rd,omitempty"`
|
||||||
MaxWriteSpeedMbps *int `json:"mbps_wr,omitempty" url:"mbps_wr,omitempty"`
|
MaxWriteSpeedMbps *int `json:"mbps_wr,omitempty" url:"mbps_wr,omitempty"`
|
||||||
Media *string `json:"media,omitempty" url:"media,omitempty"`
|
Media *string `json:"media,omitempty" url:"media,omitempty"`
|
||||||
Size *string `json:"size,omitempty" url:"size,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
|
Interface *string
|
||||||
ID *string
|
ID *string
|
||||||
FileID *string
|
FileID *string
|
||||||
@ -1068,6 +1069,10 @@ func (r CustomStorageDevice) EncodeValues(key string, v *url.Values) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if r.Discard != nil && *r.Discard != "" {
|
||||||
|
values = append(values, fmt.Sprintf("discard=%s", *r.Discard))
|
||||||
|
}
|
||||||
|
|
||||||
v.Add(key, strings.Join(values, ","))
|
v.Add(key, strings.Join(values, ","))
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -1600,6 +1605,8 @@ func (r *CustomStorageDevice) UnmarshalJSON(b []byte) error {
|
|||||||
case "iothread":
|
case "iothread":
|
||||||
bv := CustomBool(v[1] == "1")
|
bv := CustomBool(v[1] == "1")
|
||||||
r.IOThread = &bv
|
r.IOThread = &bv
|
||||||
|
case "discard":
|
||||||
|
r.Discard = &v[1]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,6 +51,7 @@ const (
|
|||||||
dvResourceVirtualEnvironmentVMDiskFileID = ""
|
dvResourceVirtualEnvironmentVMDiskFileID = ""
|
||||||
dvResourceVirtualEnvironmentVMDiskSize = 8
|
dvResourceVirtualEnvironmentVMDiskSize = 8
|
||||||
dvResourceVirtualEnvironmentVMDiskIOThread = false
|
dvResourceVirtualEnvironmentVMDiskIOThread = false
|
||||||
|
dvResourceVirtualEnvironmentVMDiskDiscard = ""
|
||||||
dvResourceVirtualEnvironmentVMDiskSpeedRead = 0
|
dvResourceVirtualEnvironmentVMDiskSpeedRead = 0
|
||||||
dvResourceVirtualEnvironmentVMDiskSpeedReadBurstable = 0
|
dvResourceVirtualEnvironmentVMDiskSpeedReadBurstable = 0
|
||||||
dvResourceVirtualEnvironmentVMDiskSpeedWrite = 0
|
dvResourceVirtualEnvironmentVMDiskSpeedWrite = 0
|
||||||
@ -135,6 +136,7 @@ const (
|
|||||||
mkResourceVirtualEnvironmentVMDiskFileID = "file_id"
|
mkResourceVirtualEnvironmentVMDiskFileID = "file_id"
|
||||||
mkResourceVirtualEnvironmentVMDiskSize = "size"
|
mkResourceVirtualEnvironmentVMDiskSize = "size"
|
||||||
mkResourceVirtualEnvironmentVMDiskIOThread = "iothread"
|
mkResourceVirtualEnvironmentVMDiskIOThread = "iothread"
|
||||||
|
mkResourceVirtualEnvironmentVMDiskDiscard = "discard"
|
||||||
mkResourceVirtualEnvironmentVMDiskSpeed = "speed"
|
mkResourceVirtualEnvironmentVMDiskSpeed = "speed"
|
||||||
mkResourceVirtualEnvironmentVMDiskSpeedRead = "read"
|
mkResourceVirtualEnvironmentVMDiskSpeedRead = "read"
|
||||||
mkResourceVirtualEnvironmentVMDiskSpeedReadBurstable = "read_burstable"
|
mkResourceVirtualEnvironmentVMDiskSpeedReadBurstable = "read_burstable"
|
||||||
@ -482,6 +484,7 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
|
|||||||
mkResourceVirtualEnvironmentVMDiskInterface: dvResourceVirtualEnvironmentVMDiskInterface,
|
mkResourceVirtualEnvironmentVMDiskInterface: dvResourceVirtualEnvironmentVMDiskInterface,
|
||||||
mkResourceVirtualEnvironmentVMDiskSize: dvResourceVirtualEnvironmentVMDiskSize,
|
mkResourceVirtualEnvironmentVMDiskSize: dvResourceVirtualEnvironmentVMDiskSize,
|
||||||
mkResourceVirtualEnvironmentVMDiskIOThread: dvResourceVirtualEnvironmentVMDiskIOThread,
|
mkResourceVirtualEnvironmentVMDiskIOThread: dvResourceVirtualEnvironmentVMDiskIOThread,
|
||||||
|
mkResourceVirtualEnvironmentVMDiskDiscard: dvResourceVirtualEnvironmentVMDiskDiscard,
|
||||||
},
|
},
|
||||||
}, nil
|
}, nil
|
||||||
},
|
},
|
||||||
@ -527,6 +530,12 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
|
|||||||
Optional: true,
|
Optional: true,
|
||||||
Default: dvResourceVirtualEnvironmentVMDiskIOThread,
|
Default: dvResourceVirtualEnvironmentVMDiskIOThread,
|
||||||
},
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMDiskDiscard: {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Description: "Whether to pass discard/trim requests to the underlying storage.",
|
||||||
|
Optional: true,
|
||||||
|
Default: dvResourceVirtualEnvironmentVMDiskDiscard,
|
||||||
|
},
|
||||||
mkResourceVirtualEnvironmentVMDiskSpeed: {
|
mkResourceVirtualEnvironmentVMDiskSpeed: {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Description: "The speed limits",
|
Description: "The speed limits",
|
||||||
@ -1805,6 +1814,7 @@ func resourceVirtualEnvironmentVMCreateCustomDisks(ctx context.Context, d *schem
|
|||||||
speed := block[mkResourceVirtualEnvironmentVMDiskSpeed].([]interface{})
|
speed := block[mkResourceVirtualEnvironmentVMDiskSpeed].([]interface{})
|
||||||
diskInterface, _ := block[mkResourceVirtualEnvironmentVMDiskInterface].(string)
|
diskInterface, _ := block[mkResourceVirtualEnvironmentVMDiskInterface].(string)
|
||||||
ioThread := proxmox.CustomBool(block[mkResourceVirtualEnvironmentVMDiskIOThread].(bool))
|
ioThread := proxmox.CustomBool(block[mkResourceVirtualEnvironmentVMDiskIOThread].(bool))
|
||||||
|
discard, _ := block[mkResourceVirtualEnvironmentVMDiskDiscard].(string)
|
||||||
|
|
||||||
if len(speed) == 0 {
|
if len(speed) == 0 {
|
||||||
diskSpeedDefault, err := diskSpeedResource.DefaultValue()
|
diskSpeedDefault, err := diskSpeedResource.DefaultValue()
|
||||||
@ -1826,6 +1836,10 @@ func resourceVirtualEnvironmentVMCreateCustomDisks(ctx context.Context, d *schem
|
|||||||
diskOptions += ",iothread=1"
|
diskOptions += ",iothread=1"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if discard != "" {
|
||||||
|
diskOptions += fmt.Sprintf(",discard=%s", discard)
|
||||||
|
}
|
||||||
|
|
||||||
if speedLimitRead > 0 {
|
if speedLimitRead > 0 {
|
||||||
diskOptions += fmt.Sprintf(",mbps_rd=%d", speedLimitRead)
|
diskOptions += fmt.Sprintf(",mbps_rd=%d", speedLimitRead)
|
||||||
}
|
}
|
||||||
@ -2110,6 +2124,7 @@ func resourceVirtualEnvironmentVMGetDiskDeviceObjects(d *schema.ResourceData, di
|
|||||||
size, _ := block[mkResourceVirtualEnvironmentVMDiskSize].(int)
|
size, _ := block[mkResourceVirtualEnvironmentVMDiskSize].(int)
|
||||||
diskInterface, _ := block[mkResourceVirtualEnvironmentVMDiskInterface].(string)
|
diskInterface, _ := block[mkResourceVirtualEnvironmentVMDiskInterface].(string)
|
||||||
ioThread := proxmox.CustomBool(block[mkResourceVirtualEnvironmentVMDiskIOThread].(bool))
|
ioThread := proxmox.CustomBool(block[mkResourceVirtualEnvironmentVMDiskIOThread].(bool))
|
||||||
|
discard := block[mkResourceVirtualEnvironmentVMDiskDiscard].(string)
|
||||||
|
|
||||||
speedBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMDisk, mkResourceVirtualEnvironmentVMDiskSpeed}, 0, false)
|
speedBlock, err := getSchemaBlock(resource, d, []string{mkResourceVirtualEnvironmentVMDisk, mkResourceVirtualEnvironmentVMDiskSpeed}, 0, false)
|
||||||
|
|
||||||
@ -2130,6 +2145,7 @@ func resourceVirtualEnvironmentVMGetDiskDeviceObjects(d *schema.ResourceData, di
|
|||||||
diskDevice.Size = &sizeString
|
diskDevice.Size = &sizeString
|
||||||
diskDevice.SizeInt = &size
|
diskDevice.SizeInt = &size
|
||||||
diskDevice.IOThread = &ioThread
|
diskDevice.IOThread = &ioThread
|
||||||
|
diskDevice.Discard = &discard
|
||||||
|
|
||||||
if len(speedBlock) > 0 {
|
if len(speedBlock) > 0 {
|
||||||
speedLimitRead := speedBlock[mkResourceVirtualEnvironmentVMDiskSpeedRead].(int)
|
speedLimitRead := speedBlock[mkResourceVirtualEnvironmentVMDiskSpeedRead].(int)
|
||||||
@ -2637,6 +2653,12 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou
|
|||||||
disk[mkResourceVirtualEnvironmentVMDiskIOThread] = false
|
disk[mkResourceVirtualEnvironmentVMDiskIOThread] = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if dd.Discard != nil {
|
||||||
|
disk[mkResourceVirtualEnvironmentVMDiskDiscard] = *dd.Discard
|
||||||
|
} else {
|
||||||
|
disk[mkResourceVirtualEnvironmentVMDiskDiscard] = ""
|
||||||
|
}
|
||||||
|
|
||||||
diskMap[di] = disk
|
diskMap[di] = disk
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user