]> git.proxmox.com Git - qemu-server.git/commitdiff
add sub has_feature
authorAlexandre Derumier <aderumier@odiso.com>
Thu, 27 Dec 2012 15:06:54 +0000 (16:06 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 28 Dec 2012 06:48:33 +0000 (07:48 +0100)
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>
PVE/QemuServer.pm

index 92c7db79fd4639b764a2c8162cf7f9ea168ab6b7..203467652e42f172af535f3d205020a84966fbba 100644 (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;