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

Fix Errors

- Fix required disk interface parameter
 - Fix datastore move to same datastore error
 - Fix compare sizes for resize disk
This commit is contained in:
Lucas Hahn 2020-07-06 15:48:57 +02:00
parent 68b67e556d
commit 8acafc0bb7
3 changed files with 53 additions and 37 deletions

View File

@ -161,6 +161,11 @@ func (c *VirtualEnvironmentClient) GetVMStatus(nodeName string, vmID int) (*Virt
func (c *VirtualEnvironmentClient) MoveVMDisk(nodeName string, vmID int, d *VirtualEnvironmentVMMoveDiskRequestBody) error {
taskID, err := c.MoveVMDiskAsync(nodeName, vmID, d)
if strings.Contains(err.Error(), "you can't move to the same storage with same format") {
// if someone tries to move to the same storage, the move is considered to be successful
return nil
}
if err != nil {
return err
}

View File

@ -8,7 +8,6 @@ import (
"errors"
"fmt"
"log"
"math"
"strconv"
"strings"
"time"
@ -42,7 +41,7 @@ const (
dvResourceVirtualEnvironmentVMCPUType = "qemu64"
dvResourceVirtualEnvironmentVMCPUUnits = 1024
dvResourceVirtualEnvironmentVMDescription = ""
dvResourcevirtualEnvironmentVMDiskInterface = ""
dvResourcevirtualEnvironmentVMDiskInterface = "scsi0"
dvResourceVirtualEnvironmentVMDiskDatastoreID = "local-lvm"
dvResourceVirtualEnvironmentVMDiskFileFormat = "qcow2"
dvResourceVirtualEnvironmentVMDiskFileID = ""
@ -463,8 +462,7 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
mkResourcevirtualEnvironmentVMDiskInterface: {
Type: schema.TypeString,
Description: "The datastore name",
Optional: false,
Default: dvResourcevirtualEnvironmentVMDiskInterface,
Required: true,
},
mkResourceVirtualEnvironmentVMDiskDatastoreID: {
Type: schema.TypeString,
@ -1345,12 +1343,10 @@ func resourceVirtualEnvironmentVMCreateClone(d *schema.ResourceData, m interface
return errors.New(fmt.Sprintf("Disk move failed, no disk named %s", diskInterface))
}
compareString := *currentDiskInfo.Size
compareSize := len(compareString)
compareNumber, err := strconv.Atoi(compareString[:compareSize-1])
compareNumber, err := parseDiskSize(currentDiskInfo.Size)
if err != nil {
return errors.New(fmt.Sprintf("Disk resize failed, vm disk size could not be converted to int disk size = %s", *currentDiskInfo.Size))
return err
}
if diskSize < compareNumber {
@ -1369,11 +1365,13 @@ func resourceVirtualEnvironmentVMCreateClone(d *schema.ResourceData, m interface
Size: fmt.Sprintf("%dG", diskSize),
}
if dataStoreID != "" {
err = veClient.MoveVMDisk(nodeName, vmID, diskMoveBody)
if err != nil {
return err
}
}
err = veClient.ResizeVMDisk(nodeName, vmID, diskResizeBody)
@ -2487,35 +2485,12 @@ func resourceVirtualEnvironmentVMReadCustom(d *schema.ResourceData, m interface{
diskSize := 0
var err error
if dd.Size != nil {
if strings.HasSuffix(*dd.Size, "T") {
diskSize, err = strconv.Atoi(strings.TrimSuffix(*dd.Size, "T"))
diskSize, err = parseDiskSize(dd.Size)
if err != nil {
return err
}
diskSize = int(math.Ceil(float64(diskSize) * 1024))
} else if strings.HasSuffix(*dd.Size, "G") {
diskSize, err = strconv.Atoi(strings.TrimSuffix(*dd.Size, "G"))
if err != nil {
return err
}
} else if strings.HasSuffix(*dd.Size, "M") {
diskSize, err = strconv.Atoi(strings.TrimSuffix(*dd.Size, "M"))
if err != nil {
return err
}
diskSize = int(math.Ceil(float64(diskSize) / 1024))
} else {
return fmt.Errorf("Cannot parse storage size \"%s\"", *dd.Size)
}
}
disk[mkResourceVirtualEnvironmentVMDiskSize] = diskSize
if dd.BurstableReadSpeedMbps != nil ||

View File

@ -6,7 +6,10 @@ package proxmoxtf
import (
"fmt"
"math"
"regexp"
"strconv"
"strings"
"testing"
"time"
"unicode"
@ -445,6 +448,39 @@ func getDiskInfo(data *proxmox.VirtualEnvironmentVMGetResponseData) map[string]*
return storageDevices
}
func parseDiskSize(size *string) (int, error) {
var diskSize int
var err error
if size != nil {
if strings.HasSuffix(*size, "T") {
diskSize, err = strconv.Atoi(strings.TrimSuffix(*size, "T"))
if err != nil {
return -1, err
}
diskSize = int(math.Ceil(float64(diskSize) * 1024))
} else if strings.HasSuffix(*size, "G") {
diskSize, err = strconv.Atoi(strings.TrimSuffix(*size, "G"))
if err != nil {
return -1, err
}
} else if strings.HasSuffix(*size, "M") {
diskSize, err = strconv.Atoi(strings.TrimSuffix(*size, "M"))
if err != nil {
return -1, err
}
diskSize = int(math.Ceil(float64(diskSize) / 1024))
} else {
return -1, fmt.Errorf("Cannot parse storage size \"%s\"", *size)
}
}
return diskSize, err
}
func testComputedAttributes(t *testing.T, s *schema.Resource, keys []string) {
for _, v := range keys {
if s.Schema[v] == nil {