Skip to content

Commit 239b5fa

Browse files
committed
Implement --{pre,post}-send option for the snapshot replication.
1 parent 3b0e383 commit 239b5fa

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

src/zfs-auto-snapshot.8

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,16 @@ aborted.
8080
Command to run after each dataset is snapshotted.
8181
It is passed the dataset and snapshot name.
8282
.TP
83+
\fB\-\-pre-send\fR=\fICOMMAND\fR
84+
Command to run before each snapshot is sent to
85+
remote host. It is passed the snapshot name. If
86+
it returns non-zero, sending this dataset is
87+
aborted.
88+
.TP
89+
\fB\-\-post-send\fR=\fICOMMAND\fR
90+
Command to run after each snapshot have been sent.
91+
It is passed the snapshot name.
92+
.TP
8393
\fB\-\-destroy-only\fR
8494
Do not create new snapshots, but do destroy older
8595
snapshots. Has no effect unless used with \fB\-k\fR.

src/zfs-auto-snapshot.sh

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ opt_skip_scrub=''
4646
opt_verbose=''
4747
opt_pre_snapshot=''
4848
opt_post_snapshot=''
49+
opt_pre_send=''
50+
opt_post_send=''
4951
opt_do_snapshots=1
5052

5153
# Global summary statistics.
@@ -275,6 +277,7 @@ do_send () # snapname, oldglob
275277
{
276278
local NAME="$1"
277279
local GLOB="$2"
280+
local RUNSEND=1
278281
local remote="ssh $opt_send_host zfs receive $opt_recv_opts $opt_recv_pool"
279282
local ii
280283
local jj
@@ -291,10 +294,20 @@ do_send () # snapname, oldglob
291294
# STEP 3: Go through all snapshots that is to be transfered and send them.
292295
for jj in $SNAPS_SEND
293296
do
294-
if [ "$opt_send_type" = "incr" ]; then
295-
do_run "zfs send $opt_send_opts -i $jj $ii | $remote"
296-
else
297-
do_run "zfs send $opt_send_opts -R $jj | $remote"
297+
if [ -n "$opt_pre_send" ]; then
298+
do_run "$opt_pre_send $jj" || RUNSEND=0
299+
fi
300+
301+
if [ $RUNSEND -eq 1 ]; then
302+
if [ "$opt_send_type" = "incr" ]; then
303+
do_run "zfs send $opt_send_opts -i $jj $ii | $remote" || RUNSEND=0
304+
else
305+
do_run "zfs send $opt_send_opts -R $jj | $remote" || RUNSEND=0
306+
fi
307+
308+
if [ $RUNSEND = 1 -a -n "$opt_post_send" ]; then
309+
do_run "$opt_post_send $jj" || RUNSEND=0
310+
fi
298311
fi
299312
done
300313
done
@@ -309,6 +322,7 @@ GETOPT=$(getopt \
309322
--longoptions=debug,help,quiet,syslog,verbose \
310323
--longoptions=pre-snapshot:,post-snapshot:,destroy-only \
311324
--longoptions=send-full:,send-incr:,send-opts:,recv-opts: \
325+
--longoptions=pre-send:,post-send: \
312326
--options=dnshe:l:k:p:rs:qgv \
313327
-- "$@" ) \
314328
|| exit 128
@@ -451,6 +465,14 @@ do
451465
opt_post_snapshot="$2"
452466
shift 2
453467
;;
468+
(--pre-send)
469+
opt_pre_send="$2"
470+
shift 2
471+
;;
472+
(--post-send)
473+
opt_post_send="$2"
474+
shift 2
475+
;;
454476
(--destroy-only)
455477
opt_do_snapshots=''
456478
shift 1

0 commit comments

Comments
 (0)