From 414c2fc74912c52f8c2815d35cfab13d26b3622c Mon Sep 17 00:00:00 2001 From: Grant Gongaware Date: Wed, 9 Jan 2019 08:46:14 -0800 Subject: [PATCH] support different types for disk size --- proxmox/resource_vm_qemu.go | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/proxmox/resource_vm_qemu.go b/proxmox/resource_vm_qemu.go index f4047b4..978f1b1 100644 --- a/proxmox/resource_vm_qemu.go +++ b/proxmox/resource_vm_qemu.go @@ -628,22 +628,20 @@ func prepareDiskSize( diskConfMap pxapi.QemuDevices, ) error { clonedConfig, err := pxapi.NewConfigQemuFromApi(vmr, client) + if err != nil { + return err + } //log.Printf("%s", clonedConfig) for diskID, diskConf := range diskConfMap { diskName := fmt.Sprintf("%v%v", diskConf["type"], diskID) - //diskSizeGB := diskConf["size"].(string) - //diskSize, _ := strconv.ParseFloat(strings.Trim(diskSizeGB, "G"), 64) - diskSize := diskConf["size"].(float64) - // if err != nil { - // return err - // } + diskSize := diskSizeGB(diskConf["size"]) if _, diskExists := clonedConfig.QemuDisks[diskID]; !diskExists { return err } - clonedDiskSizeGB := clonedConfig.QemuDisks[diskID]["size"].(string) - clonedDiskSize, _ := strconv.ParseFloat(strings.Trim(clonedDiskSizeGB, "G"), 64) + + clonedDiskSize := diskSizeGB(clonedConfig.QemuDisks[diskID]["size"]) if err != nil { return err @@ -661,6 +659,19 @@ func prepareDiskSize( return nil } +func diskSizeGB(dcSize interface{}) float64 { + var diskSize float64 + // TODO support other units M/G/K + switch dcSize.(type) { + case string: + diskSizeGB := dcSize.(string) + diskSize, _ = strconv.ParseFloat(strings.Trim(diskSizeGB, "G"), 64) + case float64: + diskSize = dcSize.(float64) + } + return diskSize +} + // Converting from schema.TypeSet to map of id and conf for each device, // which will be sent to Proxmox API. func devicesSetToMap(devicesSet *schema.Set) pxapi.QemuDevices {