mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-01 19:12:59 +00:00
Parameterize all timeouts
This commit is contained in:
parent
c534da01cc
commit
8ae3b2c0e3
@ -24,7 +24,7 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// CloneVM clones a virtual machine.
|
// 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{}
|
resBody := &VirtualEnvironmentVMMoveDiskResponseBody{}
|
||||||
var err error
|
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")
|
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 {
|
if err == nil {
|
||||||
return nil
|
return nil
|
||||||
@ -158,7 +158,7 @@ func (c *VirtualEnvironmentClient) GetVMStatus(nodeName string, vmID int) (*Virt
|
|||||||
}
|
}
|
||||||
|
|
||||||
// MoveVMDisk moves a virtual machine disk.
|
// 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)
|
taskID, err := c.MoveVMDiskAsync(nodeName, vmID, d)
|
||||||
|
|
||||||
if strings.Contains(err.Error(), "you can't move to the same storage with same format") {
|
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
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = c.WaitForNodeTask(nodeName, *taskID, 86400, 5)
|
err = c.WaitForNodeTask(nodeName, *taskID, timeout, 5)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -201,14 +201,14 @@ func (c *VirtualEnvironmentClient) ListVMs() ([]*VirtualEnvironmentVMListRespons
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RebootVM reboots a virtual machine.
|
// 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)
|
taskID, err := c.RebootVMAsync(nodeName, vmID, d)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = c.WaitForNodeTask(nodeName, *taskID, 1800, 5)
|
err = c.WaitForNodeTask(nodeName, *taskID, timeout, 5)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -249,14 +249,14 @@ func (c *VirtualEnvironmentClient) ResizeVMDisk(nodeName string, vmID int, d *Vi
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ShutdownVM shuts down a virtual machine.
|
// 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)
|
taskID, err := c.ShutdownVMAsync(nodeName, vmID, d)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = c.WaitForNodeTask(nodeName, *taskID, 1800, 5)
|
err = c.WaitForNodeTask(nodeName, *taskID, timeout, 5)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -282,14 +282,14 @@ func (c *VirtualEnvironmentClient) ShutdownVMAsync(nodeName string, vmID int, d
|
|||||||
}
|
}
|
||||||
|
|
||||||
// StartVM starts a virtual machine.
|
// 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)
|
taskID, err := c.StartVMAsync(nodeName, vmID)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = c.WaitForNodeTask(nodeName, *taskID, 1800, 5)
|
err = c.WaitForNodeTask(nodeName, *taskID, timeout, 5)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -315,14 +315,14 @@ func (c *VirtualEnvironmentClient) StartVMAsync(nodeName string, vmID int) (*str
|
|||||||
}
|
}
|
||||||
|
|
||||||
// StopVM stops a virtual machine.
|
// 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)
|
taskID, err := c.StopVMAsync(nodeName, vmID)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = c.WaitForNodeTask(nodeName, *taskID, 300, 5)
|
err = c.WaitForNodeTask(nodeName, *taskID, timeout, 5)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -78,6 +78,12 @@ const (
|
|||||||
dvResourceVirtualEnvironmentVMStarted = true
|
dvResourceVirtualEnvironmentVMStarted = true
|
||||||
dvResourceVirtualEnvironmentVMTabletDevice = true
|
dvResourceVirtualEnvironmentVMTabletDevice = true
|
||||||
dvResourceVirtualEnvironmentVMTemplate = false
|
dvResourceVirtualEnvironmentVMTemplate = false
|
||||||
|
dvResourceVirtualEnvironmentVMTimeoutClone = 1800
|
||||||
|
dvResourceVirtualEnvironmentVMTimeoutMoveDisk = 1800
|
||||||
|
dvResourceVirtualEnvironmentVMTimeoutReboot = 1800
|
||||||
|
dvResourceVirtualEnvironmentVMTimeoutShutdownVM = 1800
|
||||||
|
dvResourceVirtualEnvironmentVMTimeoutStartVM = 1800
|
||||||
|
dvResourceVirtualEnvironmentVMTimeoutStopVM = 300
|
||||||
dvResourceVirtualEnvironmentVMVGAEnabled = true
|
dvResourceVirtualEnvironmentVMVGAEnabled = true
|
||||||
dvResourceVirtualEnvironmentVMVGAMemory = 16
|
dvResourceVirtualEnvironmentVMVGAMemory = 16
|
||||||
dvResourceVirtualEnvironmentVMVGAType = "std"
|
dvResourceVirtualEnvironmentVMVGAType = "std"
|
||||||
@ -173,6 +179,12 @@ const (
|
|||||||
mkResourceVirtualEnvironmentVMStarted = "started"
|
mkResourceVirtualEnvironmentVMStarted = "started"
|
||||||
mkResourceVirtualEnvironmentVMTabletDevice = "tablet_device"
|
mkResourceVirtualEnvironmentVMTabletDevice = "tablet_device"
|
||||||
mkResourceVirtualEnvironmentVMTemplate = "template"
|
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"
|
mkResourceVirtualEnvironmentVMVGA = "vga"
|
||||||
mkResourceVirtualEnvironmentVMVGAEnabled = "enabled"
|
mkResourceVirtualEnvironmentVMVGAEnabled = "enabled"
|
||||||
mkResourceVirtualEnvironmentVMVGAMemory = "memory"
|
mkResourceVirtualEnvironmentVMVGAMemory = "memory"
|
||||||
@ -945,6 +957,42 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
|
|||||||
ForceNew: true,
|
ForceNew: true,
|
||||||
Default: dvResourceVirtualEnvironmentVMTemplate,
|
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: {
|
mkResourceVirtualEnvironmentVMVGA: {
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Description: "The VGA configuration",
|
Description: "The VGA configuration",
|
||||||
@ -1066,12 +1114,14 @@ func resourceVirtualEnvironmentVMCreateClone(d *schema.ResourceData, m interface
|
|||||||
cloneBody.PoolID = &poolID
|
cloneBody.PoolID = &poolID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cloneTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutClone).(int)
|
||||||
|
|
||||||
if cloneNodeName != "" && cloneNodeName != nodeName {
|
if cloneNodeName != "" && cloneNodeName != nodeName {
|
||||||
cloneBody.TargetNodeName = &nodeName
|
cloneBody.TargetNodeName = &nodeName
|
||||||
|
|
||||||
err = veClient.CloneVM(cloneNodeName, cloneVMID, cloneRetries, cloneBody)
|
err = veClient.CloneVM(cloneNodeName, cloneVMID, cloneRetries, cloneBody, cloneTimeout)
|
||||||
} else {
|
} else {
|
||||||
err = veClient.CloneVM(nodeName, cloneVMID, cloneRetries, cloneBody)
|
err = veClient.CloneVM(nodeName, cloneVMID, cloneRetries, cloneBody, cloneTimeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1414,7 +1464,8 @@ func resourceVirtualEnvironmentVMCreateClone(d *schema.ResourceData, m interface
|
|||||||
}
|
}
|
||||||
|
|
||||||
if dataStoreID != "" {
|
if dataStoreID != "" {
|
||||||
err = veClient.MoveVMDisk(nodeName, vmID, diskMoveBody)
|
moveDiskTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutMoveDisk).(int)
|
||||||
|
err = veClient.MoveVMDisk(nodeName, vmID, diskMoveBody, moveDiskTimeout)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
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.
|
// 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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if reboot {
|
if reboot {
|
||||||
rebootTimeout := 300
|
rebootTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutReboot).(int)
|
||||||
|
|
||||||
err := veClient.RebootVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMRebootRequestBody{
|
err := veClient.RebootVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMRebootRequestBody{
|
||||||
Timeout: &rebootTimeout,
|
Timeout: &rebootTimeout,
|
||||||
})
|
}, (rebootTimeout + 30))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -3515,19 +3567,20 @@ func resourceVirtualEnvironmentVMUpdate(d *schema.ResourceData, m interface{}) e
|
|||||||
|
|
||||||
if d.HasChange(mkResourceVirtualEnvironmentVMStarted) && !bool(template) {
|
if d.HasChange(mkResourceVirtualEnvironmentVMStarted) && !bool(template) {
|
||||||
if started {
|
if started {
|
||||||
err = veClient.StartVM(nodeName, vmID)
|
startVMTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutStartVM).(int)
|
||||||
|
err = veClient.StartVM(nodeName, vmID, startVMTimeout)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
forceStop := proxmox.CustomBool(true)
|
forceStop := proxmox.CustomBool(true)
|
||||||
shutdownTimeout := 300
|
shutdownTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutShutdownVM).(int)
|
||||||
|
|
||||||
err = veClient.ShutdownVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMShutdownRequestBody{
|
err = veClient.ShutdownVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMShutdownRequestBody{
|
||||||
ForceStop: &forceStop,
|
ForceStop: &forceStop,
|
||||||
Timeout: &shutdownTimeout,
|
Timeout: &shutdownTimeout,
|
||||||
})
|
}, (shutdownTimeout + 30))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -3603,12 +3656,12 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(d *schema.ResourceDat
|
|||||||
if len(diskMoveBodies) > 0 || len(diskResizeBodies) > 0 {
|
if len(diskMoveBodies) > 0 || len(diskResizeBodies) > 0 {
|
||||||
if !template {
|
if !template {
|
||||||
forceStop := proxmox.CustomBool(true)
|
forceStop := proxmox.CustomBool(true)
|
||||||
shutdownTimeout := 300
|
shutdownTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutShutdownVM).(int)
|
||||||
|
|
||||||
err = veClient.ShutdownVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMShutdownRequestBody{
|
err = veClient.ShutdownVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMShutdownRequestBody{
|
||||||
ForceStop: &forceStop,
|
ForceStop: &forceStop,
|
||||||
Timeout: &shutdownTimeout,
|
Timeout: &shutdownTimeout,
|
||||||
})
|
}, (shutdownTimeout + 30))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -3619,7 +3672,8 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(d *schema.ResourceDat
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, reqBody := range diskMoveBodies {
|
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 {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -3635,7 +3689,8 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(d *schema.ResourceDat
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (len(diskMoveBodies) > 0 || len(diskResizeBodies) > 0) && started && !template {
|
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 {
|
if err != nil {
|
||||||
return err
|
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.
|
// Perform a regular reboot in case it's necessary and haven't already been done.
|
||||||
if reboot {
|
if reboot {
|
||||||
rebootTimeout := 300
|
rebootTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutReboot).(int)
|
||||||
|
|
||||||
err := veClient.RebootVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMRebootRequestBody{
|
err := veClient.RebootVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMRebootRequestBody{
|
||||||
Timeout: &rebootTimeout,
|
Timeout: &rebootTimeout,
|
||||||
})
|
}, (rebootTimeout + 30))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -3683,12 +3738,12 @@ func resourceVirtualEnvironmentVMDelete(d *schema.ResourceData, m interface{}) e
|
|||||||
|
|
||||||
if status.Status != "stopped" {
|
if status.Status != "stopped" {
|
||||||
forceStop := proxmox.CustomBool(true)
|
forceStop := proxmox.CustomBool(true)
|
||||||
shutdownTimeout := 300
|
shutdownTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutShutdownVM).(int)
|
||||||
|
|
||||||
err = veClient.ShutdownVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMShutdownRequestBody{
|
err = veClient.ShutdownVM(nodeName, vmID, &proxmox.VirtualEnvironmentVMShutdownRequestBody{
|
||||||
ForceStop: &forceStop,
|
ForceStop: &forceStop,
|
||||||
Timeout: &shutdownTimeout,
|
Timeout: &shutdownTimeout,
|
||||||
})
|
}, (shutdownTimeout + 30))
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
Loading…
Reference in New Issue
Block a user