mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-01 19:12:59 +00:00
Avoid reboot when resizing disks. (#104)
There is no need to shutdown VM before resizing disks. In addition to boot time, system in VM can be configured to resize partitions and filesystems in response to udev events. Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
This commit is contained in:
parent
e5e2e36cc1
commit
752f2ea565
@ -3463,8 +3463,6 @@ func resourceVirtualEnvironmentVMUpdate(ctx context.Context, d *schema.ResourceD
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rebootRequired = true
|
||||
}
|
||||
|
||||
// Prepare the new cloud-init configuration.
|
||||
@ -3655,6 +3653,8 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(ctx context.Context,
|
||||
var diskMoveBodies []*proxmox.VirtualEnvironmentVMMoveDiskRequestBody
|
||||
var diskResizeBodies []*proxmox.VirtualEnvironmentVMResizeDiskRequestBody
|
||||
|
||||
var shutdownForDisksRequired bool = false
|
||||
|
||||
for prefix, diskMap := range diskOldEntries {
|
||||
for oldKey, oldDisk := range diskMap {
|
||||
if _, present := diskNewEntries[prefix][oldKey]; !present {
|
||||
@ -3669,6 +3669,9 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(ctx context.Context,
|
||||
Disk: *oldDisk.Interface,
|
||||
TargetStorage: *diskNewEntries[prefix][oldKey].ID,
|
||||
})
|
||||
|
||||
// Cannot be done while VM is running.
|
||||
shutdownForDisksRequired = true
|
||||
}
|
||||
|
||||
if *oldDisk.SizeInt <= *diskNewEntries[prefix][oldKey].SizeInt {
|
||||
@ -3680,21 +3683,17 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(ctx context.Context,
|
||||
}
|
||||
}
|
||||
|
||||
if len(diskMoveBodies) > 0 || len(diskResizeBodies) > 0 {
|
||||
if !template {
|
||||
forceStop := proxmox.CustomBool(true)
|
||||
shutdownTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutShutdownVM).(int)
|
||||
if shutdownForDisksRequired && !template {
|
||||
forceStop := proxmox.CustomBool(true)
|
||||
shutdownTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutShutdownVM).(int)
|
||||
|
||||
err = veClient.ShutdownVM(ctx, nodeName, vmID, &proxmox.VirtualEnvironmentVMShutdownRequestBody{
|
||||
ForceStop: &forceStop,
|
||||
Timeout: &shutdownTimeout,
|
||||
}, shutdownTimeout+30)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
err = veClient.ShutdownVM(ctx, nodeName, vmID, &proxmox.VirtualEnvironmentVMShutdownRequestBody{
|
||||
ForceStop: &forceStop,
|
||||
Timeout: &shutdownTimeout,
|
||||
}, shutdownTimeout+30)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
|
||||
reboot = false
|
||||
}
|
||||
|
||||
for _, reqBody := range diskMoveBodies {
|
||||
@ -3712,12 +3711,15 @@ func resourceVirtualEnvironmentVMUpdateDiskLocationAndSize(ctx context.Context,
|
||||
}
|
||||
}
|
||||
|
||||
if (len(diskMoveBodies) > 0 || len(diskResizeBodies) > 0) && started && !template {
|
||||
if shutdownForDisksRequired && started && !template {
|
||||
startVMTimeout := d.Get(mkResourceVirtualEnvironmentVMTimeoutStartVM).(int)
|
||||
err = veClient.StartVM(ctx, nodeName, vmID, startVMTimeout)
|
||||
if err != nil {
|
||||
return diag.FromErr(err)
|
||||
}
|
||||
|
||||
// This concludes an equivalent of a reboot, avoid doing another.
|
||||
reboot = false
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user