Improve netdisco-sshcollector CLI experience (#460)
* Improve netdisco-sshcollector CLI experience * add -d <device> * add -O debug option to toggle Net::OpenSSH::debug * add -w MCE::Loop max_workers * updated POD for all of the above * Fix -Q documentation * Specifying -Q multiple times has no effect, removed part talking about that. * Emit Net::OpenSSH connection failures as warnings
This commit is contained in:
committed by
Oliver Gorwits
parent
f5622929e0
commit
b1ca1b968d
@@ -53,10 +53,13 @@ use Pod::Usage 'pod2usage';
|
|||||||
use Getopt::Long;
|
use Getopt::Long;
|
||||||
Getopt::Long::Configure ("bundling");
|
Getopt::Long::Configure ("bundling");
|
||||||
|
|
||||||
my ($debug, $sqltrace) = (undef, 0);
|
my ($debug, $sqltrace, $device, $opensshdebug, $workers) = (undef, 0, undef, undef, "auto");
|
||||||
my $result = GetOptions(
|
my $result = GetOptions(
|
||||||
'debug|D' => \$debug,
|
'debug|D' => \$debug,
|
||||||
'sqltrace|Q+' => \$sqltrace,
|
'sqltrace|Q' => \$sqltrace,
|
||||||
|
'device|d=s' => \$device,
|
||||||
|
'opensshdebug|O' => \$opensshdebug,
|
||||||
|
'workers|w=i' => \$workers,
|
||||||
) or pod2usage(
|
) or pod2usage(
|
||||||
-msg => 'error: bad options',
|
-msg => 'error: bad options',
|
||||||
-verbose => 0,
|
-verbose => 0,
|
||||||
@@ -71,10 +74,11 @@ $ENV{DBIC_TRACE} ||= $sqltrace;
|
|||||||
# reconfigure logging to force console output
|
# reconfigure logging to force console output
|
||||||
Dancer::Logger->init('console', $CONFIG);
|
Dancer::Logger->init('console', $CONFIG);
|
||||||
|
|
||||||
#this may be helpful with SSH issues:
|
if ($opensshdebug){
|
||||||
#$Net::OpenSSH::debug = ~0;
|
$Net::OpenSSH::debug = ~0;
|
||||||
|
}
|
||||||
|
|
||||||
MCE::Loop::init { chunk_size => 1 };
|
MCE::Loop::init { chunk_size => 1, max_workers => $workers };
|
||||||
my %stats;
|
my %stats;
|
||||||
$stats{entry} = 0;
|
$stats{entry} = 0;
|
||||||
|
|
||||||
@@ -83,6 +87,11 @@ exit main();
|
|||||||
sub main {
|
sub main {
|
||||||
my @input = @{ setting('sshcollector') };
|
my @input = @{ setting('sshcollector') };
|
||||||
|
|
||||||
|
if ($device){
|
||||||
|
@input = grep{ ($_->{hostname} && $_->{hostname} eq $device)
|
||||||
|
|| ($_->{ip} && $_->{ip} eq $device) } @input;
|
||||||
|
}
|
||||||
|
|
||||||
#one-line Fisher-Yates from https://www.perlmonks.org/index.pl?node=Array%20One-Liners
|
#one-line Fisher-Yates from https://www.perlmonks.org/index.pl?node=Array%20One-Liners
|
||||||
my ($i,$j) = (0);
|
my ($i,$j) = (0);
|
||||||
@input[-$i,$j] = @input[$j,-$i] while $j = rand(@input - $i), ++$i < @input;
|
@input[-$i,$j] = @input[$j,-$i] while $j = rand(@input - $i), ++$i < @input;
|
||||||
@@ -108,7 +117,12 @@ sub main {
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
|
||||||
MCE->gather( process($hostlabel, $ssh, $host) );
|
|
||||||
|
if ($ssh->error){
|
||||||
|
warning "WARNING: Couldn't connect to <$hostlabel> - " . $ssh->error;
|
||||||
|
}else{
|
||||||
|
MCE->gather( process($hostlabel, $ssh, $host) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} \@input;
|
} \@input;
|
||||||
|
|
||||||
@@ -173,7 +187,10 @@ full SNMP support
|
|||||||
~/bin/localenv cpanm --notest Net::OpenSSH Expect
|
~/bin/localenv cpanm --notest Net::OpenSSH Expect
|
||||||
|
|
||||||
# run manually, or add to cron:
|
# run manually, or add to cron:
|
||||||
~/bin/netdisco-sshcollector [-DQ]
|
~/bin/netdisco-sshcollector [-DQO] [-w <max_workers>]
|
||||||
|
|
||||||
|
# limit run to a single device defined in the config
|
||||||
|
~/bin/netdisco-sshcollector [-DQO] [-w <max_workers>] -d <device>
|
||||||
|
|
||||||
=head1 DESCRIPTION
|
=head1 DESCRIPTION
|
||||||
|
|
||||||
@@ -271,10 +288,7 @@ don't support command execution via ssh:
|
|||||||
The returned IP and MAC addresses should be in a format that the respective
|
The returned IP and MAC addresses should be in a format that the respective
|
||||||
B<inetaddr> and B<macaddr> datatypes in PostgreSQL can handle.
|
B<inetaddr> and B<macaddr> datatypes in PostgreSQL can handle.
|
||||||
|
|
||||||
=head1 DEBUG LEVELS
|
=head1 COMMAND LINE OPTIONS
|
||||||
|
|
||||||
The flags "C<-DQ>" can be specified, multiple times, and enable the following
|
|
||||||
items in order:
|
|
||||||
|
|
||||||
=over 4
|
=over 4
|
||||||
|
|
||||||
@@ -284,7 +298,21 @@ Netdisco debug log level
|
|||||||
|
|
||||||
=item C<-Q>
|
=item C<-Q>
|
||||||
|
|
||||||
L<DBIx::Class> trace enabled
|
L<DBIx::Class> trace enabled.
|
||||||
|
|
||||||
|
=item C<-O>
|
||||||
|
|
||||||
|
L<Net::OpenSSH> trace enabled
|
||||||
|
|
||||||
|
=item C<-w>
|
||||||
|
|
||||||
|
Set maximum parallel workers for L<MCE::Loop>. The default is B<auto>.
|
||||||
|
|
||||||
|
=item C<-d device>
|
||||||
|
|
||||||
|
Only run for a single device. Takes an IP or hostname, must exactly match the value
|
||||||
|
in the config file.
|
||||||
|
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user