0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-07-05 21:43:59 +00:00

fix(vm): remove qcow2 as the default for disk.file_format (#1862)

No more need to explicitly set `file_format = "raw"` when defining new disks!

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
This commit is contained in:
Pavel Boldyrev 2025-03-29 11:42:07 -04:00 committed by GitHub
parent 03f2079902
commit af46a9c71a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 12 additions and 49 deletions

View File

@ -36,7 +36,6 @@ resource "proxmox_virtual_environment_vm" "ubuntu_template" {
efi_disk { efi_disk {
datastore_id = "local" datastore_id = "local"
file_format = "raw"
type = "4m" type = "4m"
} }

View File

@ -273,11 +273,11 @@ output "ubuntu_vm_public_key" {
- `discard` - (Optional) Whether to pass discard/trim requests to the - `discard` - (Optional) Whether to pass discard/trim requests to the
underlying storage. Supported values are `on`/`ignore` (defaults underlying storage. Supported values are `on`/`ignore` (defaults
to `ignore`). to `ignore`).
- `file_format` - (Optional) The file format (defaults to `qcow2`). - `file_format` - (Optional) The file format.
- `qcow2` - QEMU Disk Image v2. - `qcow2` - QEMU Disk Image v2.
- `raw` - Raw Disk Image. - `raw` - Raw Disk Image.
- `vmdk` - VMware Disk Image. - `vmdk` - VMware Disk Image.
- `file_id` - (Optional) The file ID for a disk image. The ID format is - `file_id` - (Optional) The file ID for a disk image when importing a disk into VM. The ID format is
`<datastore_id>:<content_type>/<file_name>`, for example `local:iso/centos8.img`. Can be also taken from `<datastore_id>:<content_type>/<file_name>`, for example `local:iso/centos8.img`. Can be also taken from
`proxmox_virtual_environment_download_file` resource. `proxmox_virtual_environment_download_file` resource.
- `interface` - (Required) The disk interface for Proxmox, currently `scsi`, - `interface` - (Required) The disk interface for Proxmox, currently `scsi`,
@ -685,14 +685,12 @@ resource "proxmox_virtual_environment_vm" "data_vm" {
disk { disk {
datastore_id = "local-zfs" datastore_id = "local-zfs"
file_format = "raw"
interface = "scsi0" interface = "scsi0"
size = 1 size = 1
} }
disk { disk {
datastore_id = "local-zfs" datastore_id = "local-zfs"
file_format = "raw"
interface = "scsi1" interface = "scsi1"
size = 4 size = 4
} }
@ -702,7 +700,6 @@ resource "proxmox_virtual_environment_vm" "data_user_vm" {
# boot disk # boot disk
disk { disk {
datastore_id = "local-zfs" datastore_id = "local-zfs"
file_format = "raw"
interface = "scsi0" interface = "scsi0"
size = 8 size = 8
} }

View File

@ -31,7 +31,6 @@ resource "proxmox_virtual_environment_vm" "example_template" {
efi_disk { efi_disk {
datastore_id = local.datastore_id datastore_id = local.datastore_id
file_format = "raw"
type = "4m" type = "4m"
} }
@ -42,7 +41,6 @@ resource "proxmox_virtual_environment_vm" "example_template" {
disk { disk {
datastore_id = local.datastore_id datastore_id = local.datastore_id
file_format = "raw"
interface = "ide0" interface = "ide0"
size = 8 size = 8
} }
@ -61,7 +59,6 @@ resource "proxmox_virtual_environment_vm" "example_template" {
# datastore_id = "nfs" # datastore_id = "nfs"
# interface = "scsi1" # interface = "scsi1"
# discard = "ignore" # discard = "ignore"
# file_format = "raw"
# } # }
initialization { initialization {
@ -166,7 +163,6 @@ resource "proxmox_virtual_environment_vm" "example" {
efi_disk { efi_disk {
datastore_id = local.datastore_id datastore_id = local.datastore_id
file_format = "raw"
type = "4m" type = "4m"
} }
@ -234,13 +230,11 @@ resource "proxmox_virtual_environment_vm" "data_vm" {
disk { disk {
datastore_id = local.datastore_id datastore_id = local.datastore_id
file_format = "raw"
interface = "scsi0" interface = "scsi0"
size = 1 size = 1
} }
disk { disk {
datastore_id = local.datastore_id datastore_id = local.datastore_id
file_format = "raw"
interface = "scsi1" interface = "scsi1"
size = 4 size = 4
} }

View File

@ -19,7 +19,6 @@ resource "proxmox_virtual_environment_vm" "ubuntu_template" {
efi_disk { efi_disk {
datastore_id = "local" datastore_id = "local"
file_format = "raw"
type = "4m" type = "4m"
} }

View File

@ -34,8 +34,6 @@ func TestAccResourceVMDisks(t *testing.T) {
name = "test-disk" name = "test-disk"
disk { disk {
// note: default qcow2 is not supported by lvm (?)
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "virtio0" interface = "virtio0"
size = 8 size = 8
@ -67,8 +65,6 @@ func TestAccResourceVMDisks(t *testing.T) {
name = "test-disk" name = "test-disk"
disk { disk {
// note: default qcow2 is not supported by lvm (?)
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "virtio0" interface = "virtio0"
serial = "-dead_beef-" serial = "-dead_beef-"
@ -155,7 +151,6 @@ func TestAccResourceVMDisks(t *testing.T) {
template = "true" template = "true"
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "virtio0" interface = "virtio0"
size = 8 size = 8
@ -190,13 +185,11 @@ func TestAccResourceVMDisks(t *testing.T) {
template = "true" template = "true"
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "virtio0" interface = "virtio0"
size = 8 size = 8
} }
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "scsi0" interface = "scsi0"
size = 8 size = 8
@ -222,7 +215,6 @@ func TestAccResourceVMDisks(t *testing.T) {
name = "test-disk" name = "test-disk"
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "scsi0" interface = "scsi0"
size = 8 size = 8
@ -241,14 +233,12 @@ func TestAccResourceVMDisks(t *testing.T) {
name = "test-disk" name = "test-disk"
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "scsi0" interface = "scsi0"
size = 8 size = 8
} }
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "scsi1" interface = "scsi1"
size = 8 size = 8
@ -279,14 +269,12 @@ func TestAccResourceVMDisks(t *testing.T) {
name = "test-disk" name = "test-disk"
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "scsi0" interface = "scsi0"
size = 8 size = 8
} }
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "scsi1" interface = "scsi1"
size = 8 size = 8
@ -307,7 +295,6 @@ func TestAccResourceVMDisks(t *testing.T) {
name = "test-disk" name = "test-disk"
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "scsi0" interface = "scsi0"
size = 8 size = 8
@ -349,7 +336,6 @@ func TestAccResourceVMDisks(t *testing.T) {
name = "test-disks-ide" name = "test-disks-ide"
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "ide0" interface = "ide0"
size = 8 size = 8
@ -368,13 +354,11 @@ func TestAccResourceVMDisks(t *testing.T) {
name = "test-disks-ide" name = "test-disks-ide"
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "ide0" interface = "ide0"
size = 8 size = 8
} }
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "ide1" interface = "ide1"
size = 8 size = 8
@ -402,7 +386,6 @@ func TestAccResourceVMDisks(t *testing.T) {
template = "true" template = "true"
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "scsi0" interface = "scsi0"
size = 8 size = 8
@ -451,7 +434,6 @@ func TestAccResourceVMDisks(t *testing.T) {
template = "true" template = "true"
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "virtio0" interface = "virtio0"
size = 8 size = 8
@ -498,7 +480,6 @@ func TestAccResourceVMDisks(t *testing.T) {
template = "true" template = "true"
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "virtio0" interface = "virtio0"
size = 8 size = 8
@ -514,7 +495,6 @@ func TestAccResourceVMDisks(t *testing.T) {
} }
disk { disk {
file_format = "raw"
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "scsi0" interface = "scsi0"
size = 10 size = 10
@ -543,7 +523,6 @@ func TestAccResourceVMDisks(t *testing.T) {
disk { disk {
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "virtio0" interface = "virtio0"
file_format = "raw"
size = 20 size = 20
} }
} }
@ -591,7 +570,6 @@ func TestAccResourceVMDisks(t *testing.T) {
disk { disk {
datastore_id = "local-lvm" datastore_id = "local-lvm"
interface = "virtio0" interface = "virtio0"
file_format = "raw"
size = 20 size = 20
} }
} }
@ -604,7 +582,6 @@ func TestAccResourceVMDisks(t *testing.T) {
disk { disk {
datastore_id = "tank" datastore_id = "tank"
interface = "virtio0" interface = "virtio0"
file_format = "raw"
size = 20 size = 20
} }
}`), }`),

View File

@ -39,8 +39,8 @@ func GetInfo(resp *vms.GetResponseData, d *schema.ResourceData) vms.CustomStorag
for k, v := range storageDevices { for k, v := range storageDevices {
if v != nil && diskMap[k] != nil { if v != nil && diskMap[k] != nil {
if d, ok := diskMap[k].(map[string]interface{}); ok { if disk, ok := diskMap[k].(map[string]interface{}); ok {
if fileID, ok := d[mkDiskFileID].(string); ok && fileID != "" { if fileID, ok := disk[mkDiskFileID].(string); ok && fileID != "" {
v.FileID = &fileID v.FileID = &fileID
} }
} }
@ -195,15 +195,11 @@ func GetDiskDeviceObjects(
return diskDeviceObjects, fmt.Errorf("error getting disk speed block: %w", err) return diskDeviceObjects, fmt.Errorf("error getting disk speed block: %w", err)
} }
if fileFormat == "" {
fileFormat = dvDiskFileFormat
}
if pathInDatastore != "" { if pathInDatastore != "" {
if datastoreID != "" { if datastoreID != "" {
diskDevice.FileVolume = fmt.Sprintf("%s:%s", datastoreID, pathInDatastore) diskDevice.FileVolume = fmt.Sprintf("%s:%s", datastoreID, pathInDatastore)
} else { } else {
// FileVolume is absolute path in the host filesystem // FileVolume is the absolute path in the host filesystem
diskDevice.FileVolume = pathInDatastore diskDevice.FileVolume = pathInDatastore
} }
} else { } else {
@ -216,11 +212,14 @@ func GetDiskDeviceObjects(
diskDevice.DatastoreID = &datastoreID diskDevice.DatastoreID = &datastoreID
diskDevice.Discard = &discard diskDevice.Discard = &discard
diskDevice.FileID = &fileID diskDevice.FileID = &fileID
diskDevice.Format = &fileFormat
diskDevice.Replicate = &replicate diskDevice.Replicate = &replicate
diskDevice.Serial = &serial diskDevice.Serial = &serial
diskDevice.Size = types.DiskSizeFromGigabytes(int64(size)) diskDevice.Size = types.DiskSizeFromGigabytes(int64(size))
if fileFormat != "" {
diskDevice.Format = &fileFormat
}
if !strings.HasPrefix(diskInterface, "virtio") { if !strings.HasPrefix(diskInterface, "virtio") {
diskDevice.SSD = &ssd diskDevice.SSD = &ssd
} }
@ -316,7 +315,8 @@ func createCustomDisk(
iface string, iface string,
disk vms.CustomStorageDevice, disk vms.CustomStorageDevice,
) error { ) error {
fileFormat := dvDiskFileFormat // use "old default" specifically here.
fileFormat := "qcow2"
if disk.Format != nil && *disk.Format != "" { if disk.Format != nil && *disk.Format != "" {
fileFormat = *disk.Format fileFormat = *disk.Format
} }
@ -332,7 +332,7 @@ func createCustomDisk(
fmt.Sprintf(`disk_options="%s"`, disk.EncodeOptions()), fmt.Sprintf(`disk_options="%s"`, disk.EncodeOptions()),
fmt.Sprintf(`disk_interface="%s"`, iface), fmt.Sprintf(`disk_interface="%s"`, iface),
`source_image=$(try_sudo "pvesm path $file_id")`, `source_image=$(try_sudo "pvesm path $file_id")`,
`imported_disk="$(try_sudo "qm importdisk $vm_id $source_image $datastore_id_target -format $file_format" | grep "unused0" | cut -d ":" -f 3 | cut -d "'" -f 1)"`, `imported_disk="$(try_sudo "qm disk import $vm_id $source_image $datastore_id_target -format $file_format" | grep "unused0" | cut -d ":" -f 3 | cut -d "'" -f 1)"`,
`disk_id="${datastore_id_target}:$imported_disk,${disk_options}"`, `disk_id="${datastore_id_target}:$imported_disk,${disk_options}"`,
`try_sudo "qm set $vm_id -${disk_interface} $disk_id"`, `try_sudo "qm set $vm_id -${disk_interface} $disk_id"`,
} }
@ -399,8 +399,6 @@ func Read(
disk[mkDiskPathInDatastore] = pathInDatastore disk[mkDiskPathInDatastore] = pathInDatastore
if dd.Format == nil { if dd.Format == nil {
disk[mkDiskFileFormat] = dvDiskFileFormat
if datastoreID != "" { if datastoreID != "" {
// disk format may not be returned by config API if it is default for the storage, and that may be different // disk format may not be returned by config API if it is default for the storage, and that may be different
// from the default qcow2, so we need to read it from the storage API to make sure we have the correct value // from the default qcow2, so we need to read it from the storage API to make sure we have the correct value

View File

@ -17,7 +17,6 @@ import (
const ( const (
dvDiskInterface = "scsi0" dvDiskInterface = "scsi0"
dvDiskDatastoreID = "local-lvm" dvDiskDatastoreID = "local-lvm"
dvDiskFileFormat = "qcow2"
dvDiskSize = 8 dvDiskSize = 8
dvDiskAIO = "io_uring" dvDiskAIO = "io_uring"
dvDiskDiscard = "ignore" dvDiskDiscard = "ignore"