mirror of
https://git.proxmox.com/git/qemu-server
synced 2026-01-28 11:44:57 +00:00
get_replicatable_volumes: replacemnet for PVE::ReplicationTools::get_syncable_guestdisks()
correctly scan for volumes inside snapshots. This will also solve the cyclic package dependency propblem.
This commit is contained in:
parent
8557d01f75
commit
0342b45bee
@ -24,7 +24,6 @@ use PVE::INotify;
|
||||
use PVE::Network;
|
||||
use PVE::Firewall;
|
||||
use PVE::API2::Firewall::VM;
|
||||
use PVE::ReplicationTools;
|
||||
|
||||
BEGIN {
|
||||
if (!$ENV{PVE_GENERATING_DOCS}) {
|
||||
@ -1052,8 +1051,8 @@ my $update_vm_api = sub {
|
||||
|
||||
&$create_disks($rpcenv, $authuser, $conf->{pending}, $storecfg, $vmid, undef, {$opt => $param->{$opt}});
|
||||
} elsif ($opt eq "replicate") {
|
||||
die "Not all volumes are syncable, please check your config\n"
|
||||
if !PVE::ReplicationTools::check_guest_volumes_syncable($conf, 'qemu');
|
||||
# check if all volumes have replicate feature
|
||||
PVE::QemuServer::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};
|
||||
|
||||
@ -2776,6 +2776,45 @@ 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) = @_;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user