diff --git a/proxmoxtf/resource/vm.go b/proxmoxtf/resource/vm.go index 4affc067..25c8fc9c 100644 --- a/proxmoxtf/resource/vm.go +++ b/proxmoxtf/resource/vm.go @@ -3433,6 +3433,27 @@ func vmRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Dia return vmReadCustom(ctx, d, m, vmID, vmConfig, vmStatus) } +// orderedListFromMap generates a list from a map's values. The values are sorted based on the map's keys. +func orderedListFromMap(inputMap map[string]interface{}) []interface{} { + itemCount := len(inputMap) + keyList := make([]string, itemCount) + i := 0 + + for key := range inputMap { + keyList[i] = key + i++ + } + + sort.Strings(keyList) + + orderedList := make([]interface{}, itemCount) + for i, k := range keyList { + orderedList[i] = inputMap[k] + } + + return orderedList +} + func vmReadCustom( ctx context.Context, d *schema.ResourceData, @@ -3705,7 +3726,6 @@ func vmReadCustom( currentDiskList := d.Get(mkResourceVirtualEnvironmentVMDisk).([]interface{}) diskMap := map[string]interface{}{} diskObjects := getDiskInfo(vmConfig, d) - var orderedDiskList []interface{} for di, dd := range diskObjects { disk := map[string]interface{}{} @@ -3807,24 +3827,8 @@ func vmReadCustom( diskMap[di] = disk } - var keyList []string - - for key := range diskMap { - keyList = append(keyList, key) - } - - sort.Strings(keyList) - - for _, k := range keyList { - orderedDiskList = append(orderedDiskList, diskMap[k]) - } - - if len(clone) > 0 { - if len(currentDiskList) > 0 { - err := d.Set(mkResourceVirtualEnvironmentVMDisk, orderedDiskList) - diags = append(diags, diag.FromErr(err)...) - } - } else if len(currentDiskList) > 0 { + if len(currentDiskList) > 0 { + orderedDiskList := orderedListFromMap(diskMap) err := d.Set(mkResourceVirtualEnvironmentVMDisk, orderedDiskList) diags = append(diags, diag.FromErr(err)...) } @@ -3887,7 +3891,6 @@ func vmReadCustom( currentPCIList := d.Get(mkResourceVirtualEnvironmentVMHostPCI).([]interface{}) pciMap := map[string]interface{}{} - var orderedPCIList []interface{} pciDevices := getPCIInfo(vmConfig, d) for pi, pp := range pciDevices { @@ -3933,23 +3936,9 @@ func vmReadCustom( pciMap[pi] = pci } - keyList = []string{} - for key := range pciMap { - keyList = append(keyList, key) - } - sort.Strings(keyList) - - for _, k := range keyList { - orderedPCIList = append(orderedPCIList, pciMap[k]) - } - - if len(clone) > 0 { - if len(currentPCIList) > 0 { - err := d.Set(mkResourceVirtualEnvironmentVMHostPCI, orderedPCIList) - diags = append(diags, diag.FromErr(err)...) - } - } else if len(currentPCIList) > 0 { + if len(currentPCIList) > 0 { // todo: reordering of devices by PVE may cause an issue here + orderedPCIList := orderedListFromMap(pciMap) err := d.Set(mkResourceVirtualEnvironmentVMHostPCI, orderedPCIList) diags = append(diags, diag.FromErr(err)...) }