#!@PERL@
-# Copyright (c) 2008,2009 Zmanda, Inc. All Rights Reserved.
+# Copyright (c) 2008, 2009, 2010 Zmanda, Inc. All Rights Reserved.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 as published
use lib '@amperldir@';
use strict;
+use warnings;
use Getopt::Long;
package Amanda::Application::Amzfs_sendrecv;
print "HOST YES\n";
print "DISK YES\n";
print "MAX-LEVEL 9\n";
- print "INDEX-LINE NO\n";
+ print "INDEX-LINE YES\n";
print "INDEX-XML NO\n";
print "MESSAGE-LINE YES\n";
print "MESSAGE-XML NO\n";
sub command_backup {
my $self = shift;
- my $mesgout_fd;
- open($mesgout_fd, '>&=3') ||
- $self->print_to_server_and_die("Can't open mesgout_fd: $!",
- $Amanda::Script_App::ERROR);
- $self->{mesgout} = $mesgout_fd;
-
if ($#{$self->{include_list}} >= 0) {
$self->print_to_server("include-list not supported for backup",
$Amanda::Script_App::ERROR);
my $refsnapshotname = $self->zfs_find_snapshot_level($level-1);
debug "Referenced snapshot name: $refsnapshotname|";
if ($refsnapshotname ne "") {
- $cmd = "$self->{pfexec_cmd} $self->{zfs_path} send -i $refsnapshotname $self->{filesystem}\@$self->{snapshot} | $Amanda::Paths::amlibexecdir/teecount";
+ $cmd = "$self->{pfexec_cmd} $self->{zfs_path} send -i $self->{filesystem}\@$refsnapshotname $self->{filesystem}\@$self->{snapshot} | $Amanda::Paths::amlibexecdir/teecount";
} else {
$self->print_to_server_and_die("cannot backup snapshot '$self->{filesystem}\@$self->{snapshot}': reference snapshot doesn't exists for level $level", $Amanda::Script_App::ERROR);
}
$err = Symbol::gensym;
$pid = open3($wtr, '>&STDOUT', $err, $cmd);
close $wtr;
+
+ if (defined($self->{index})) {
+ my $indexout;
+ open($indexout, '>&=4') ||
+ $self->print_to_server_and_die("Can't open indexout: $!",
+ $Amanda::Script_App::ERROR);
+ print $indexout "/\n";
+ close($indexout);
+ }
+
$errmsg = <$err>;
waitpid $pid, 0;
close $err;
my($ksize) = int ($size/1024);
$ksize=32 if ($ksize<32);
- print $mesgout_fd "sendbackup: size $ksize\n";
- print $mesgout_fd "sendbackup: end\n";
+ print {$self->{mesgout}} "sendbackup: size $ksize\n";
+ print {$self->{mesgout}} "sendbackup: end\n";
# destroy all snapshot of this level and higher
$self->zfs_purge_snapshot($level, 9);
sub command_index_from_image {
}
-#sub command_restore {
-# my $self = shift;
-#
-#TODO
-#}
+sub command_restore {
+ my $self = shift;
+
+ my $level = $self->{level}[0];
+ my $device = $self->{device};
+ $device = $self->{directory} if defined $self->{directory};
+ $device =~ s,^/,,;
+ my $current_snapshot = $self->zfs_build_snapshotname($device);
+ $self->{'snapshot'} = $self->zfs_build_snapshotname($device, $level);
+
+ my @cmd = ();
+
+ if ($self->{pfexec_cmd}) {
+ push @cmd, $self->{pfexec_cmd};
+ }
+ push @cmd, $self->{zfs_path};
+ push @cmd, "recv";
+ push @cmd, $device;
+
+ debug("cmd:" . join(" ", @cmd));
+ system @cmd;
+
+ @cmd = ();
+ if ($self->{pfexec_cmd}) {
+ push @cmd, $self->{pfexec_cmd};
+ }
+ push @cmd, $self->{zfs_path};
+ push @cmd, "rename";
+ push @cmd, "$device\@$current_snapshot";
+ push @cmd, "$device\@$self->{'snapshot'}";
+
+ debug("cmd:" . join(" ", @cmd));
+ system @cmd;
+}
sub command_print_command {
}