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:
parent
68b67e556d
commit
8acafc0bb7
@ -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
|
||||
}
|
||||
|
@ -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 ||
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user