App-nrun
view release on metacpan or search on metacpan
lib/NRun/Workers/WorkerSsh.pm view on Meta::CPAN
# Timo Benk : 2013-06-13 20:32:17 +0200 : using __PACKAGE__ is less error-prone
# Timo Benk : 2013-06-21 09:44:13 +0200 : reverse copy support added
#
###
# this worker implements ssh based remote execution
###
package NRun::Worker::WorkerSsh;
use strict;
use warnings;
use File::Basename;
use NRun::Worker;
use POSIX qw(getuid);
our @ISA = qw(NRun::Worker);
BEGIN {
NRun::Worker::register ( {
'MODE' => "ssh",
'DESC' => "ssh based remote execution",
'NAME' => __PACKAGE__,
} );
}
###
# create a new object.
#
# <- the new object
sub new {
my $_pkg = shift;
my $_cfg = shift;
my $self = {};
bless $self, $_pkg;
return $self;
}
###
# initialize this worker module.
#
# $_cfg - parameter hash where
# {
# 'hostname' - hostname this worker should act on
# 'ssh_rcopy' - commandline for the rcopy command (SOURCE, TARGET, HOSTNAME will be replaced)
# 'ssh_copy' - commandline for the copy command (SOURCE, TARGET, HOSTNAME will be replaced)
# 'ssh_exec' - commandline for the exec command (COMMAND, ARGUMENTS, HOSTNAME will be replaced)
# 'ssh_delete' - commandline for the delete command (FILE, HOSTNAME will be replaced)
# }
sub init {
my $_self = shift;
my $_cfg = shift;
$_self->SUPER::init($_cfg);
$_self->{ssh_rcopy} = $_cfg->{ssh_rcopy};
$_self->{ssh_copy} = $_cfg->{ssh_copy};
$_self->{ssh_exec} = $_cfg->{ssh_exec};
$_self->{ssh_delete} = $_cfg->{ssh_delete};
}
###
# copy a file to $_self->{hostname}.
#
# $_source - source file to be copied
# $_target - destination $_source should be copied to
# <- the return code
sub copy {
my $_self = shift;
my $_source = shift;
my $_target = shift;
my $cmdline = $_self->{ssh_copy};
$cmdline =~ s/SOURCE/$_source/g;
$cmdline =~ s/TARGET/$_target/g;
$cmdline =~ s/HOSTNAME/$_self->{hostname}/g;
return $_self->do($cmdline);
}
###
# copy a file from $_self->{hostname}.
#
# $_source - source file to be copied
# $_target - destination $_source should be copied to
# <- the return code
sub rcopy {
my $_self = shift;
my $_source = shift;
my $_target = shift;
my $cmdline = $_self->{ssh_rcopy};
$cmdline =~ s/SOURCE/$_source/g;
$cmdline =~ s/TARGET/$_target/g;
$cmdline =~ s/HOSTNAME/$_self->{hostname}/g;
return $_self->do($cmdline);
}
###
# execute the command on $_self->{hostname}.
#
# $_command - the command that should be executed
# $_args - arguments that should be supplied to $_command
# <- the return code
sub execute {
my $_self = shift;
my $_command = shift;
my $_args = shift;
( run in 0.689 second using v1.01-cache-2.11-cpan-5a3173703d6 )