0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-07-04 21:14:05 +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 {
datastore_id = "local"
file_format = "raw"
type = "4m"
}

View File

@ -273,11 +273,11 @@ output "ubuntu_vm_public_key" {
- `discard` - (Optional) Whether to pass discard/trim requests to the
underlying storage. Supported values are `on`/`ignore` (defaults
to `ignore`).
- `file_format` - (Optional) The file format (defaults to `qcow2`).
- `file_format` - (Optional) The file format.
- `qcow2` - QEMU Disk Image v2.
- `raw` - Raw 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
`proxmox_virtual_environment_download_file` resource.
- `interface` - (Required) The disk interface for Proxmox, currently `scsi`,
@ -685,14 +685,12 @@ resource "proxmox_virtual_environment_vm" "data_vm" {
disk {
datastore_id = "local-zfs"
file_format = "raw"
interface = "scsi0"
size = 1
}
disk {
datastore_id = "local-zfs"
file_format = "raw"
interface = "scsi1"
size = 4
}
@ -702,7 +700,6 @@ resource "proxmox_virtual_environment_vm" "data_user_vm" {
# boot disk
disk {
datastore_id = "local-zfs"
file_format = "raw"
interface = "scsi0"
size = 8
}

View File

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

View File

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

View File

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

View File

@ -39,8 +39,8 @@ func GetInfo(resp *vms.GetResponseData, d *schema.ResourceData) vms.CustomStorag
for k, v := range storageDevices {
if v != nil && diskMap[k] != nil {
if d, ok := diskMap[k].(map[string]interface{}); ok {
if fileID, ok := d[mkDiskFileID].(string); ok && fileID != "" {
if disk, ok := diskMap[k].(map[string]interface{}); ok {
if fileID, ok := disk[mkDiskFileID].(string); ok && fileID != "" {
v.FileID = &fileID
}
}
@ -195,15 +195,11 @@ func GetDiskDeviceObjects(
return diskDeviceObjects, fmt.Errorf("error getting disk speed block: %w", err)
}
if fileFormat == "" {
fileFormat = dvDiskFileFormat
}
if pathInDatastore != "" {
if datastoreID != "" {
diskDevice.FileVolume = fmt.Sprintf("%s:%s", datastoreID, pathInDatastore)
} else {
// FileVolume is absolute path in the host filesystem
// FileVolume is the absolute path in the host filesystem
diskDevice.FileVolume = pathInDatastore
}
} else {
@ -216,11 +212,14 @@ func GetDiskDeviceObjects(
diskDevice.DatastoreID = &datastoreID
diskDevice.Discard = &discard
diskDevice.FileID = &fileID
diskDevice.Format = &fileFormat
diskDevice.Replicate = &replicate
diskDevice.Serial = &serial
diskDevice.Size = types.DiskSizeFromGigabytes(int64(size))
if fileFormat != "" {
diskDevice.Format = &fileFormat
}
if !strings.HasPrefix(diskInterface, "virtio") {
diskDevice.SSD = &ssd
}
@ -316,7 +315,8 @@ func createCustomDisk(
iface string,
disk vms.CustomStorageDevice,
) error {
fileFormat := dvDiskFileFormat
// use "old default" specifically here.
fileFormat := "qcow2"
if disk.Format != nil && *disk.Format != "" {
fileFormat = *disk.Format
}
@ -332,7 +332,7 @@ func createCustomDisk(
fmt.Sprintf(`disk_options="%s"`, disk.EncodeOptions()),
fmt.Sprintf(`disk_interface="%s"`, iface),
`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}"`,
`try_sudo "qm set $vm_id -${disk_interface} $disk_id"`,
}
@ -399,8 +399,6 @@ func Read(
disk[mkDiskPathInDatastore] = pathInDatastore
if dd.Format == nil {
disk[mkDiskFileFormat] = dvDiskFileFormat
if datastoreID != "" {
// 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

View File

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