From 539b902633b07e1f9089274b9ddd7e7d3edd317d Mon Sep 17 00:00:00 2001 From: Pavel Boldyrev <627562+bpg@users.noreply.github.com> Date: Fri, 28 Mar 2025 17:23:46 -0400 Subject: [PATCH] fix(vm): improve error handling when updating `initialization` block (#1858) * fix(vm): improve error handling when updating `initialization` block Fix for an edge case where a VM is created without an initialization block, then any subsequent update to the block would cause a panic. Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com> * linter Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com> --------- Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com> --- proxmoxtf/resource/vm/vm.go | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/proxmoxtf/resource/vm/vm.go b/proxmoxtf/resource/vm/vm.go index 7a5a2440..4a12ec45 100644 --- a/proxmoxtf/resource/vm/vm.go +++ b/proxmoxtf/resource/vm/vm.go @@ -5168,14 +5168,18 @@ func vmUpdate(ctx context.Context, d *schema.ResourceData, m interface{}) diag.D tflog.Debug(ctx, fmt.Sprintf("CloudInit must be moved from %s to %s", existingInterface, initializationInterface)) } - oldInit, _ := d.GetChange(mkInitialization) - oldInitBlock := oldInit.([]interface{})[0].(map[string]interface{}) - prevDatastoreID := oldInitBlock[mkInitializationDatastoreID].(string) + mustChangeDatastore := false - mustChangeDatastore := prevDatastoreID != initializationDatastoreID - if mustChangeDatastore { - tflog.Debug(ctx, fmt.Sprintf("CloudInit must be moved from datastore %s to datastore %s", - prevDatastoreID, initializationDatastoreID)) + oldInit, _ := d.GetChange(mkInitialization) + if len(oldInit.([]interface{})) > 0 { + oldInitBlock := oldInit.([]interface{})[0].(map[string]interface{}) + prevDatastoreID := oldInitBlock[mkInitializationDatastoreID].(string) + + mustChangeDatastore = prevDatastoreID != initializationDatastoreID + if mustChangeDatastore { + tflog.Debug(ctx, fmt.Sprintf("CloudInit must be moved from datastore %s to datastore %s", + prevDatastoreID, initializationDatastoreID)) + } } if mustMove || mustChangeDatastore || existingInterface == "" {