0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-08-25 12:55:41 +00:00

fix rootfs unmarshalling from API response

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
This commit is contained in:
Pavel Boldyrev 2025-08-10 14:13:26 -04:00
parent 93f6b3ed0e
commit c39a061825
No known key found for this signature in database
GPG Key ID: 637146A2A6804C59
3 changed files with 55 additions and 6 deletions

View File

@ -71,7 +71,6 @@ func TestAccResourceContainer(t *testing.T) {
unprivileged = true unprivileged = true
disk { disk {
datastore_id = "local-lvm" datastore_id = "local-lvm"
mount_options = ["discard"]
size = 4 size = 4
} }
mount_point { mount_point {
@ -144,6 +143,7 @@ func TestAccResourceContainer(t *testing.T) {
disk { disk {
datastore_id = "local-lvm" datastore_id = "local-lvm"
size = 4 size = 4
mount_options = ["discard"]
} }
mount_point { mount_point {
volume = "local-lvm" volume = "local-lvm"
@ -180,6 +180,55 @@ func TestAccResourceContainer(t *testing.T) {
"description": "my\ndescription\nvalue\n", "description": "my\ndescription\nvalue\n",
"device_passthrough.#": "1", "device_passthrough.#": "1",
"initialization.0.dns.#": "0", "initialization.0.dns.#": "0",
"disk.0.mount_options.#": "1",
}),
),
},
{
// remove disk options
Config: te.RenderConfig(`
resource "proxmox_virtual_environment_container" "test_container" {
node_name = "{{.NodeName}}"
vm_id = {{.TestContainerID}}
timeout_delete = 10
unprivileged = true
disk {
datastore_id = "local-lvm"
size = 4
}
mount_point {
volume = "local-lvm"
size = "4G"
path = "mnt/local"
}
device_passthrough {
path = "/dev/zero"
}
description = <<-EOT
my
description
value
EOT
initialization {
hostname = "test"
ip_config {
ipv4 {
address = "172.16.10.10/15"
gateway = "172.16.0.1"
}
}
}
network_interface {
name = "vmbr0"
}
operating_system {
template_file_id = "local:vztmpl/{{.ImageFileName}}"
type = "ubuntu"
}
}`, WithRootUser()),
Check: resource.ComposeTestCheckFunc(
ResourceAttributes(accTestContainerName, map[string]string{
"disk.0.mount_options.#": "0",
}), }),
), ),
}, },

View File

@ -875,6 +875,8 @@ func (r *CustomRootFS) UnmarshalJSON(b []byte) error {
r.Volume = v[0] r.Volume = v[0]
} else if len(v) == 2 { } else if len(v) == 2 {
switch v[0] { switch v[0] {
case "volume":
r.Volume = v[1]
case "acl": case "acl":
bv := types.CustomBool(v[1] == "1") bv := types.CustomBool(v[1] == "1")
r.ACL = &bv r.ACL = &bv
@ -902,7 +904,7 @@ func (r *CustomRootFS) UnmarshalJSON(b []byte) error {
case "size": case "size":
r.Size = new(types.DiskSize) r.Size = new(types.DiskSize)
err := r.Size.UnmarshalJSON([]byte(v[1])) err = r.Size.UnmarshalJSON([]byte(v[1]))
if err != nil { if err != nil {
return fmt.Errorf("failed to unmarshal disk size: %w", err) return fmt.Errorf("failed to unmarshal disk size: %w", err)
} }

View File

@ -2310,10 +2310,6 @@ func containerRead(ctx context.Context, d *schema.ResourceData, m interface{}) d
// Default value of "storage" is "local" according to the API documentation. // Default value of "storage" is "local" according to the API documentation.
disk[mkDiskDatastoreID] = "local" disk[mkDiskDatastoreID] = "local"
disk[mkDiskSize] = dvDiskSize disk[mkDiskSize] = dvDiskSize
disk[mkDiskMountOptions] = nil
disk[mkDiskACL] = dvDiskACL
disk[mkDiskReplicate] = dvDiskReplicate
disk[mkDiskQuota] = dvDiskQuota
} }
currentDisk := d.Get(mkDisk).([]interface{}) currentDisk := d.Get(mkDisk).([]interface{})
@ -3016,6 +3012,8 @@ func containerUpdate(ctx context.Context, d *schema.ResourceData, m interface{})
} }
updateBody.RootFS = rootFS updateBody.RootFS = rootFS
rebootRequired = true
} }
if d.HasChange(mkFeatures) { if d.HasChange(mkFeatures) {