[pve-devel] [PATCH 1/2] add sub has_feature

Alexandre Derumier aderumier at odiso.com
Thu Dec 27 16:06:54 CET 2012


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 at odiso.com>
---
 PVE/QemuServer.pm |   37 +++++++++++++++----------------------
 1 file changed, 15 insertions(+), 22 deletions(-)

diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 92c7db7..2034676 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -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;
-- 
1.7.10.4




More information about the pve-devel mailing list