App-assh
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/App/assh.pm view on Meta::CPAN
package App::assh;
BEGIN {
$App::assh::AUTHORITY = 'cpan:DBR';
}
{
$App::assh::VERSION = '1.1.2';
}
# PODNAME: App::assh
# ABSTRACT: A wrapper around autossh.
use Moo;
use true;
use 5.010;
use strict;
use warnings;
use methods-invoker;
use MooX::Options skip_options => [qw<os cores>];
use MooX::Types::MooseLike::Base qw(:all);
has hosts => (
is => 'lazy',
isa => HashRef,
);
has ports => (
is => 'lazy',
isa => HashRef,
);
has ssh_config_file => (
is => 'ro',
isa => Str,
default => sub {
"$ENV{HOME}/.ssh/config"
},
);
has ports_config_file => (
is => 'ro',
isa => Str,
default => sub {
"$ENV{HOME}/.autossh_rc"
},
);
method _build_hosts {
$_ = do { local(@ARGV, $/) = $->ssh_config_file; <>; };
s/\s+/ /g;
my $ret = {};
while (m<Host\s(.+?)\sHostName\s(.+?)\sUser\s(.+?)\s>xg) {
$ret->{$1} = { NAME => $2, USER => $3 }
}
return $ret;
}
method _build_ports {
open my $portsfile, "<", $->ports_config_file or die $!;
my $h = {};
while(<$portsfile>) {
chomp;
my ($host, $port) = split;
$h->{$host} = $port;
}
return $h
}
method run {
my $host = shift;
not defined $host and do {
say for keys %{$->hosts};
};
defined $->hosts->{$host} and do {
$->autossh_exec($host);
};
}
method autossh_exec {
my $host = shift;
exec 'AUTOPOLL=5 autossh -M ' . $->ports->{$host} . ' ' . $->hosts->{$host}{USER} . '@' . $->hosts->{$host}{NAME}
}
no Moo;
__END__
=pod
=encoding utf-8
=head1 NAME
App::assh - A wrapper around autossh.
=head1 VERSION
version 1.1.2
=head1 SYNOPSIS
A wrapper around autossh.
=for Pod::Coverage ports_config_file ssh_config_file
view all matches for this distributionview release on metacpan - search on metacpan
( run in 4.455 seconds using v1.00-cache-2.02-grep-82fe00e-cpan-72ae3ad1e6da )