NAME
netdisco-sshcollector - Collect ARP data for Netdisco from devices without full SNMP support
SYNOPSIS
# install dependencies:
~netdisco/bin/localenv cpanm --notest Net::OpenSSH Expect
# run manually, or add to cron:
~/bin/netdisco-sshcollector [-DQ]
DESCRIPTION
Collects ARP data for Netdisco from devices without full SNMP support. Currently, ARP tables can be retrieved from the following device classes:
App::Netdisco::SSHCollector::Platform::GAIAEmbedded - Check Point GAIA Embedded
App::Netdisco::SSHCollector::Platform::CPVSX - Check Point VSX
App::Netdisco::SSHCollector::Platform::ACE - Cisco ACE
App::Netdisco::SSHCollector::Platform::ASA - Cisco ASA
App::Netdisco::SSHCollector::Platform::IOS - Cisco IOS
App::Netdisco::SSHCollector::Platform::NXOS - Cisco NXOS
App::Netdisco::SSHCollector::Platform::IOSXR - Cisco IOS XR
App::Netdisco::SSHCollector::Platform::BigIP - F5 Networks BigIP
App::Netdisco::SSHCollector::Platform::PaloAlto - Palo Alto
The collected arp entries are then directly stored in the netdisco database.
CONFIGURATION
The following should go into your Netdisco 2 configuration file, "~/environments/deployment.yml
"
sshcollector
-
Data is collected from the machines specified in this setting. The format is a list of dictionaries. The keys
ip
,user
,password
, andplatform
are required. Optionally thehostname
key can be used instead of theip
. For example:sshcollector:
- ip:
'192.0.2.1'
user: oliver
password: letmein
platform: IOS
- hostname:
'core-router.example.com'
user: oliver
password: letmein
platform: IOS
Platform is the final part of the classname to be instantiated to query the host, e.g. platform ACE will be queried using
App::Netdisco::SSHCollector::Platform::ACE
.If the password is "-", public key authentication will be attempted.
ADDING DEVICES
Additional device classes can be easily integrated just by adding and additonal class to the App::Netdisco::SSHCollector::Platform
namespace. This class must implement an arpnip($hostname, $ssh)
method which returns an array of hashrefs in the format
@result
= ({
ip
=> IPADDR,
mac
=> MACADDR }, ...)
The parameter $ssh
is an active Net::OpenSSH
connection to the host. Depending on the target system, it can be queried using simple methods like
my
@data
=
$ssh
->capture(
"show whatever"
)
or automated via Expect - this is mostly useful for non-Linux appliances which don't support command execution via ssh:
my
(
$pty
,
$pid
) =
$ssh
->open2pty or
die
"unable to run remote command"
;
my
$expect
= Expect->init(
$pty
);
my
$prompt
=
qr/#/
;
my
(
$pos
,
$error
,
$match
,
$before
,
$after
) =
$expect
->expect(10, -re,
$prompt
);
$expect
->
send
(
"terminal length 0\n"
);
# etc...
The returned IP and MAC addresses should be in a format that the respective inetaddr and macaddr datatypes in PostgreSQL can handle.
DEBUG LEVELS
The flags "-DQ
" can be specified, multiple times, and enable the following items in order:
-D
-
Netdisco debug log level
-Q
-
DBIx::Class trace enabled