#!# perl: deploy/code/m.sync
use strict;
use File::Spec;
use Sys::Hostname;
use Data::Dumper;
use MYDan::Agent::Client;
use MYDan::Node;
use MYDan::Agent::Mrsync;
my ( $conf, $port );
BEGIN{
my %agent = MYDan::Util::OptConf->load()->dump('agent');
( $conf, $port ) = @agent{qw( conf port )};
};
my %run = ( timeout => 86400, max => 500, user => 'root' );
return sub
{
my %param = @_;
my ( $batch, $param ) = @param{qw( batch param )};
my $range = MYDan::Node->new( MYDan::Util::OptConf->load()->dump('range') );
my ( $sp, $dp ) = @$param{qw(sp dp)};
die "sp and dp undef.\n" if !$sp && !$dp;
$sp = $dp unless $sp;
$dp = $sp unless $dp;
my $mrsync = MYDan::Agent::Mrsync->new ( sp => $sp, dp => $dp, dst => $batch,
src => [ $range->load( $param->{src} || hostname() )->list ]
);
my %succ = map{ $_ => 'sync ok' }@$batch;
map{ delete $succ{$_} }my @failed = $mrsync->run( %run, %$param )->failed();
printf "failed [%s]:%s\n", scalar @failed, $range->load( \@failed )->dump();
print "=" x 30,"\n";
return %succ;
};