From: Dietmar Maurer Date: Sat, 6 May 2017 15:13:31 +0000 (+0200) Subject: move get_replicatable_volumes from QemuServer.pm to QemuConfig.pm X-Git-Url: https://git.proxmox.com/?p=qemu-server.git;a=commitdiff_plain;h=3aa44d3b5796e18cc0774833dd2bf8ad90fdfe8d move get_replicatable_volumes from QemuServer.pm to QemuConfig.pm --- diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index db1de34..5051727 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -1055,7 +1055,7 @@ my $update_vm_api = sub { &$create_disks($rpcenv, $authuser, $conf->{pending}, $storecfg, $vmid, undef, {$opt => $param->{$opt}}); } elsif ($opt eq "replicate") { # check if all volumes have replicate feature - PVE::QemuServer::get_replicatable_volumes($storecfg, $conf); + PVE::QemuConfig->get_replicatable_volumes($storecfg, $conf); my $repl = PVE::JSONSchema::check_format('pve-replicate', $param->{opt}); PVE::Cluster::check_node_exists($repl->{target}); $conf->{$opt} = $param->{$opt}; diff --git a/PVE/QemuConfig.pm b/PVE/QemuConfig.pm index 692bba8..a2bc4fc 100644 --- a/PVE/QemuConfig.pm +++ b/PVE/QemuConfig.pm @@ -29,7 +29,7 @@ sub guest_type { } sub __config_max_unused_disks { - my ($class) =@_; + my ($class) = @_; return $MAX_UNUSED_DISKS; } @@ -63,6 +63,45 @@ sub has_feature { return $err ? 0 : 1; } +sub get_replicatable_volumes { + my ($class, $storecfg, $conf, $noerr) = @_; + + my $volhash = {}; + + my $test_volid = sub { + my ($volid, $drive) = @_; + + return if !$volid; + + return if PVE::QemuServer::drive_is_cdrom($drive); + + return if defined($drive->{replicate}) && !$drive->{replicate}; + + if (!PVE::Storage::volume_has_feature($storecfg, 'replicate', $volid)) { + return if $noerr; + die "missing replicate feature on volume '$volid'\n"; + } + + $volhash->{$volid} = 1; + }; + + PVE::QemuServer::foreach_drive($conf, sub { + my ($ds, $drive) = @_; + $test_volid->($drive->{file}, $drive); + }); + + foreach my $snapname (keys %{$conf->{snapshots}}) { + my $snap = $conf->{snapshots}->{$snapname}; + # fixme: what about $snap->{vmstate} + PVE::QemuServer::foreach_drive($snap, sub { + my ($ds, $drive) = @_; + $test_volid->($drive->{file}, $drive); + }); + } + + return $volhash; +} + sub __snapshot_save_vmstate { my ($class, $vmid, $conf, $snapname, $storecfg) = @_; diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 08ac940..2fb419d 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -2776,45 +2776,6 @@ sub foreach_volid { } } -sub get_replicatable_volumes { - my ($storecfg, $conf, $noerr) = @_; - - my $volhash = {}; - - my $test_volid = sub { - my ($volid, $drive) = @_; - - return if !$volid; - - return if drive_is_cdrom($drive); - - return if defined($drive->{replicate}) && !$drive->{replicate}; - - if (!PVE::Storage::volume_has_feature($storecfg, 'replicate', $volid)) { - return if $noerr; - die "missing replicate feature on volume '$volid'\n"; - } - - $volhash->{$volid} = 1; - }; - - foreach_drive($conf, sub { - my ($ds, $drive) = @_; - $test_volid->($drive->{file}, $drive); - }); - - foreach my $snapname (keys %{$conf->{snapshots}}) { - my $snap = $conf->{snapshots}->{$snapname}; - # fixme: what about $snap->{vmstate} - foreach_drive($snap, sub { - my ($ds, $drive) = @_; - $test_volid->($drive->{file}, $drive); - }); - } - - return $volhash; -} - sub vga_conf_has_spice { my ($vga) = @_;