move get_replicatable_volumes from QemuServer.pm to QemuConfig.pm

This commit is contained in:
Dietmar Maurer 2017-05-06 17:13:31 +02:00
parent 64932aebff
commit 3aa44d3b57
3 changed files with 41 additions and 41 deletions

View File

@ -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};

View File

@ -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) = @_;

View File

@ -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) = @_;