From 3cb217030a0aa2147a57a39737772216794dd01f Mon Sep 17 00:00:00 2001 From: Alexandre Derumier Date: Wed, 31 Oct 2012 12:28:37 +0100 Subject: [PATCH] sheepdog : delete snapshots when deleting volume sheepdog don't delete snapshots automatically when deleting volume Signed-off-by: Alexandre Derumier --- PVE/Storage/SheepdogPlugin.pm | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/PVE/Storage/SheepdogPlugin.pm b/PVE/Storage/SheepdogPlugin.pm index 346a2f2..5aff893 100644 --- a/PVE/Storage/SheepdogPlugin.pm +++ b/PVE/Storage/SheepdogPlugin.pm @@ -48,6 +48,23 @@ sub sheepdog_ls { return $list; } +sub sheepdog_snapshot_ls { + my ($scfg, $volname) = @_; + + my $cmd = &$collie_cmd($scfg, 'vdi', 'list', '-r'); + + my $list = {}; + run_command($cmd, outfunc => sub { + my $line = shift; + $line = trim($line); + if ($line =~ /s\s(\S+)\s(\d+)\s(\d+)\s(\d+)\s(\d+)\s(\d+)\s(\S+)\s(\d+)\s(\S+)/) { + $list->{$9} = 1; + } + }); + + return $list; +} + # Configuration @@ -129,6 +146,12 @@ sub alloc_image { sub free_image { my ($class, $storeid, $scfg, $volname) = @_; + my $snapshots = sheepdog_snapshot_ls($scfg, $volname); + while (my ($snapname) = each %$snapshots) { + my $cmd = &$collie_cmd($scfg, 'vdi', 'delete' , '-s', $snapname, $volname); + run_command($cmd, errmsg => "sheepdog delete snapshot $snapname $volname' error"); + } + my $cmd = &$collie_cmd($scfg, 'vdi', 'delete' , $volname); run_command($cmd, errmsg => "sheepdog delete $volname' error");