[pve-devel] [PATCH 3/5] resize disk : allow resize pending disk
Alexandre Derumier
aderumier at odiso.com
Mon Dec 29 14:30:43 CET 2014
Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
PVE/API2/Qemu.pm | 18 ++++++++++++++----
PVE/QemuServer.pm | 4 ++--
2 files changed, 16 insertions(+), 6 deletions(-)
diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 4467837..6acef08 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -2752,9 +2752,15 @@ __PACKAGE__->register_method({
if $digest && $digest ne $conf->{digest};
PVE::QemuServer::check_lock($conf) if !$skiplock;
- die "disk '$disk' does not exist\n" if !$conf->{$disk};
+ die "disk '$disk' does not exist\n" if !$conf->{$disk} && !$conf->{pending}->{$disk};
+
+ my $drive = undef;
- my $drive = PVE::QemuServer::parse_drive($disk, $conf->{$disk});
+ if($conf->{pending}->{$disk}) {
+ $drive = PVE::QemuServer::parse_drive($disk, $conf->{pending}->{$disk});
+ } else {
+ $drive = PVE::QemuServer::parse_drive($disk, $conf->{$disk});
+ }
my $volid = $drive->{file};
@@ -2790,11 +2796,15 @@ __PACKAGE__->register_method({
PVE::Cluster::log_msg('info', $authuser, "update VM $vmid: resize --disk $disk --size $sizestr");
- PVE::QemuServer::qemu_block_resize($vmid, "drive-$disk", $storecfg, $volid, $newsize);
+ PVE::QemuServer::qemu_block_resize($vmid, "drive-$disk", $storecfg, $volid, $newsize, $conf->{pending}->{$disk});
$drive->{size} = $newsize;
- $conf->{$disk} = PVE::QemuServer::print_drive($vmid, $drive);
+ if ($conf->{pending}->{$disk}) {
+ $conf->{pending}->{$disk} = PVE::QemuServer::print_drive($vmid, $drive);
+ } else {
+ $conf->{$disk} = PVE::QemuServer::print_drive($vmid, $drive);
+ }
PVE::QemuServer::update_config_nolock($vmid, $conf, 1);
};
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 1d85ac8..67e3015 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -3416,13 +3416,13 @@ sub vm_monitor_command {
}
sub qemu_block_resize {
- my ($vmid, $deviceid, $storecfg, $volid, $size) = @_;
+ my ($vmid, $deviceid, $storecfg, $volid, $size, $pending) = @_;
my $running = check_running($vmid);
return if !PVE::Storage::volume_resize($storecfg, $volid, $size, $running);
- return if !$running;
+ return if !$running || $pending;
vm_mon_cmd($vmid, "block_resize", device => $deviceid, size => int($size));
--
1.7.10.4
More information about the pve-devel
mailing list