Include new storage function volume_send.

If the storage backend support import and export
we can send the contend to a remote host.
This commit is contained in:
Wolfgang Link
2017-04-24 17:15:26 +02:00
committed by Wolfgang Bumiller
parent d412b98df8
commit b76774e57f
4 changed files with 81 additions and 0 deletions

View File

@ -465,6 +465,54 @@ sub volume_snapshot {
$class->zfs_request($scfg, undef, 'snapshot', "$scfg->{pool}/$vname\@$snap");
}
sub volume_send {
my ($class, $scfg, $storeid, $volname, $ip, $snap,
$incremental_snap, $verbose, $limit, $target_path) = @_;
my ($vtype, $name, $vmid) = $class->parse_volname($volname);
my $zpath = "$scfg->{pool}/$name";
die "$vtype is not allowed in ZFSPool!" if ($vtype ne "images");
my $cmdsend = [];
my $cmdlimit = [];
push @$cmdsend, 'zfs', 'send', '-R';
push @$cmdsend, '-v' if defined($verbose);
if( defined($incremental_snap)) {
push @$cmdsend, '-I', "$zpath\@${incremental_snap}";
}
push @$cmdsend, '--', "$zpath\@${snap}";
# limit in kByte/s
if ($limit){
my $bwl = $limit * 1024;
push @$cmdlimit, 'cstream', '-t', $bwl;
}
my $cmdrecv = [];
push @$cmdrecv, 'ssh', '-o', 'BatchMode=yes', "root\@${ip}", '--' if $ip;
push @$cmdrecv, 'zfs', 'recv', '-F', '--';
$zpath = $target_path if defined($target_path);
push @$cmdrecv, $zpath;
if ($limit) {
eval { run_command([$cmdsend, $cmdlimit, $cmdrecv]) };
} else {
eval { run_command([$cmdsend, $cmdrecv]) };
}
if (my $err = $@) {
die $err;
}
}
sub volume_snapshot_delete {
my ($class, $scfg, $storeid, $volname, $snap, $running) = @_;