0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-06-30 10:33:46 +00:00

Parameterize all timeouts

This commit is contained in:
Lucas Hahn 2021-01-08 13:42:16 +01:00
parent c534da01cc
commit 8ae3b2c0e3
2 changed files with 84 additions and 29 deletions

View File

@ -24,7 +24,7 @@ var (
)
// CloneVM clones a virtual machine.
func (c *VirtualEnvironmentClient) CloneVM(nodeName string, vmID int, retries int, d *VirtualEnvironmentVMCloneRequestBody) error {
func (c *VirtualEnvironmentClient) CloneVM(nodeName string, vmID int, retries int, d *VirtualEnvironmentVMCloneRequestBody, timeout int) error {
resBody := &VirtualEnvironmentVMMoveDiskResponseBody{}
var err error
@ -44,7 +44,7 @@ func (c *VirtualEnvironmentClient) CloneVM(nodeName string, vmID int, retries in
return errors.New("The server did not include a data object in the response")
}
err = c.WaitForNodeTask(nodeName, *resBody.Data, 1800, 5)
err = c.WaitForNodeTask(nodeName, *resBody.Data, timeout, 5)
if err == nil {
return nil
@ -158,7 +158,7 @@ func (c *VirtualEnvironmentClient) GetVMStatus(nodeName string, vmID int) (*Virt
}
// MoveVMDisk moves a virtual machine disk.
func (c *VirtualEnvironmentClient) MoveVMDisk(nodeName string, vmID int, d *VirtualEnvironmentVMMoveDiskRequestBody) error {
func (c *VirtualEnvironmentClient) MoveVMDisk(nodeName string, vmID int, d *VirtualEnvironmentVMMoveDiskRequestBody, timeout int) error {
taskID, err := c.MoveVMDiskAsync(nodeName, vmID, d)
if strings.Contains(err.Error(), "you can't move to the same storage with same format") {
@ -170,7 +170,7 @@ func (c *VirtualEnvironmentClient) MoveVMDisk(nodeName string, vmID int, d *Virt
return err
}
err = c.WaitForNodeTask(nodeName, *taskID, 86400, 5)
err = c.WaitForNodeTask(nodeName, *taskID, timeout, 5)
if err != nil {
return err
@ -201,14 +201,14 @@ func (c *VirtualEnvironmentClient) ListVMs() ([]*VirtualEnvironmentVMListRespons
}
// RebootVM reboots a virtual machine.
func (c *VirtualEnvironmentClient) RebootVM(nodeName string, vmID int, d *VirtualEnvironmentVMRebootRequestBody) error {
func (c *VirtualEnvironmentClient) RebootVM(nodeName string, vmID int, d *VirtualEnvironmentVMRebootRequestBody, timeout int) error {
taskID, err := c.RebootVMAsync(nodeName, vmID, d)
if err != nil {
return err
}
err = c.WaitForNodeTask(nodeName, *taskID, 1800, 5)
err = c.WaitForNodeTask(nodeName, *taskID, timeout, 5)
if err != nil {
return err
@ -249,14 +249,14 @@ func (c *VirtualEnvironmentClient) ResizeVMDisk(nodeName string, vmID int, d *Vi
}
// ShutdownVM shuts down a virtual machine.
func (c *VirtualEnvironmentClient) ShutdownVM(nodeName string, vmID int, d *VirtualEnvironmentVMShutdownRequestBody) error {
func (c *VirtualEnvironmentClient) ShutdownVM(nodeName string, vmID int, d *VirtualEnvironmentVMShutdownRequestBody, timeout int) error {
taskID, err := c.ShutdownVMAsync(nodeName, vmID, d)
if err != nil {
return err
}
err = c.WaitForNodeTask(nodeName, *taskID, 1800, 5)
err = c.WaitForNodeTask(nodeName, *taskID, timeout, 5)
if err != nil {
return err
@ -282,14 +282,14 @@ func (c *VirtualEnvironmentClient) ShutdownVMAsync(nodeName string, vmID int, d
}
// StartVM starts a virtual machine.
func (c *VirtualEnvironmentClient) StartVM(nodeName string, vmID int) error {
func (c *VirtualEnvironmentClient) StartVM(nodeName string, vmID int, timeout int) error {
taskID, err := c.StartVMAsync(nodeName, vmID)
if err != nil {
return err
}
err = c.WaitForNodeTask(nodeName, *taskID, 1800, 5)
err = c.WaitForNodeTask(nodeName, *taskID, timeout, 5)
if err != nil {
return err
@ -315,14 +315,14 @@ func (c *VirtualEnvironmentClient) StartVMAsync(nodeName string, vmID int) (*str
}
// StopVM stops a virtual machine.
func (c *VirtualEnvironmentClient) StopVM(nodeName string, vmID int) error {
func (c *VirtualEnvironmentClient) StopVM(nodeName string, vmID int, timeout int) error {
taskID, err := c.StopVMAsync(nodeName, vmID)
if err != nil {
return err
}
err = c.WaitForNodeTask(nodeName, *taskID, 300, 5)
err = c.WaitForNodeTask(nodeName, *taskID, timeout, 5)
if err != nil {
return err

View File

@ -78,6 +78,12 @@ const (
dvResourceVirtualEnvironmentVMStarted = true
dvResourceVirtualEnvironmentVMTabletDevice = true
dvResourceVirtualEnvironmentVMTemplate = false
dvResourceVirtualEnvironmentVMTimeoutClone = 1800
dvResourceVirtualEnvironmentVMTimeoutMoveDisk = 1800
dvResourceVirtualEnvironmentVMTimeoutReboot = 1800
dvResourceVirtualEnvironmentVMTimeoutShutdownVM = 1800
dvResourceVirtualEnvironmentVMTimeoutStartVM = 1800
dvResourceVirtualEnvironmentVMTimeoutStopVM = 300
dvResourceVirtualEnvironmentVMVGAEnabled = true
dvResourceVirtualEnvironmentVMVGAMemory = 16
dvResourceVirtualEnvironmentVMVGAType = "std"
@ -173,6 +179,12 @@ const (
mkResourceVirtualEnvironmentVMStarted = "started"
mkResourceVirtualEnvironmentVMTabletDevice = "tablet_device"
mkResourceVirtualEnvironmentVMTemplate = "template"
mkResourceVirtualEnvironmentVMTimeoutClone = "timeout_clone"
mkResourceVirtualEnvironmentVMTimeoutMoveDisk = "timeout_move_disk"
mkResourceVirtualEnvironmentVMTimeoutReboot = "timeout_reboot"
mkResourceVirtualEnvironmentVMTimeoutShutdownVM = "timeout_shutdown_vm"
mkResourceVirtualEnvironmentVMTimeoutStartVM = "timeout_start_vm"
mkResourceVirtualEnvironmentVMTimeoutStopVM = "timeout_stop_vm"
mkResourceVirtualEnvironmentVMVGA = "vga"
mkResourceVirtualEnvironmentVMVGAEnabled = "enabled"
mkResourceVirtualEnvironmentVMVGAMemory = "memory"
@ -945,6 +957,42 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
ForceNew: true,
Default: dvResourceVirtualEnvironmentVMTemplate,
},
mkResourceVirtualEnvironmentVMTimeoutClone: {
Type: schema.TypeInt,
Description: "Clone VM timeout",
Optional: true,
Default: dvResourceVirtualEnvironmentVMTimeoutClone,
},
mkResourceVirtualEnvironmentVMTimeoutMoveDisk: {
Type: schema.TypeInt,
Description: "MoveDisk timeout",
Optional: true,
Default: dvResourceVirtualEnvironmentVMTimeoutMoveDisk,
},
mkResourceVirtualEnvironmentVMTimeoutReboot: {
Type: schema.TypeInt,
Description: "Reboot timeout",
Optional: true,
Default: dvResourceVirtualEnvironmentVMTimeoutReboot,
},
mkResourceVirtualEnvironmentVMTimeoutShutdownVM: {
Type: schema.TypeInt,
Description: "Shutdown timeout",
Optional: true,
Default: dvResourceVirtualEnvironmentVMTimeoutShutdownVM,
},
mkResourceVirtualEnvironmentVMTimeoutStartVM: {
Type: schema.TypeInt,
Description: "Start VM timeout",
Optional: true,
Default: dvResourceVirtualEnvironmentVMTimeoutStartVM,
},
mkResourceVirtualEnvironmentVMTimeoutStopVM: {
Type: schema.TypeInt,
Description: "Stop VM timeout",
Optional: true,
Default: dvResourceVirtualEnvironmentVMTimeoutStopVM,
},
mkResourceVirtualEnvironmentVMVGA: {
Type: schema.TypeList,
Description: "The VGA configuration",
@ -1066,12 +1114,14 @@ func resourceVirtualEnvironmentVMCreateClone(d *schema.ResourceData, m interface
cloneBody.PoolID = &poolID
}
cloneTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutClone).(int)
if cloneNodeName != "" && cloneNodeName != nodeName {
cloneBody.TargetNodeName = &nodeName
err = veClient.CloneVM(cloneNodeName, cloneVMID, cloneRetries, cloneBody)
err = veClient.CloneVM(cloneNodeName, cloneVMID, cloneRetries, cloneBody, cloneTimeout)
} else {
err = veClient.CloneVM(nodeName, cloneVMID, cloneRetries, cloneBody)
err = veClient.CloneVM(nodeName, cloneVMID, cloneRetries, cloneBody, cloneTimeout)
}
if err != nil {
@ -1414,7 +1464,8 @@ func resourceVirtualEnvironmentVMCreateClone(d *schema.ResourceData, m interface
}
if dataStoreID != "" {
err = veClient.MoveVMDisk(nodeName, vmID, diskMoveBody)
moveDiskTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutMoveDisk).(int)
err = veClient.MoveVMDisk(nodeName, vmID, diskMoveBody, moveDiskTimeout)
if err != nil {
return err
@ -1860,18 +1911,19 @@ func resourceVirtualEnvironmentVMCreateStart(d *schema.ResourceData, m interface
}
// Start the virtual machine and wait for it to reach a running state before continuing.
err = veClient.StartVM(nodeName, vmID)
startVMTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutStartVM).(int)
err = veClient.StartVM(nodeName, vmID, startVMTimeout)
if err != nil {
return err
}
if reboot {
rebootTimeout := 300
rebootTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutReboot).(int)
err := veClient.RebootVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMRebootRequestBody{
Timeout: &rebootTimeout,
})
}, (rebootTimeout + 30))
if err != nil {
return err
@ -3515,19 +3567,20 @@ func resourceVirtualEnvironmentVMUpdate(d *schema.ResourceData, m interface{}) e
if d.HasChange(mkResourceVirtualEnvironmentVMStarted) && !bool(template) {
if started {
err = veClient.StartVM(nodeName, vmID)
startVMTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutStartVM).(int)
err = veClient.StartVM(nodeName, vmID, startVMTimeout)
if err != nil {
return err
}
} else {
forceStop := proxmox.CustomBool(true)
shutdownTimeout := 300
shutdownTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutShutdownVM).(int)
err = veClient.ShutdownVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMShutdownRequestBody{
ForceStop: &forceStop,
Timeout: &shutdownTimeout,
})
}, (shutdownTimeout + 30))
if err != nil {
return err
@ -3603,12 +3656,12 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(d *schema.ResourceDat
if len(diskMoveBodies) > 0 || len(diskResizeBodies) > 0 {
if !template {
forceStop := proxmox.CustomBool(true)
shutdownTimeout := 300
shutdownTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutShutdownVM).(int)
err = veClient.ShutdownVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMShutdownRequestBody{
ForceStop: &forceStop,
Timeout: &shutdownTimeout,
})
}, (shutdownTimeout + 30))
if err != nil {
return err
@ -3619,7 +3672,8 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(d *schema.ResourceDat
}
for _, reqBody := range diskMoveBodies {
err = veClient.MoveVMDisk(nodeName, vmID, reqBody)
moveDiskTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutMoveDisk).(int)
err = veClient.MoveVMDisk(nodeName, vmID, reqBody, moveDiskTimeout)
if err != nil {
return err
@ -3635,7 +3689,8 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(d *schema.ResourceDat
}
if (len(diskMoveBodies) > 0 || len(diskResizeBodies) > 0) && started && !template {
err = veClient.StartVM(nodeName, vmID)
startVMTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutStartVM).(int)
err = veClient.StartVM(nodeName, vmID, startVMTimeout)
if err != nil {
return err
@ -3645,11 +3700,11 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(d *schema.ResourceDat
// Perform a regular reboot in case it's necessary and haven't already been done.
if reboot {
rebootTimeout := 300
rebootTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutReboot).(int)
err := veClient.RebootVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMRebootRequestBody{
Timeout: &rebootTimeout,
})
}, (rebootTimeout + 30))
if err != nil {
return err
@ -3683,12 +3738,12 @@ func resourceVirtualEnvironmentVMDelete(d *schema.ResourceData, m interface{}) e
if status.Status != "stopped" {
forceStop := proxmox.CustomBool(true)
shutdownTimeout := 300
shutdownTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutShutdownVM).(int)
err = veClient.ShutdownVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMShutdownRequestBody{
ForceStop: &forceStop,
Timeout: &shutdownTimeout,
})
}, (shutdownTimeout + 30))
if err != nil {
return err