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:
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 {
|
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
|
||||||
}
|
}
|
||||||
|
@ -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 ||
|
||||||
|
@ -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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user