NAME

App::Netsync - network/database synchronization library

DESCRIPTION

This package can discover a network and synchronize it with a database.

SYNOPSIS

use App::Netsync;

App::Netsync::configure({
    'Table'          => 'assets',
    'DeviceField'    => 'SERIAL_NUMBER',
    'InterfaceField' => 'PORT',
    'InfoFields'     => ['BLDG','ROOM','JACK'],
},{
    'domain'         => 'example.com',
},{
    'Version'        => 2,
    'Community'      => 'example',
},{
    'DBMS'           => 'pg',
    'Server'         => 'pg.example.com',
    'Port'           => 5432,
    'Database'       => 'example_db',
    'Username'       => 'user',
    'Password'       => 'pass',
});

my $nodes = App::Netsync::discover ('DNS','host[0-9]+');
App::Netsync::identify ($nodes,'DB',1);
App::Netsync::update ($nodes);

METHODS

configure

configure the operating environment

Arguments

( \%Netsync [, \%DNS [, \%SNMP [, \%DB ] ] ] )

Netsync

key-value pairs of Netsync environment settings

Available Environment Settings

Note: If a default is not specified, the setting is required.

ConflictLog

where to log conflicts

default: /var/log/<script name>/conflicts.log

DeviceField

the table field to use as a unique ID for devices

DeviceOrder

the width of fields specifying node and device counts

default: 4

Example

DeviceOrder = 3 (i.e. nodes < 1000), 500 nodes
> discovering (using DNS)... 500 nodes (50 skipped), 600 devices (50 stacks)
DeviceOrder = 9 (i.e. nodes < 1000000000), 500 nodes
> discovering (using DNS)...       500 nodes (50 skipped), 600 devices (50 stacks)
DeviceOrder = 1 (i.e. nodes < 10), 20 nodes !
> discovering (using DNS)... 111111111120 nodes (2 skipped), 24 devices (2 stacks)
Indent

the number of spaces to use when output is indented

default: 4

InfoFields

which table fields to synchronize with device interfaces

InterfaceField

which table field to use as a unique ID for device interfaces

NodeLog

where to log all probed nodes

default: /var/log/<script name>/nodes.log

Quiet

Print nothing.

default: 0

SyncOID

which OID to send synchronized information to when updating

default: ifAlias

Table

which database table to use

UpdateLog

where to log all modifications made to the network

default: /var/log/<script name>/updates.log

Verbose

Print everything.

Note: Quiet mode overrides Verbose mode.

default: 0

Netsync requires the following settings to use a DBMS:

DBMS

the database platform to use

Server

the server containing the database to use

Port

the port to contact the database server on

Database

the database to connect to

Username

the user to connect to the database as

Password

the authentication key to use to connect to the database

Netsync requires the following settings to use SNMP:

MIBdir

the location of MIBs required by Netsync

default: /usr/share/<script name>/mib

DNS

See Net::DNS documentation for more acceptable settings.

SNMP

See SNMP::Session documentation for more acceptable settings.

DB

See DBI documentation for more acceptable settings.

device_interfaces

discover all the devices and corresponding interfaces of a potentially stacked node

Arguments

( $vendor , $session )

vendor

a value returned from SNMP::Info::vendor

Supported Vendors

brocade/foundry
cisco
hp
session

an SNMP::Session object

Example

    device_interfaces ($node->{'info'}->vendor,$node->{'session'});

    {
      '1A2B3C4D5E6F' => {
                          '1001' => 'ethernet1/1/1',
                          '1002' => 'ethernet1/1/2',
                          ...
                        },
      '2B3C4D5E6F7G' => {
                          '2001' => 'ethernet2/1/1',
                          '2002' => 'ethernet2/1/2',
                          ...
                        },
      ...
    }

discover

search the network for active nodes

Arguments

[ ( $node_source [, $host_pattern ] ) ]

node_source

where to get nodes from (DNS, STDIN, or a filename)

default: DNS

host_pattern

a regular expression to match hostnames from the list of retrieved nodes

default: [^.]+

identify

identify discovered nodes in a database

Arguments

( \%nodes [, $data_source [, $auto_match ] ] )

nodes

the discovered nodes to identify

data_source

the location of the database (DB or a filename)

default: DB

auto_match

whether to enable interface automatching

default: 0

update

push information to interfaces

Arguments

( \%nodes )

nodes

the nodes to update

Example

update $nodes;

                          Table
---------------------------------------------------------
|  DeviceField  |  InterfaceField  |  InfoFields...     |
---------------------------------------------------------         =============
|   (serial)    |     (ifName)     |(interface-specific)|   -->   || SyncOID ||
|                          ...                          |         =============
---------------------------------------------------------              (device)

AUTHOR

David Tucker, <dmtucker at ucsc.edu>

BUGS

Please report any bugs or feature requests to bug-netsync at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=App-Netsync. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

perldoc App::Netsync

You can also look for information at:

LICENSE

Copyright 2013 David Tucker.

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.