5
0
mirror of git://git.proxmox.com/git/qemu-server.git synced 2025-01-25 06:03:52 +03:00

add sub has_feature

loop over each disk of the vm config file to find if feature is available.

If one of the disk doesn't have the feature, we return undef, else return 1

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
This commit is contained in:
Alexandre Derumier 2012-12-27 16:06:54 +01:00 committed by Dietmar Maurer
parent 135007c099
commit 7ea975efe0

View File

@ -4059,28 +4059,7 @@ my $snapshot_prepare = sub {
if defined($conf->{snapshots}->{$snapname});
my $storecfg = PVE::Storage::config();
foreach_drive($conf, sub {
my ($ds, $drive) = @_;
return if drive_is_cdrom($drive);
my $volid = $drive->{file};
my ($storeid, $volname) = PVE::Storage::parse_volume_id($volid, 1);
if ($storeid) {
my $scfg = PVE::Storage::storage_config($storecfg, $storeid);
die "can't snapshot volume '$volid'\n"
if !(($scfg->{path} && $volname =~ m/\.qcow2$/) ||
($scfg->{type} eq 'nexenta') ||
($scfg->{type} eq 'rbd') ||
($scfg->{type} eq 'sheepdog'));
} elsif ($volid =~ m|^(/.+)$| && -e $volid) {
die "snapshot device '$volid' is not possible\n";
} else {
die "can't snapshot volume '$volid'\n";
}
});
die "snapshot feature is not available" if !has_feature('snapshot', $conf, $storecfg);
$snap = $conf->{snapshots}->{$snapname} = {};
@ -4380,4 +4359,18 @@ sub snapshot_delete {
lock_config($vmid, $updatefn);
}
sub has_feature{
my ($feature, $conf, $storecfg, $snapname, $running) = @_;
my $err = undef;
foreach_drive($conf, sub {
my ($ds, $drive) = @_;
return if drive_is_cdrom($drive);
my $volid = $drive->{file};
$err = 1 if !PVE::Storage::volume_has_feature($storecfg, $feature, $volid, $snapname, $running);
});
return 1 if !$err;
}
1;