0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-07-05 13:33:58 +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 { func (c *VirtualEnvironmentClient) MoveVMDisk(nodeName string, vmID int, d *VirtualEnvironmentVMMoveDiskRequestBody) error {
taskID, err := c.MoveVMDiskAsync(nodeName, vmID, d) 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 { if err != nil {
return err return err
} }

View File

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

View File

@ -6,7 +6,10 @@ package proxmoxtf
import ( import (
"fmt" "fmt"
"math"
"regexp" "regexp"
"strconv"
"strings"
"testing" "testing"
"time" "time"
"unicode" "unicode"
@ -445,6 +448,39 @@ func getDiskInfo(data *proxmox.VirtualEnvironmentVMGetResponseData) map[string]*
return storageDevices 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) { func testComputedAttributes(t *testing.T, s *schema.Resource, keys []string) {
for _, v := range keys { for _, v := range keys {
if s.Schema[v] == nil { if s.Schema[v] == nil {