Merge 2.008000 release from og-work branch.
Squashed commit of the following: commitaa2baf5c75Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 9 15:44:29 2013 +0100 next stable release commit79fe5b59e6Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 9 15:37:26 2013 +0100 fix localenv discovery for scripts commit1af2f78dd4Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 9 14:55:39 2013 +0100 include new bin scripts commit23d0e1b0e7Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 9 14:09:27 2013 +0100 more bug fixes commitdfeacd12e2Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 9 11:30:06 2013 +0100 several bug fixes commit9fd41f1c26Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 8 21:22:44 2013 +0100 bump version for next beta commitb0925cf116Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 8 21:20:13 2013 +0100 update plugin docs commit9571c45634Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 8 20:54:30 2013 +0100 sanitize configuration files commitdd447e4246Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 8 20:04:43 2013 +0100 tweak parsing of lists of regex in config commit9957548022Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 8 19:54:10 2013 +0100 workers instead of daemon_* config commit4f6b470429Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 8 19:39:40 2013 +0100 no more demo :( commiteda73c7dacAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 8 19:24:47 2013 +0100 lots of docs commit4a1ccba71aAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 8 18:17:42 2013 +0100 documentation for all config settings commit3538e47bcdAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 8 16:05:03 2013 +0100 update TODO commitcf9001fcccMerge:a43c9897b98e23Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Jun 8 16:03:29 2013 +0100 merge master after new release commita43c98962aAuthor: Oliver Gorwits <oliver@cpan.org> Date: Mon Jun 3 20:37:39 2013 +0100 Missing mibdirs causes all MIBs to be loaded (with a warning) commit09829a25b8Author: Oliver Gorwits <oliver@cpan.org> Date: Mon Jun 3 20:07:31 2013 +0100 local plugins site_plugins dir commitb0e804e558Author: Oliver Gorwits <oliver@cpan.org> Date: Mon Jun 3 19:59:04 2013 +0100 use send_error and redirect from Dancer commit3d1185261aAuthor: Oliver Gorwits <oliver@cpan.org> Date: Mon Jun 3 19:13:40 2013 +0100 support path config option commit31ca119f84Merge:9a798554d2b3a5Author: Oliver Gorwits <oliver@cpan.org> Date: Mon Jun 3 00:06:17 2013 +0100 Merge remote-tracking branch 'origin/og-work' into og-work g-work" This reverts commit9a79855361, reversing changes made to6fd6118354. Conflicts: Netdisco/share/views/plugin/device_port_column/c_observiumsparklines.tt commit9a79855361Merge:6fd6118c8c3b82Author: Oliver Gorwits <oliver@cpan.org> Date: Mon Jun 3 00:03:32 2013 +0100 Merge remote-tracking branch 'origin/master' into og-work commit6fd6118354Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 2 15:47:45 2013 +0100 extra note about behind proxy commit798086ca29Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 2 15:30:26 2013 +0100 complete the observium plugin commit66b3ced179Author: Oliver Gorwits <oliver@cpan.org> Date: Sun Jun 2 12:48:06 2013 +0100 Plugins can have CSS and Javascript loaded within <head> commit4d2b3a5307Author: Oliver Gorwits <oliver@cpan.org> Date: Thu May 30 08:50:16 2013 +0100 get device dns to port template commited1bfa1ae7Author: Oliver Gorwits <oliver@cpan.org> Date: Thu May 30 08:17:02 2013 +0100 observium sparklines plugin; support X:: namespace commit76b7636c74Author: Oliver Gorwits <oliver@cpan.org> Date: Thu May 30 06:30:06 2013 +0100 rename private settings keys commitfdac8f6c33Author: Oliver Gorwits <oliver@cpan.org> Date: Thu May 30 05:59:53 2013 +0100 add macwalk and arpnip buttons to device details commit3d688c7d83Author: Oliver Gorwits <oliver@cpan.org> Date: Thu May 30 05:57:20 2013 +0100 Revert "reduce refresh to 5sec" This reverts commit8ea9ec7dd9. commitdc62382112Author: Oliver Gorwits <oliver@cpan.org> Date: Thu May 30 05:50:34 2013 +0100 support for arpwalk and macwalk and all jobs via web commit8bc7d83c98Author: Oliver Gorwits <oliver@cpan.org> Date: Thu May 30 05:35:41 2013 +0100 simplify discover options to only discoverall and discover commit8ea9ec7dd9Author: Oliver Gorwits <oliver@cpan.org> Date: Wed May 29 20:23:08 2013 +0100 reduce refresh to 5sec commit8c54e6c58bAuthor: Oliver Gorwits <oliver@cpan.org> Date: Wed May 29 20:11:06 2013 +0100 show undiscovered neighbor properly commite0ee25628fAuthor: Oliver Gorwits <oliver@cpan.org> Date: Wed May 29 19:54:09 2013 +0100 avoid unecessary log for queueing commitd5565423f2Author: Oliver Gorwits <oliver@cpan.org> Date: Wed May 29 19:51:37 2013 +0100 avoid warning on undefined remote type commit5d9b58a6b2Author: Oliver Gorwits <oliver@cpan.org> Date: Wed May 29 19:48:22 2013 +0100 avoid explosion when not admin commit377bb942e0Author: Oliver Gorwits <oliver@cpan.org> Date: Wed May 29 19:46:52 2013 +0100 avoid undefined warning commit08806dcfa2Author: Oliver Gorwits <oliver@cpan.org> Date: Wed May 29 19:46:42 2013 +0100 get_db_version will be 0 at first deploy commit9511c17056Author: Oliver Gorwits <oliver@cpan.org> Date: Wed May 29 19:15:55 2013 +0100 fix name of Template module commiteb0288de35Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 28 07:17:07 2013 +0100 initial config settings documentation commit7f2ea7f8dcAuthor: Oliver Gorwits <oliver@cpan.org> Date: Mon May 27 15:18:15 2013 +0100 remove check_mac to own module, use in macsuck too commitb995cf6398Author: Oliver Gorwits <oliver@cpan.org> Date: Mon May 27 15:01:29 2013 +0100 show probable but undiscovered neighbor is ports display commitdd8d461188Author: Oliver Gorwits <oliver@cpan.org> Date: Mon May 27 14:52:41 2013 +0100 new schema version for is_uplink and is_uplink_admin commit3f6a7b5aa2Author: Oliver Gorwits <oliver@cpan.org> Date: Mon May 27 14:47:59 2013 +0100 make sure device_port is updated when manual_topo is set commit33bf9a6599Author: Oliver Gorwits <oliver@cpan.org> Date: Sun May 26 19:51:49 2013 +0100 export store_arp and store_node commit0ed356d560Author: Oliver Gorwits <oliver@cpan.org> Date: Sat May 25 17:12:31 2013 +0100 use row lock not table lock commitf830bc3a3bAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sat May 25 16:38:33 2013 +0100 move macsuck/arpnip/discover to ::Core namespace commitbe40788987Author: Oliver Gorwits <oliver@cpan.org> Date: Fri May 24 21:10:34 2013 +0100 add maybe_uplink to device_port; more macsuck implementation commit88371026d5Author: Oliver Gorwits <oliver@cpan.org> Date: Fri May 24 14:34:58 2013 +0100 start on macsuck; tweak update locking commit6f7c87ac07Author: Oliver Gorwits <oliver@cpan.org> Date: Fri May 24 13:10:58 2013 +0100 ORDER BY ... FOR UPDATE will allow us to avoid table lock commit7c438e01fcAuthor: Oliver Gorwits <oliver@cpan.org> Date: Fri May 24 12:12:46 2013 +0100 yet more efficient arpnip commitc74c56dc02Author: Oliver Gorwits <oliver@cpan.org> Date: Fri May 24 11:34:23 2013 +0100 guard against race with *_or_* DBIC methods commitd50c54972eAuthor: Oliver Gorwits <oliver@cpan.org> Date: Mon May 20 23:42:41 2013 +0100 more efficient arpnip commit73c8979130Author: Oliver Gorwits <oliver@cpan.org> Date: Sun May 19 22:52:15 2013 +0100 fix confusing name commitbf78e82411Author: Oliver Gorwits <oliver@cpan.org> Date: Sun May 19 22:37:22 2013 +0100 fix mistake in DBIx::Class schema commit6a5af95836Author: Oliver Gorwits <oliver@cpan.org> Date: Sun May 19 22:06:27 2013 +0100 arpnip implementation commit594abd3f82Author: Oliver Gorwits <oliver@cpan.org> Date: Thu May 16 00:00:50 2013 +0100 PostgreSQL explicit locking support. Squashed commit of the following: commit76e1539102Author: Oliver Gorwits <oliver@cpan.org> Date: Wed May 15 23:54:25 2013 +0100 finished explicit locking module commit369387258bAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 14 23:50:42 2013 +0100 initial implementation of locking from schema object commit55c6d4fe63Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 14 21:05:01 2013 +0100 add discover button to device details page commit11fd8bf964Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 14 20:43:43 2013 +0100 fix typo and clear port box on autocomplete dropdown commita00f9b5c2eAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 14 20:38:54 2013 +0100 move admin tasks and remove JobControl package commit74bc0023dfAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sat May 11 18:25:04 2013 +0100 complete job queue delete and kill running timers properly when reloading page commitdd6947f38dAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sat May 11 16:51:28 2013 +0100 fix improper use of bootstrap table class commitcd5b83f71eAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sat May 11 15:55:45 2013 +0100 fix update view icon in sidebar commite9349f325dAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sat May 11 11:57:19 2013 +0100 css audit commit201470275dAuthor: Oliver Gorwits <oliver@cpan.org> Date: Thu May 9 23:48:05 2013 +0100 add job queue to standard plugins list commita18a3c72a3Author: Oliver Gorwits <oliver@cpan.org> Date: Thu May 9 23:37:43 2013 +0100 fix table headings and improve Action display in Job Queue commit70f5da8bb6Author: Oliver Gorwits <oliver@cpan.org> Date: Thu May 9 23:30:32 2013 +0100 implement "no devices" prompt for admin users to do first discover commit2e8ac83173Author: Oliver Gorwits <oliver@cpan.org> Date: Thu May 9 21:53:39 2013 +0100 more js refactoring for report and search commit479ac0e55dAuthor: Oliver Gorwits <oliver@cpan.org> Date: Thu May 9 21:50:29 2013 +0100 refactor js for device tabs commit6a17fe5d6cAuthor: Oliver Gorwits <oliver@cpan.org> Date: Thu May 9 21:05:42 2013 +0100 fix crazy races with javasacript by using global delegations commite94e3cef3bAuthor: Oliver Gorwits <oliver@cpan.org> Date: Wed May 8 23:06:41 2013 +0100 remove Try::Tiny from web runtime commitc746e68b9bAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 7 21:54:11 2013 +0100 make topo autocomplete more responsive commit24c511786fAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 7 21:52:17 2013 +0100 display name and IP for device typeahead commit52ab7d1266Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 7 21:47:05 2013 +0100 add drop-down control for the topo form fields commit5744b6845fAuthor: Oliver Gorwits <oliver@cpan.org> Date: Tue May 7 21:25:30 2013 +0100 complete the topology editor (add/delete) commitb510fbe8c5Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 7 00:59:11 2013 +0100 add new admin tasks to default plugins list commit11d55e0129Author: Oliver Gorwits <oliver@cpan.org> Date: Tue May 7 00:56:19 2013 +0100 Manual Device Topology Needed to add the 'autocomplete' jQuery UI component because it can do minLength=0 properly. Used the smoothness UI theme. Added typeahead AJAX calls to support the topology searching. Added new plugin and template for the topology editing page. commitbf7a419d08Author: Oliver Gorwits <oliver@cpan.org> Date: Mon May 6 22:16:24 2013 +0100 add a little colour to lone tab titles commit9690a31f19Author: Oliver Gorwits <oliver@cpan.org> Date: Mon May 6 22:01:13 2013 +0100 complete Manage Pseudo Devices commit024f4d9a83Author: Oliver Gorwits <oliver@cpan.org> Date: Mon May 6 00:49:47 2013 +0100 use bootstrap font colour instead of css commitf75f1e5cbfAuthor: Oliver Gorwits <oliver@cpan.org> Date: Mon May 6 00:45:18 2013 +0100 add frontend update/del forms, and display port count commitf0899e16b3Author: Oliver Gorwits <oliver@cpan.org> Date: Sun May 5 23:53:20 2013 +0100 add frontend pseudo device add form commit3271c01931Author: Oliver Gorwits <oliver@cpan.org> Date: Sun May 5 21:45:17 2013 +0100 complete the code for admin tasks page loading commit38f70624f3Author: Oliver Gorwits <oliver@cpan.org> Date: Sun May 5 17:04:30 2013 +0100 set up file paths consistently in all scripts commitc761ca839bAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sun May 5 17:00:30 2013 +0100 Helper script to import the Netdisco 1.x Topology file to the database commitf468b48049Author: Oliver Gorwits <oliver@cpan.org> Date: Sun May 5 16:20:39 2013 +0100 Handle whitespace ahead of OUI data commit5c8a5754f6Author: Oliver Gorwits <oliver@cpan.org> Date: Sun May 5 16:16:20 2013 +0100 also set neighbor info when discovering device interfaces commitacb988b6afAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sun May 5 15:34:20 2013 +0100 try to avoid duplicate execution of scheduled jobs commitc6bcaf66c5Author: Oliver Gorwits <oliver@cpan.org> Date: Sun May 5 14:16:25 2013 +0100 do not clobber manual topo when discovering neighbors commitd9a6a1882aAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sun May 5 13:02:45 2013 +0100 User icon color indicates port_control/admin ability commit2cdcb9db7eAuthor: Oliver Gorwits <oliver@cpan.org> Date: Mon Apr 29 23:34:27 2013 +0100 add support for admin tasks as plugins commit075a770c9aAuthor: Oliver Gorwits <oliver@cpan.org> Date: Mon Apr 29 22:23:20 2013 +0100 skip pseudo devices (vendor netdisco) commit045c022d42Author: Oliver Gorwits <oliver@cpan.org> Date: Mon Apr 29 21:58:33 2013 +0100 incorporate manual topo info from the topology db table commit09285d42b4Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Apr 27 18:39:12 2013 +0100 add unique constraints to topology table commit2780b72e49Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Apr 27 15:38:05 2013 +0100 muted help text in sidebar commit733d4f83fbAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sat Apr 27 14:39:54 2013 +0100 sorry, testing hook changes commit71e366e352Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Apr 27 14:34:36 2013 +0100 sorry, testing hook changes commit7f9eaa99f5Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Apr 27 14:33:44 2013 +0100 sorry, testing hook changes commit5215fd632dAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sat Apr 27 14:30:07 2013 +0100 sorry, testing hook changes commitbe817d60c2Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Apr 27 14:21:45 2013 +0100 sorry, testing hook changes commit1fd3695358Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Apr 27 14:18:57 2013 +0100 sorry, testing hook changes commitac448c4a91Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Apr 27 14:13:03 2013 +0100 sorry, testing hook changes commitc563b8d9afAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sat Apr 27 14:08:54 2013 +0100 sorry, testing hook changes commit3abcfb01d5Author: Oliver Gorwits <oliver@cpan.org> Date: Sat Apr 27 14:06:25 2013 +0100 sorry, testing hook changes commit877a81facfAuthor: Oliver Gorwits <oliver@cpan.org> Date: Sat Apr 27 14:05:25 2013 +0100 sorry, testing hook changes
This commit is contained in:
@@ -7,7 +7,7 @@ use 5.010_000;
|
||||
use File::ShareDir 'dist_dir';
|
||||
use Path::Class;
|
||||
|
||||
our $VERSION = '2.007000_002';
|
||||
our $VERSION = '2.008000';
|
||||
|
||||
BEGIN {
|
||||
if (not length ($ENV{DANCER_APPDIR} || '')
|
||||
@@ -28,6 +28,15 @@ BEGIN {
|
||||
$ENV{DANCER_PUBLIC} ||= $auto->subdir('public')->stringify;
|
||||
$ENV{DANCER_VIEWS} ||= $auto->subdir('views')->stringify;
|
||||
}
|
||||
|
||||
{
|
||||
# Dancer 1 uses the broken YAML.pm module
|
||||
# This is a global sledgehammer - could just apply to Dancer::Config
|
||||
use YAML;
|
||||
use YAML::XS;
|
||||
no warnings 'redefine';
|
||||
*YAML::LoadFile = sub { goto \&YAML::XS::LoadFile };
|
||||
}
|
||||
}
|
||||
|
||||
=head1 NAME
|
||||
@@ -41,18 +50,9 @@ network management tool. Pieces are still missing however, so if you're a new
|
||||
user please see L<http://netdisco.org/> for further information on the project
|
||||
and how to download the current official release.
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
See the demo at: L<http://demo-ollyg.dotcloud.com/netdisco/>
|
||||
|
||||
=back
|
||||
|
||||
L<App::Netdisco> provides a web frontend and a backend daemon to handle
|
||||
interactive requests such as changing port or device properties. There is not
|
||||
yet a device poller, so please still use the old Netdisco's discovery, arpnip,
|
||||
and macsuck.
|
||||
L<App::Netdisco> provides a web frontend with built-in web server, and a
|
||||
backend daemon to handle interactive requests such as changing port or device
|
||||
properties.
|
||||
|
||||
If you have any trouble getting the frontend running, speak to someone in the
|
||||
C<#netdisco> IRC channel (on freenode). Before installing or upgrading please
|
||||
@@ -139,6 +139,8 @@ take care of all this for you:
|
||||
|
||||
~/bin/netdisco-deploy
|
||||
|
||||
Answer yes to all questions, if this is a new installation of Netdisco 2.
|
||||
|
||||
=head1 Startup
|
||||
|
||||
Run the following command to start the web-app server as a backgrounded daemon
|
||||
@@ -146,12 +148,17 @@ Run the following command to start the web-app server as a backgrounded daemon
|
||||
|
||||
~/bin/netdisco-web start
|
||||
|
||||
If the Inventory is empty because this is a new installation, you probably
|
||||
want to either run some polling jobs from the command-line, or give a web user
|
||||
some admin rights (see L</"User Rights">, below).
|
||||
|
||||
Run the following command to start the job control daemon (port control, etc):
|
||||
|
||||
~/bin/netdisco-daemon start
|
||||
|
||||
You should take care not to run this Netdisco daemon and the legacy daemon at
|
||||
the same time.
|
||||
the same time. Similarly, if you use the device discovery with Netdisco 2,
|
||||
disable your system's cron jobs for the Netdisco 1 poller.
|
||||
|
||||
=head1 Upgrading
|
||||
|
||||
@@ -161,13 +168,13 @@ Notes|App::Netdisco::Manual::ReleaseNotes>. Then, the process is as follows:
|
||||
# upgrade Netdisco
|
||||
~/bin/localenv cpanm --notest App::Netdisco
|
||||
|
||||
# apply database schema updates (optionally, get latest OIDs/MIBs)
|
||||
# apply database schema updates
|
||||
~/bin/netdisco-deploy
|
||||
|
||||
# restart web service
|
||||
~/bin/netdisco-web restart
|
||||
|
||||
# optionally, restart job daemon if you use it
|
||||
# restart job daemon (if you use it)
|
||||
~/bin/netdisco-daemon restart
|
||||
|
||||
=head1 Tips and Tricks
|
||||
@@ -180,12 +187,30 @@ or MAC addreses, VLAN numbers, and so on.
|
||||
|
||||
=head2 User Rights
|
||||
|
||||
When user authentication is disabled (C<no_auth>) the default username is
|
||||
"guest", which has no special privilege. To grant port and device control
|
||||
When user authentication is disabled (C<no_auth: true>) the default username
|
||||
is "guest", which has no special privilege. To grant port and device control
|
||||
rights to this user, create a row in the C<users> table of the Netdisco
|
||||
database with a username of C<guest> and the C<port_control> flag set to true:
|
||||
database with a username of C<guest> and appropriate flags set to true:
|
||||
|
||||
netdisco=> insert into users (username, port_control) values ('guest', true);
|
||||
netdisco=> insert into users (username) values ('guest');
|
||||
netdisco=> update users set port_control = true where username = 'guest';
|
||||
netdisco=> update users set admin = true where username = 'guest';
|
||||
|
||||
=head2 Command-Line Device and Port Actions
|
||||
|
||||
To run a device (discover, etc) or port control job from the command-line, use
|
||||
the bundled L<netdisco-do> program. For example:
|
||||
|
||||
~/bin/netdisco-do -D discover -d 192.0.2.1
|
||||
|
||||
=head2 Import Topology
|
||||
|
||||
Netdisco 1.x had support for a topology information file to fill in device
|
||||
port relations which could not be discovered. This is now stored in the
|
||||
database (and edited in the web interface). To import a legacy topology file,
|
||||
run:
|
||||
|
||||
~/bin/localenv nd-import-topology /path/to/netdisco-topology.txt
|
||||
|
||||
=head2 Deployment Scenarios
|
||||
|
||||
@@ -202,10 +227,8 @@ documentation for further information.
|
||||
|
||||
=head2 Plugins
|
||||
|
||||
App::Netdisco includes a Plugin subsystem for building the web user interface.
|
||||
Items in the navigation bar and the tabs on pages are loaded as Plugins, and
|
||||
you have control over their appearance and ordering. See
|
||||
L<App::Netdisco::Web::Plugin> for further information.
|
||||
Netdisco includes a Plugin subsystem for customizing the web user interface.
|
||||
See L<App::Netdisco::Web::Plugin> for further information.
|
||||
|
||||
=head2 Developing
|
||||
|
||||
@@ -229,7 +252,7 @@ Oliver Gorwits <oliver@cpan.org>
|
||||
|
||||
=head1 COPYRIGHT AND LICENSE
|
||||
|
||||
This software is copyright (c) 2012 by The Netdisco Developer Team.
|
||||
This software is copyright (c) 2012, 2013 by The Netdisco Developer Team.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
@@ -198,7 +198,7 @@ sub store_interfaces {
|
||||
next;
|
||||
}
|
||||
|
||||
if (scalar grep {$port =~ m/$_/} @{setting('ignore_interfaces') || []}) {
|
||||
if (scalar grep {$port =~ m/^$_$/} @{setting('ignore_interfaces') || []}) {
|
||||
debug sprintf
|
||||
' [%s] interfaces - ignoring %s (%s) (config:ignore_interfaces)',
|
||||
$device->ip, $entry, $port;
|
||||
@@ -807,12 +807,14 @@ sub discover_new_neighbors {
|
||||
my $device = get_device($ip);
|
||||
next if $device->in_storage;
|
||||
|
||||
my $remote_type_match = setting('discover_no_type');
|
||||
if ($remote_type and $remote_type_match
|
||||
and $remote_type =~ m/$remote_type_match/) {
|
||||
debug sprintf ' queue - %s, type [%s] excluded by discover_no_type',
|
||||
$ip, $remote_type;
|
||||
next;
|
||||
if ($remote_type) {
|
||||
if (scalar grep {$remote_type =~ m/$_/}
|
||||
@{setting('discover_no_type') || []}) {
|
||||
debug sprintf
|
||||
' queue - %s, type [%s] excluded by discover_no_type',
|
||||
$ip, $remote_type;
|
||||
next;
|
||||
}
|
||||
}
|
||||
|
||||
# could fail if queued job already exists
|
||||
|
||||
@@ -43,8 +43,8 @@ sub capacity_for {
|
||||
};
|
||||
|
||||
my $setting_map = {
|
||||
Poller => 'daemon_pollers',
|
||||
Interactive => 'daemon_interactives',
|
||||
Poller => 'pollers',
|
||||
Interactive => 'interactives',
|
||||
};
|
||||
|
||||
my $role = $role_map->{$action};
|
||||
@@ -52,7 +52,7 @@ sub capacity_for {
|
||||
|
||||
my $current = $queue->search({role => $role})->count;
|
||||
|
||||
return ($current < setting($setting));
|
||||
return ($current < setting('workers')->{$setting});
|
||||
}
|
||||
|
||||
sub take_jobs {
|
||||
|
||||
@@ -49,7 +49,7 @@ sub worker_body {
|
||||
}
|
||||
|
||||
debug "int ($wid): sleeping now...";
|
||||
sleep( setting('daemon_sleep_time') || 5 );
|
||||
sleep( setting('workers')->{sleep_time} || 5 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ sub set_power {
|
||||
|
||||
my $ip = $job->device;
|
||||
my $pn = $job->port;
|
||||
(my $data = $job->subaction) =~ s/-\w+//;
|
||||
(my $data = $job->subaction) =~ s/-\w+//; # remove -other
|
||||
|
||||
# snmp connect using rw community
|
||||
my $info = snmp_connect_rw($ip)
|
||||
|
||||
@@ -84,7 +84,7 @@ sub worker_body {
|
||||
# TODO also check for stale jobs in Netdisco DB
|
||||
|
||||
debug "mgr ($wid): sleeping now...";
|
||||
sleep( setting('daemon_sleep_time') || 5 );
|
||||
sleep( setting('workers')->{sleep_time} || 5 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ sub worker_body {
|
||||
}
|
||||
|
||||
debug "poll ($wid): sleeping now...";
|
||||
sleep( setting('daemon_sleep_time') || 5 );
|
||||
sleep( setting('workers')->{sleep_time} || 5 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -58,59 +58,78 @@ the C<dsn> (DB name, host, port), C<user> and C<pass>.
|
||||
|
||||
=head2 General Settings
|
||||
|
||||
=head3 C<log: debug|warning|error>
|
||||
=head3 C<log>
|
||||
|
||||
Default: C<warning>
|
||||
Value: C<debug|warning|error>. Default: C<warning>.
|
||||
|
||||
The log level used by Netdisco. It's useful to see warning messages from the
|
||||
backend poller, as this can highlight broken topology.
|
||||
|
||||
=head3 C<logger: console|file>
|
||||
=head3 C<logger>
|
||||
|
||||
Default: C<file>
|
||||
Value: C<console|file>. Default: C<file>.
|
||||
|
||||
Destination for log messages. Console means standard ouput. When set to
|
||||
C<file>, the default destination is the C<${HOME}/logs> directory.
|
||||
|
||||
=head3 C<logger_format: String>
|
||||
=head3 C<logger_format>
|
||||
|
||||
Default: C<< '[%P] %L @%D> %m' >>
|
||||
Value: Format String. Default: C<< '[%P] %L @%D> %m' >>.
|
||||
|
||||
Structure of the log messages. See L<Dancer::Logger::Abstract/"logger_format">
|
||||
for details.
|
||||
|
||||
=head2 Web Frontend
|
||||
|
||||
=head3 C<domain_suffix: String>
|
||||
=head3 C<domain_suffix>
|
||||
|
||||
Default: None
|
||||
Value: String. Default: None.
|
||||
|
||||
Set this to your local site's domain name. This is usually removed from node
|
||||
names in the web interface to make things more readable.
|
||||
names in the web interface to make things more readable. Make sure to include
|
||||
the leading dot character.
|
||||
|
||||
=head3 C<no_auth: Boolean>
|
||||
=head3 C<no_auth>
|
||||
|
||||
Default: C<false>
|
||||
Value: Boolean. Default: C<false>.
|
||||
|
||||
Enable this to disable login authentication in the web frontend. The username
|
||||
will be set to C<guest> so if you want to allow extended permissions (C<admin>
|
||||
or C<port_control>, create a dummy user with the appropriate flag, in the
|
||||
or C<port_control>, create a dummy user with the appropriate flag in the
|
||||
database:
|
||||
|
||||
netdisco=> insert into users (username, port_control) values ('guest', true);
|
||||
netdisco=> insert into users (username) values ('guest');
|
||||
netdisco=> update users set port_control = true where username = 'guest';
|
||||
netdisco=> update users set admin = true where username = 'guest';
|
||||
|
||||
=head3 C<port: String>
|
||||
=head3 C<port>
|
||||
|
||||
Default: C<5000>
|
||||
Value: Number. Default: C<5000>.
|
||||
|
||||
Port which the web server listens on. Netdisco comes with a good pre-forking
|
||||
web server, so you can change this to C<80> if you want to use it directly.
|
||||
However the default is designed to work well with servers such as Apache in
|
||||
reverse-proxy mode.
|
||||
|
||||
=head3 C<web_plugins: List of String>
|
||||
=head3 C<path>
|
||||
|
||||
Default: List of L<App::Netdisco::Web::Plugin> names
|
||||
Value: String. Default: None.
|
||||
|
||||
Mount point for the Netdisco web frontend. This is usually the root of the web
|
||||
server. Set this to the path under which all pages live, e.g. C</netdisco2>.
|
||||
As an alternative you can use the C<--path> option to C<netdisco-web>.
|
||||
|
||||
=head3 C<behind_proxy>
|
||||
|
||||
Value: Boolean. Default: C<false>.
|
||||
|
||||
A hint to the Netdisco web frontend that it's running behind a reverse proxy.
|
||||
In that case, Netdisco will pay attention to the C<X_FORWARDED_PROTOCOL>,
|
||||
C<X_FORWARDED_HOST>, etc settings in HTML headers.
|
||||
|
||||
=head3 C<web_plugins>
|
||||
|
||||
Value: List of Modules. Default: List of bundled L<App::Netdisco::Web::Plugin> names.
|
||||
|
||||
Netdisco's plugin system allows the user more control over the user interface.
|
||||
Plugins can be distributed independently from Netdisco and are a better
|
||||
@@ -119,24 +138,462 @@ are used in the default Netdisco distribution.
|
||||
|
||||
You can override this to set your own list. If you only want to add to the
|
||||
default list then use C<extra_web_plugins>, which allows the Netdisco
|
||||
developers to update C<web_plugins> in a future release.
|
||||
developers to update default C<web_plugins> in a future release.
|
||||
|
||||
=head3 C<extra_web_plugins: List of String>
|
||||
Entries in the list will by default omit the leading
|
||||
C<App::Netdisco::Web::Plugin::> from the name. To override this for one entry,
|
||||
prefix it with a C<+> sign. You can also prefix with C<X::> to signify the
|
||||
alternate C<App::NetdiscoX::Web::Plugin::> namepsace.
|
||||
|
||||
Default: None
|
||||
=head3 C<extra_web_plugins>
|
||||
|
||||
Value: List of Modules. Default: Empty List.
|
||||
|
||||
List of additional L<App::Netdisco::Web::Plugin> names to load. See also the
|
||||
C<web_plugins> setting.
|
||||
|
||||
=head2 Netdisco Core
|
||||
|
||||
=head3 C<mibhome>
|
||||
|
||||
Value: Directory. Default: C<${HOME}/netdisco-mibs>.
|
||||
|
||||
Base directory in which to find C<mibdirs>. This is where C<netdisco-deploy>
|
||||
will drop MIB files.
|
||||
|
||||
=head3 C<mibdirs>
|
||||
|
||||
Value: List of Directories. Default: All subdirectories of C<mibhome>.
|
||||
|
||||
A list of subdirectories of C<mibhome> from which to load MIB files. You
|
||||
should always include C<rfc>. For example:
|
||||
|
||||
mibdirs:
|
||||
- rfc
|
||||
- cisco
|
||||
- foundry
|
||||
|
||||
=head3 C<community>
|
||||
|
||||
Value: List of Strings. Default: C<public>.
|
||||
|
||||
A list of read-only SNMP community strings to try on each device. The working
|
||||
community will be cached in the database.
|
||||
|
||||
=head3 C<community_rw>
|
||||
|
||||
Value: List of Strings. Default: C<private>.
|
||||
|
||||
A list of read-write SNMP community strings to try on each device. The working
|
||||
community will be cached in the database.
|
||||
|
||||
=head3 C<snmpver>
|
||||
|
||||
Value: C<1|2|3>. Default: 2.
|
||||
|
||||
Version of the SNMP protocol used when connecting to devices.
|
||||
|
||||
=head3 C<snmptimeout>
|
||||
|
||||
Value: Number. Default: 1000000.
|
||||
|
||||
Micro-seconds before connection retry in L<SNMP::Session>. 1000000
|
||||
micro-seconds = 1 second.
|
||||
|
||||
=head3 C<snmpretries>
|
||||
|
||||
Value: Number. Default: 2.
|
||||
|
||||
Number of times to retry connecting to a device before giving up.
|
||||
|
||||
=head3 C<discover_no>
|
||||
|
||||
Value: List of Network Identifiers. Default: Empty List.
|
||||
|
||||
IP addresses in the list will not be visited during device discovery. You can
|
||||
include hostnames, IP addresses and subnets (IPv4 or IPv6) in the list.
|
||||
|
||||
=head3 C<discover_only>
|
||||
|
||||
Value: List of Network Identifiers. Default: Empty List.
|
||||
|
||||
If present, device discovery will be limited to IP addresses matching entries
|
||||
in this list. You can include hostnames, IP addresses and subnets (IPv4 and
|
||||
IPv6).
|
||||
|
||||
=head3 C<discover_no_type>
|
||||
|
||||
Value: List of Strings. Default: None.
|
||||
|
||||
Place regular expression patterns here to exclude the discovery of certain
|
||||
devices based on the CDP/LLDP device type information. Good for excluding a
|
||||
whole device class like lightweight access points or IP phones that have CDP
|
||||
but don't talk SNMP. For example:
|
||||
|
||||
discover_no_type:
|
||||
- 'cisco\s+AIR-LAP'
|
||||
- '(?i)Cisco\s+IP\s+Phone'
|
||||
|
||||
=head3 C<macsuck_all_vlans>
|
||||
|
||||
Value: Boolean. Default: C<false>.
|
||||
|
||||
Set to macsuck all VLANs, not just the ones that are being used on ports.
|
||||
This is a debug option. Set this if you think that the option of not
|
||||
macsucking VLANs that aren't in use on device ports is some how interfering.
|
||||
|
||||
=head3 C<macsuck_no_unnamed>
|
||||
|
||||
Value: Boolean. Default: C<false>.
|
||||
|
||||
Set to true to skip macsuck-ing on VLANs which have no name set. This option
|
||||
may be useful on Cisco Catalyst family devices where ports are a member of a
|
||||
VLAN which is not defined in the VLAN database.
|
||||
|
||||
=head3 C<macsuck_bleed>
|
||||
|
||||
Value: Boolean. Default: C<false>.
|
||||
|
||||
Set to true will let nodes accumulate on uplink ports without topology
|
||||
information. This is a debug option to help you figure out your topology and
|
||||
generally should not be set.
|
||||
|
||||
=head3 C<store_wireless_client>
|
||||
|
||||
Value: Boolean. Default: C<true>.
|
||||
|
||||
Set to false to skip the wireless client information gathering. This is
|
||||
captured at macsuck time, so if you aren't using the information you can skip
|
||||
it.
|
||||
|
||||
=head3 C<ignore_interfaces>
|
||||
|
||||
Value: List of Strings. Default:
|
||||
|
||||
ignore_interfaces:
|
||||
- 'EOBC'
|
||||
- 'unrouted VLAN'
|
||||
- 'StackPort'
|
||||
- 'Control Plane Interface'
|
||||
- 'SPAN (S|R)P Interface'
|
||||
- 'StackSub'
|
||||
- 'netflow'
|
||||
- 'Vlan\d+-mpls layer'
|
||||
- 'BRI\S+-Bearer Channel'
|
||||
- 'BRI\S+-Physical'
|
||||
- 'BRI\S+-Signalling'
|
||||
- 'Embedded-Service-Engine\d+\/\d+'
|
||||
- 'Virtual-Template\d+'
|
||||
- 'Virtual-Access\d+'
|
||||
- '(E|T)\d \d\/\d\/\d'
|
||||
|
||||
If present, device ports whose names match fully any of the items in this list
|
||||
will be ignored by the discovery process.
|
||||
|
||||
Note this may have side effects - connected devices and nodes on those ports
|
||||
will in turn also not be discovered.
|
||||
|
||||
=head3 C<ignore_private_nets>
|
||||
|
||||
Value: Boolean. Default: C<false>.
|
||||
|
||||
Set to true to ignore device interfaces that are part of private nets (RFC
|
||||
1918).
|
||||
|
||||
=head3 C<reverse_sysname>
|
||||
|
||||
Value: Boolean. Default: C<false>.
|
||||
|
||||
Turn this on to have Netdisco do a reverse lookup of the device C<sysName.0>
|
||||
field to use as the management IP address for a device.
|
||||
|
||||
=head3 C<vlanctl>
|
||||
|
||||
Value: Boolean. Default: C<true>.
|
||||
|
||||
Set to false to prevent Netdisco from changing the default VLAN on an
|
||||
interface.
|
||||
|
||||
=head3 C<portctl_nophones>
|
||||
|
||||
Value: Boolean. Default: C<false>.
|
||||
|
||||
Set to true to make sure an IP Phone port never can be turned off/on.
|
||||
|
||||
=head3 C<portctl_vlans>
|
||||
|
||||
Value: Boolean. Default: C<false>.
|
||||
|
||||
Set to true to allow Netdisco to be able to disable VLAN trunk interfaces.
|
||||
|
||||
B<EXTREMELY VERY DANGEROUS>: Turning off a VLAN trunk link could take out most
|
||||
of your network.
|
||||
|
||||
=head3 C<portctl_uplinks>
|
||||
|
||||
Value: Boolean. Default: C<false>.
|
||||
|
||||
Set to true to allow Netdisco to be able to disable Uplinks. (Router
|
||||
Interfaces too)
|
||||
|
||||
B<EXTREMELY VERY DANGEROUS>: Turning off uplinks will take out chunks of your
|
||||
network.
|
||||
|
||||
=head3 C<no_port_control>
|
||||
|
||||
Value: Boolean. Default: C<false>.
|
||||
|
||||
Set to true to disable globally support for Port Control. Mainly useful for
|
||||
development to suppress web frontend job queue callbacks.
|
||||
|
||||
=head2 Backend Daemon
|
||||
|
||||
=head3 C<workers>
|
||||
|
||||
Value: Settings Tree. Default:
|
||||
|
||||
workers:
|
||||
interactives: 2
|
||||
pollers: 2
|
||||
sleep_time: 5
|
||||
|
||||
Control the activity of the backend daemon with this configuration setting.
|
||||
|
||||
C<interactives> and C<pollers> sets how many workers are started for
|
||||
interactive jobs (port control) and polling jobs (discover, macsuck, arpnip)
|
||||
on this node, respectively. Other nodes can have different settings.
|
||||
|
||||
C<sleep_time> is the number of seconds between polling the database to find
|
||||
new jobs. This is a balance between responsiveness and database load.
|
||||
|
||||
=head3 C<housekeeping>
|
||||
|
||||
Value: Settings Tree. Default: None.
|
||||
|
||||
If set, then this node's backend daemon will schedule polling jobs (discover,
|
||||
macsuck, arpnip, etc) in the central database. It's fine to have multiple
|
||||
nodes scheduling work for redundancy (but make sure they all have good NTP).
|
||||
|
||||
Note that this is independent of the Pollers configured in C<workers>. It's
|
||||
okay to have this node schedule housekeeping but not do any of the polling
|
||||
itself (C<pollers: 0>).
|
||||
|
||||
Work can be scheduled using C<cron> style notation, or a simple weekday and
|
||||
hour fields (which accept same types as C<cron> notation). For example:
|
||||
|
||||
housekeeping:
|
||||
discoverall:
|
||||
when: '0 9 * * *'
|
||||
arpwalk:
|
||||
when:
|
||||
min: 30
|
||||
macwalk:
|
||||
when:
|
||||
hour: '*/2'
|
||||
|
||||
=head2 Dancer Internal
|
||||
|
||||
=head1 UNSUPPORTED SETTINGS
|
||||
=head3 C<charset>
|
||||
|
||||
Value: String. Default: C<UTF-8>.
|
||||
|
||||
See L<Dancer::Config/"charset-string">.
|
||||
|
||||
=head3 C<warnings>
|
||||
|
||||
Value: Boolean. Default: C<false>.
|
||||
|
||||
Should warnings be considered as critical errors?
|
||||
|
||||
=head3 C<show_errors>
|
||||
|
||||
Value: Boolean. Default: C<false>.
|
||||
|
||||
Whether to show a stack trace when an error is caught in the web frontend.
|
||||
|
||||
=head3 C<engines>
|
||||
|
||||
Value: Settings Tree.
|
||||
|
||||
Useful for overriding the Template Toolkit settings, if you want.
|
||||
|
||||
=head3 C<layout>
|
||||
|
||||
Value: String. Default: C<main>.
|
||||
|
||||
Don't touch this.
|
||||
|
||||
=head3 C<plugins>
|
||||
|
||||
Value: Settings Tree.
|
||||
|
||||
Useful for overriding the Database configuration, but only if you know what
|
||||
you're doing.
|
||||
|
||||
=head3 C<session>
|
||||
|
||||
Value: String. Default: C<YAML>.
|
||||
|
||||
How to handle web sessions. Default is to store on disk so they can be shared
|
||||
between multiple web server processes (although it's slower).
|
||||
|
||||
=head3 C<template>
|
||||
|
||||
Value: String. Default: C<template_toolkit>.
|
||||
|
||||
Which engine to use for templating in the web frontend. Don't touch this.
|
||||
|
||||
=head3 C<route_cache>
|
||||
|
||||
Value: Boolean. Default: C<true>.
|
||||
|
||||
Whether to build a route cache for web requests, for better performance.
|
||||
|
||||
=head3 C<appname>
|
||||
|
||||
Value: String. Default: C<Netdisco>.
|
||||
|
||||
Don't touch this.
|
||||
|
||||
=head1 UNSUPPORTED (SO FAR)
|
||||
|
||||
These settings are from Netdisco 1.x but are yet to be supported in Netdisco
|
||||
2. If you really need the feature, please let the developers know.
|
||||
|
||||
=over 4
|
||||
|
||||
=item *
|
||||
|
||||
C<admin>
|
||||
|
||||
=item *
|
||||
|
||||
C<arpnip_min_age>
|
||||
|
||||
=item *
|
||||
|
||||
C<arpnip_no>
|
||||
|
||||
=item *
|
||||
|
||||
C<arpnip_only>
|
||||
|
||||
=item *
|
||||
|
||||
C<bulkwalk_no>
|
||||
|
||||
=item *
|
||||
|
||||
C<bulkwalk_off>
|
||||
|
||||
=item *
|
||||
|
||||
C<bulkwalk_repeaters>
|
||||
|
||||
=item *
|
||||
|
||||
C<col_xxx_show>
|
||||
|
||||
=item *
|
||||
|
||||
C<discover_min_age>
|
||||
|
||||
=item *
|
||||
|
||||
C<expire_devices>
|
||||
|
||||
=item *
|
||||
|
||||
C<expire_nodes>
|
||||
|
||||
=item *
|
||||
|
||||
C<expire_nodes_archive>
|
||||
|
||||
=item *
|
||||
|
||||
C<get_community>
|
||||
|
||||
=item *
|
||||
|
||||
C<macsuck_min_age>
|
||||
|
||||
=item *
|
||||
|
||||
C<macsuck_no>
|
||||
|
||||
=item *
|
||||
|
||||
C<macsuck_no_devicevlan>
|
||||
|
||||
=item *
|
||||
|
||||
C<macsuck_no_vlan>
|
||||
|
||||
=item *
|
||||
|
||||
C<macsuck_only>
|
||||
|
||||
=item *
|
||||
|
||||
C<macsuck_timeout>
|
||||
|
||||
=item *
|
||||
|
||||
C<nonincreasing>
|
||||
|
||||
=item *
|
||||
|
||||
C<port_info>
|
||||
|
||||
=item *
|
||||
|
||||
C<portctl_timeout>
|
||||
|
||||
=item *
|
||||
|
||||
C<portcontrol>
|
||||
|
||||
=item *
|
||||
|
||||
C<snmpforce_v1>
|
||||
|
||||
=item *
|
||||
|
||||
C<snmpforce_v2>
|
||||
|
||||
=item *
|
||||
|
||||
C<snmpforce_v3>
|
||||
|
||||
=item *
|
||||
|
||||
C<store_modules>
|
||||
|
||||
=item *
|
||||
|
||||
C<timeout>
|
||||
|
||||
=item *
|
||||
|
||||
C<v3_user>
|
||||
|
||||
=item *
|
||||
|
||||
C<v3_users>
|
||||
|
||||
=item *
|
||||
|
||||
C<v3_users_rw>
|
||||
|
||||
=item *
|
||||
|
||||
C<web_console_models>
|
||||
|
||||
=item *
|
||||
|
||||
C<web_console_vendors>
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
@@ -242,8 +242,8 @@ port names).
|
||||
If you're working on code in the web application, it's possible to have the
|
||||
app restart itself each time you save a file in your editor. The following
|
||||
command will watch the C<lib> and C<share> folder trees for changes, and you
|
||||
probably want to switch to the C<development.yml> dancer configuration for
|
||||
additional logging:
|
||||
probably want to edit your C<deployment.yml> configuration to enable
|
||||
additional logging (see L<App::Netdisco::Manual::Configuration>):
|
||||
|
||||
DANCER_ENVIRONMENT=development DBIC_TRACE_PROFILE=console DBIC_TRACE=1 \
|
||||
~/bin/localenv starman -R lib,share bin/netdisco-web-fg
|
||||
|
||||
@@ -4,10 +4,25 @@ App::Netdisco::Manual::ReleaseNotes - Release Notes
|
||||
|
||||
=head1 Introduction
|
||||
|
||||
This document will list only the most important changes with each release of
|
||||
This document will list only the most significant changes with each release of
|
||||
Netdisco. You are B<STRONGLY> recommended to read this document each time you
|
||||
install and upgrade.
|
||||
|
||||
=head1 2.008000
|
||||
|
||||
=head2 Heath Advice
|
||||
|
||||
This release contains the first version of our new poller, which handles
|
||||
device and node discovery. Please make sure to backup any existing Netdisco
|
||||
database before trying it out.
|
||||
|
||||
=head2 Other Changes
|
||||
|
||||
You can remove any settings from C<~/environments/deployment.yml> which you
|
||||
didn't edit or add to the file yourself. All defaults are now properly
|
||||
embedded within the application. See the new C<deployment.yml> sample which
|
||||
ships with this distribution for an example.
|
||||
|
||||
=head1 2.006000
|
||||
|
||||
=head2 Incompatible Changes
|
||||
|
||||
5
Netdisco/lib/App/Netdisco/Util/Noop.pm
Normal file
5
Netdisco/lib/App/Netdisco/Util/Noop.pm
Normal file
@@ -0,0 +1,5 @@
|
||||
package App::Netdisco::Util::Noop;
|
||||
|
||||
# used for testing library access.
|
||||
|
||||
1;
|
||||
@@ -68,8 +68,8 @@ sub vlan_reconfig_check {
|
||||
|
||||
=item *
|
||||
|
||||
Permission check that C<allow_uplinks> is true in Netdisco config, if C<$port>
|
||||
is an uplink.
|
||||
Permission check that C<portctl_uplinks> is true in Netdisco config, if
|
||||
C<$port> is an uplink.
|
||||
|
||||
=item *
|
||||
|
||||
@@ -97,7 +97,7 @@ sub port_reconfig_check {
|
||||
|
||||
# uplink check
|
||||
return "forbidden: port [$name] on [$ip] is an uplink"
|
||||
if $port->remote_type and not $has_phone and not setting('allow_uplinks');
|
||||
if $port->remote_type and not $has_phone and not setting('portctl_uplinks');
|
||||
|
||||
# phone check
|
||||
return "forbidden: port [$name] on [$ip] is a phone"
|
||||
|
||||
@@ -147,7 +147,7 @@ sub _try_connect {
|
||||
}
|
||||
|
||||
sub _build_mibdirs {
|
||||
my $home = (setting('mibhome') || $ENV{NETDISCO_HOME} || $ENV{HOME});
|
||||
my $home = (setting('mibhome') || dir(($ENV{NETDISCO_HOME} || $ENV{HOME}), 'netdisco-mibs'));
|
||||
return map { dir($home, $_) }
|
||||
@{ setting('mibdirs') || _get_mibdirs_content($home) };
|
||||
}
|
||||
|
||||
@@ -20,7 +20,8 @@ hook 'before' => sub {
|
||||
->find(session('user')));
|
||||
|
||||
# really just for dev work, to quieten the logs
|
||||
var('user')->port_control(0) if setting('no_port_control');
|
||||
var('user')->port_control(0)
|
||||
if var('user') and setting('no_port_control');
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -164,16 +164,16 @@ true;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
App::Netdisco::Web::Plugin - Plugin subsystem for App::Netdisco Web UI components
|
||||
App::Netdisco::Web::Plugin - Netdisco Web UI components
|
||||
|
||||
=head1 Introduction
|
||||
|
||||
L<App::Netdisco>'s plugin subsystem allows the user more control of Netdisco
|
||||
UI components displayed in the web browser. Plugins can be distributed
|
||||
L<App::Netdisco>'s plugin system allows you more control of what Netdisco
|
||||
components are displayed in the web interface. Plugins can be distributed
|
||||
independently from Netdisco and are a better alternative to source code
|
||||
patches.
|
||||
|
||||
The following UI components are implemented as plugins:
|
||||
The following web interface components are implemented as plugins:
|
||||
|
||||
=over 4
|
||||
|
||||
@@ -189,6 +189,14 @@ Tabs for Search and Device pages
|
||||
|
||||
Reports (pre-canned searches)
|
||||
|
||||
=item *
|
||||
|
||||
Additional Device Port Columns
|
||||
|
||||
=item *
|
||||
|
||||
Admin Menu function (job control, manual topology, pseudo devices)
|
||||
|
||||
=back
|
||||
|
||||
This document explains how to configure which plugins are loaded. See
|
||||
@@ -196,10 +204,13 @@ L<App::Netdisco::Manual::WritingPlugins> if you want to develop new plugins.
|
||||
|
||||
=head1 Application Configuration
|
||||
|
||||
In the main C<config.yml> file for App::Netdisco (located in C<share/...>)
|
||||
you'll find the C<web_plugins> configuration directive. This lists, in YAML
|
||||
format, a set of Perl module names (or partial names) which are the plugins to
|
||||
be loaded. For example:
|
||||
Netdisco configuration supports a C<web_plugins> directive along with the
|
||||
similar C<extra_web_plugins>. These list, in YAML format, the set of Perl
|
||||
module names which are the plugins to be loaded. Each item injects one part of
|
||||
the Netdisco web user interface.
|
||||
|
||||
You can override these settings to add, change, or remove entries from the
|
||||
default lists. Here is an example of the C<web_plugins> list:
|
||||
|
||||
web_plugins:
|
||||
- Inventory
|
||||
@@ -210,19 +221,28 @@ be loaded. For example:
|
||||
- Device::Details
|
||||
- Device::Ports
|
||||
|
||||
When the name is specified as above, App::Netdisco automatically prepends
|
||||
"C<App::Netdisco::Web::Plugin::>" to the name. This makes, for example,
|
||||
L<App::Netdisco::Web::Plugin::Inventory>. This is the module which is loaded
|
||||
to add a user interface component.
|
||||
Any change should go into your local C<deployment.yml> configuration file. If
|
||||
you want to view the default settings, see the C<share/config.yml> file in the
|
||||
C<App::Netdisco> distribution.
|
||||
|
||||
=head1 How to Configure
|
||||
|
||||
The C<extra_web_plugins> setting is empty, and used only if you want to add
|
||||
new plugins but not change the set enabled by default. If you do want to add
|
||||
to or remove from the default set, then create a version of C<web_plugins>
|
||||
instead.
|
||||
|
||||
Netdisco prepends "C<App::Netdisco::Web::Plugin::>" to any entry in the list.
|
||||
For example, "C<Inventory>" will load the
|
||||
C<App::Netdisco::Web::Plugin::Inventory> module.
|
||||
|
||||
Such plugin modules can either ship with the App::Netdisco distribution
|
||||
itself, or be installed separately. Perl uses the standard C<@INC> path
|
||||
searching mechanism to load the plugin modules.
|
||||
|
||||
If an entry in the C<web_plugins> list starts with a "C<+>" (plus) sign then
|
||||
App::Netdisco attemps to load the module as-is, without prepending anything to
|
||||
the name. This allows you to have App::Netdiso web UI plugins in other
|
||||
namespaces:
|
||||
If an entry in the list starts with a "C<+>" (plus) sign then Netdisco attemps
|
||||
to load the module as-is, without prepending anything to the name. This allows
|
||||
you to have App::Netdiso web UI plugins in other namespaces:
|
||||
|
||||
web_plugins:
|
||||
- Inventory
|
||||
@@ -230,21 +250,13 @@ namespaces:
|
||||
- Device::Details
|
||||
- +My::Other::Netdisco::Web::Component
|
||||
|
||||
The order of the entries in C<web_plugins> is significant. Unsurprisingly, the
|
||||
modules are loaded in order. Therefore Navigation Bar items appear in the
|
||||
order listed, and Tabs appear on the Search and Device pages in the order
|
||||
listed.
|
||||
The order of the entries is significant. Unsurprisingly, the modules are
|
||||
loaded in order. Therefore Navigation Bar items appear in the order listed,
|
||||
and Tabs appear on the Search and Device pages in the order listed, and so on.
|
||||
|
||||
The consequence of this is that if you want to change the order (or add or
|
||||
remove entries) then simply edit the C<web_plugins> setting. In fact, we
|
||||
recommend adding this setting to your C<< <environment>.yml >> file and
|
||||
leaving the C<config.yml> file alone. Your Environment's version will take
|
||||
prescedence.
|
||||
|
||||
Finally, if you want to add components without completely overriding the
|
||||
C<web_plugins> setting, use the C<extra_web_plugins> setting instead in your
|
||||
Environment configuration. Any Navigation Bar items or Page Tabs are added
|
||||
after those in C<web_plugins>.
|
||||
Finally, you can also prepend module names with "C<X::>", to support the
|
||||
"Netdisco extension" namespace. For example, "C<X::Observium>" will load the
|
||||
L<App::NetdiscoX::Web::Plugin::Observium> module.
|
||||
|
||||
=cut
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ ajax '/ajax/portcontrol' => sub {
|
||||
send_error('Forbidden', 403)
|
||||
unless var('user')->port_control;
|
||||
send_error('No device/port/field', 400)
|
||||
unless param('device') and param('port') and param('field');
|
||||
unless param('device') and (param('port') or param('field'));
|
||||
|
||||
my $log = sprintf 'd:[%s] p:[%s] f:[%s]. a:[%s] v[%s]',
|
||||
param('device'), (param('port') || ''), param('field'),
|
||||
|
||||
Reference in New Issue
Block a user