]> git.proxmox.com Git - pve-container.git/commitdiff
Add delsnap functionality
authorWolfgang Link <w.link@proxmox.com>
Fri, 17 Jul 2015 07:26:47 +0000 (09:26 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Thu, 23 Jul 2015 10:18:35 +0000 (12:18 +0200)
Signed-off-by: Wolfgang Link <w.link@proxmox.com>
src/PVE/LXC.pm

index 0115b0aa6c7ad237448a0160a18bfebef9962bb0..a70512b668fb5aa7d9120f77609a8e604c93c652 100644 (file)
@@ -1545,7 +1545,7 @@ sub snapshot_create {
        &$snapshot_commit($vmid, $snapname);
     };
     if(my $err = $@) {
-       #ToDo implement delete snapshot
+       snapshot_delete($vmid, $snapname, 1);
        die "$err\n";
     }
 }
@@ -1553,7 +1553,59 @@ sub snapshot_create {
 sub snapshot_delete {
     my ($vmid, $snapname, $force) = @_;
 
-    print "Not implemented\n";
+    my $snap;
+
+    my $conf;
+
+    my $updatefn =  sub {
+
+       $conf = load_config($vmid);
+
+       $snap = $conf->{snapshots}->{$snapname};
+
+       check_lock($conf);
+
+       die "snapshot '$snapname' does not exist\n" if !defined($snap);
+
+       $snap->{'pve.snapstate'} = 'delete';
+
+       PVE::LXC::write_config($vmid, $conf);
+    };
+
+    lock_container($vmid, 10, $updatefn);
+
+    my $storecfg = PVE::Storage::config();
+
+    my $del_snap =  sub {
+
+       check_lock($conf);
+
+       if ($conf->{'pve.parent'} eq $snapname) {
+           if ($conf->{snapshots}->{$snapname}->{'pve.snapname'}) {
+               $conf->{'pve.parent'} = $conf->{snapshots}->{$snapname}->{'pve.parent'};
+           } else {
+               delete $conf->{'pve.parent'};
+           }
+       }
+
+       delete $conf->{snapshots}->{$snapname};
+
+       PVE::LXC::write_config($vmid, $conf);
+    };
+
+    my $volid = $conf->{snapshots}->{$snapname}->{'pve.volid'};
+
+    eval {
+       PVE::Storage::volume_snapshot_delete($storecfg, $volid, $snapname);
+    };
+    my $err = $@;
+
+    if(!$err || ($err && $force)) {
+       lock_container($vmid, 10, $del_snap);
+       if ($err) {
+           die "Can't delete snapshot: $vmid $snapname $err\n";
+       }
+    }
 }
 
 1;