Created
October 18, 2018 20:10
-
-
Save DanielBodnar/1d2d97459ff5765427904b93fe85ceda to your computer and use it in GitHub Desktop.
Perl script that uploads backup files to cloud storage using rclone, removes backups older then 1 week.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl -w | |
# example hook script for vzdump (--script option) | |
use strict; | |
print "HOOK: " . join (' ', @ARGV) . "\n"; | |
my $phase = shift; | |
if ($phase eq 'job-start' || | |
$phase eq 'job-end' || | |
$phase eq 'job-abort') { | |
my $dumpdir = $ENV{DUMPDIR}; | |
my $storeid = $ENV{STOREID}; | |
print "HOOK-ENV: dumpdir=$dumpdir;storeid=$storeid\n"; | |
if ($phase eq 'job-end') { | |
system ("rclone delete --config /root/.config/rclone/rclone.conf --min-age 1w -v -v googlecrypt:dump/") == 0 || | |
die "Deleting old backups failed"; | |
} | |
} elsif ($phase eq 'backup-start' || | |
$phase eq 'backup-end' || | |
$phase eq 'backup-abort' || | |
$phase eq 'log-end' || | |
$phase eq 'pre-stop' || | |
$phase eq 'pre-restart' || | |
$phase eq 'post-restart') { | |
my $mode = shift; # stop/suspend/snapshot | |
my $vmid = shift; | |
my $vmtype = $ENV{VMTYPE}; # lxc/qemu | |
my $dumpdir = $ENV{DUMPDIR}; | |
my $storeid = $ENV{STOREID}; | |
my $hostname = $ENV{HOSTNAME}; | |
# tarfile is only available in phase 'backup-end' | |
my $tarfile = $ENV{TARFILE}; | |
# logfile is only available in phase 'log-end' | |
my $logfile = $ENV{LOGFILE}; | |
print "HOOK-ENV: vmtype=$vmtype;dumpdir=$dumpdir;storeid=$storeid;hostname=$hostname;tarfile=$tarfile;logfile=$logfile\n"; | |
# example: copy resulting backup file to another host using scp | |
if ($phase eq 'backup-end') { | |
system ("rclone move -v --config /root/.config/rclone/rclone.conf $tarfile googlecrypt:/dump") == 0 || | |
die "move tar file to backup-host failed"; | |
} | |
# example: copy resulting log file to another host using scp | |
if ($phase eq 'log-end') { | |
system ("rclone copy --config /root/.config/rclone/rclone.conf $logfile googlecrypt:/dump") == 0 || | |
die "copy log file to backup-host failed"; | |
} | |
} else { | |
die "got unknown phase '$phase'"; | |
} | |
exit (0); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment