mirror of https://github.com/jimsalterjrs/sanoid
implemented pre pruning script hook
This commit is contained in:
parent
487693993b
commit
44f7cae115
21
sanoid
21
sanoid
|
|
@ -316,6 +316,25 @@ sub prune_snapshots {
|
||||||
if (checklock('sanoid_pruning')) {
|
if (checklock('sanoid_pruning')) {
|
||||||
writelock('sanoid_pruning');
|
writelock('sanoid_pruning');
|
||||||
foreach my $snap( @prunesnaps ){
|
foreach my $snap( @prunesnaps ){
|
||||||
|
my $dataset = (split '@', $snap)[0];
|
||||||
|
my $snapname = (split '@', $snap)[1];
|
||||||
|
|
||||||
|
if (! $args{'readonly'} && $config{$dataset}{'pre_pruning_script'}) {
|
||||||
|
$ENV{'SANOID_TARGET'} = $dataset;
|
||||||
|
$ENV{'SANOID_SNAPNAME'} = $snapname;
|
||||||
|
if ($args{'verbose'}) { print "executing pre_pruning_script '".$config{$dataset}{'pre_pruning_script'}."' on dataset '$dataset'\n"; }
|
||||||
|
my $ret = runscript('pre_pruning_script', $dataset);
|
||||||
|
|
||||||
|
delete $ENV{'SANOID_TARGET'};
|
||||||
|
delete $ENV{'SANOID_SNAPNAME'};
|
||||||
|
|
||||||
|
if ($ret != 0) {
|
||||||
|
# warning was already thrown by runscript function
|
||||||
|
# skip pruning if pre snapshot script returns non zero exit code
|
||||||
|
next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($args{'verbose'}) { print "INFO: pruning $snap ... \n"; }
|
if ($args{'verbose'}) { print "INFO: pruning $snap ... \n"; }
|
||||||
if (!$args{'force-prune'} && iszfsbusy($path)) {
|
if (!$args{'force-prune'} && iszfsbusy($path)) {
|
||||||
if ($args{'verbose'}) { print "INFO: deferring pruning of $snap - $path is currently in zfs send or receive.\n"; }
|
if ($args{'verbose'}) { print "INFO: deferring pruning of $snap - $path is currently in zfs send or receive.\n"; }
|
||||||
|
|
@ -323,8 +342,6 @@ sub prune_snapshots {
|
||||||
if (! $args{'readonly'}) {
|
if (! $args{'readonly'}) {
|
||||||
if (system($zfs, "destroy", $snap) == 0) {
|
if (system($zfs, "destroy", $snap) == 0) {
|
||||||
$pruned{$snap} = 1;
|
$pruned{$snap} = 1;
|
||||||
my $dataset = (split '@', $snap)[0];
|
|
||||||
my $snapname = (split '@', $snap)[1];
|
|
||||||
if ($config{$dataset}{'pruning_script'}) {
|
if ($config{$dataset}{'pruning_script'}) {
|
||||||
$ENV{'SANOID_TARGET'} = $dataset;
|
$ENV{'SANOID_TARGET'} = $dataset;
|
||||||
$ENV{'SANOID_SNAPNAME'} = $snapname;
|
$ENV{'SANOID_SNAPNAME'} = $snapname;
|
||||||
|
|
|
||||||
|
|
@ -97,6 +97,8 @@
|
||||||
pre_snapshot_script = /path/to/script.sh
|
pre_snapshot_script = /path/to/script.sh
|
||||||
### run script after snapshot
|
### run script after snapshot
|
||||||
post_snapshot_script = /path/to/script.sh
|
post_snapshot_script = /path/to/script.sh
|
||||||
|
### run script before pruning snapshot
|
||||||
|
pre_pruning_script = /path/to/script.sh
|
||||||
### run script after pruning snapshot
|
### run script after pruning snapshot
|
||||||
pruning_script = /path/to/script.sh
|
pruning_script = /path/to/script.sh
|
||||||
### don't take an inconsistent snapshot (skip if pre script fails)
|
### don't take an inconsistent snapshot (skip if pre script fails)
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,7 @@ skip_children =
|
||||||
|
|
||||||
pre_snapshot_script =
|
pre_snapshot_script =
|
||||||
post_snapshot_script =
|
post_snapshot_script =
|
||||||
|
pre_pruning_script =
|
||||||
pruning_script =
|
pruning_script =
|
||||||
script_timeout = 5
|
script_timeout = 5
|
||||||
no_inconsistent_snapshot =
|
no_inconsistent_snapshot =
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue