Give Pseudo Devices better OS, OS ver, Port Descr, Discovered, and DNS Name

* started pseudodevice rework
* give them a type, os, os_ver and num_ports
  * os_ver will be the netdisco version in which they were created
* give their ports the same value for device_port.descr as device_port.port
* add db update to fill out those fields if they are null, which is most likely
* update last_discover if you make changes to the device
* num_ports will not be updates by the db script, neither will device_port.descr

* use device.name, not device.dns for pseudo

* at least try and get reverse dns for pseudo, works if there is one

* add db revision to manifest

* take dns no config into account

* new meta

* new version

Co-authored-by: Oliver Gorwits <ollyg@users.noreply.github.com>
This commit is contained in:
nick n
2021-11-06 22:52:59 +01:00
committed by GitHub
parent dc1f76c1aa
commit 636aa07f2d
5 changed files with 40 additions and 10 deletions

View File

@@ -152,7 +152,7 @@
},
"App::Netdisco::DB" : {
"file" : "lib/App/Netdisco/DB.pm",
"version" : "66"
"version" : "67"
},
"App::Netdisco::DB::ExplicitLocking" : {
"file" : "lib/App/Netdisco/DB/ExplicitLocking.pm"
@@ -855,7 +855,7 @@
},
"homepage" : "http://netdisco.org/",
"license" : [
"http://opensource.org/licenses/bsd-license.php"
"http://opensource.org/licenses/BSD-3-Clause"
],
"repository" : {
"url" : "https://github.com/netdisco/netdisco"

View File

@@ -38,7 +38,7 @@ provides:
file: lib/App/Netdisco/Configuration.pm
App::Netdisco::DB:
file: lib/App/Netdisco/DB.pm
version: '66'
version: '67'
App::Netdisco::DB::ExplicitLocking:
file: lib/App/Netdisco/DB/ExplicitLocking.pm
App::Netdisco::DB::Result:
@@ -593,7 +593,7 @@ resources:
MailingList: https://lists.sourceforge.net/lists/listinfo/netdisco-users
bugtracker: https://github.com/netdisco/netdisco/issues
homepage: http://netdisco.org/
license: http://opensource.org/licenses/bsd-license.php
license: http://opensource.org/licenses/BSD-3-Clause
repository: https://github.com/netdisco/netdisco
version: '2.050003'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'

View File

@@ -7,7 +7,7 @@ use Time::Piece; # for OO localtime
use base 'Exporter';
our @EXPORT = ();
our @EXPORT_OK = qw/update_stats/;
our @EXPORT_OK = qw/pretty_version update_stats/;
our %EXPORT_TAGS = (all => \@EXPORT_OK);
=head1 NAME
@@ -78,10 +78,23 @@ sub update_stats {
});
}
# take perl or pg versions and make pretty
=head2 pretty_version ( $versionstring , $seglen )
Splits a string (only numbers and dots allowed) into a number of parts which
are seglen long, then removes all leading zeros from each part and returns
the parts joined by dots as one string.
Returns the original versionstring if unallowed characters are found or seglen
is negative.
Returns C<undef> if seglen is zero.
=cut
sub pretty_version {
my ($version, $seglen) = @_;
return unless $version and $seglen;
return $version unless $seglen > 0;
return $version if $version !~ m/^[0-9.]+$/;
$version =~ s/\.//g;
$version = (join '.', reverse map {scalar reverse}

View File

@@ -5,6 +5,8 @@ use Dancer::Plugin::Ajax;
use Dancer::Plugin::DBIC;
use Dancer::Plugin::Auth::Extensible;
use App::Netdisco::Util::DNS 'hostname_from_ip';
use App::Netdisco::Util::Statistics 'pretty_version';
use App::Netdisco::Web::Plugin;
use NetAddr::IP::Lite ':lower';
@@ -34,8 +36,13 @@ ajax '/ajax/control/admin/pseudodevice/add' => require_role admin => sub {
my $device = schema('netdisco')->resultset('Device')
->create({
ip => param('ip'),
dns => (hostname_from_ip(param('ip')) || ''),
name => param('name'),
vendor => 'netdisco',
model => 'pseudodevice',
num_ports => param('ports'),
os => 'netdisco',
os_ver => pretty_version($App::Netdisco::VERSION, 3),
layers => param('layers'),
last_discover => \'now()',
is_pseudo => \'true',
@@ -43,8 +50,8 @@ ajax '/ajax/control/admin/pseudodevice/add' => require_role admin => sub {
return unless $device;
$device->ports->populate([
[qw/port type/],
map {["Port$_", 'other']} @{[1 .. param('ports')]},
[qw/port type descr/],
map {["Port$_", 'other', "Port$_"]} @{[1 .. param('ports')]},
]);
# device_ip table is used to show whether topo is "broken"
@@ -68,8 +75,8 @@ ajax '/ajax/control/admin/pseudodevice/update' => require_role admin => sub {
if (param('ports') > $count) {
my $start = $count + 1;
$device->ports->populate([
[qw/port type/],
map {["Port$_", 'other']} @{[$start .. param('ports')]},
[qw/port type descr/],
map {["Port$_", 'other', "Port$_"]} @{[$start .. param('ports')]},
]);
}
elsif (param('ports') < $count) {
@@ -88,9 +95,13 @@ ajax '/ajax/control/admin/pseudodevice/update' => require_role admin => sub {
})->delete;
}
}
$device->update({num_ports => param('ports')});
# also set layers
$device->update({layers => param('layers')});
# and update last_discover, since device properties changed
$device->update({last_discover => \'now()'});
});
};

View File

@@ -6,4 +6,10 @@ UPDATE device SET is_pseudo = false;
UPDATE device SET is_pseudo = true WHERE vendor = 'netdisco';
UPDATE device SET model = 'pseudodevice' WHERE vendor = 'netdisco';
UPDATE device SET os_ver = '2.51.0' WHERE vendor = 'netdisco' AND os_ver IS NULL;
UPDATE device SET os = 'netdisco' WHERE vendor = 'netdisco' AND os IS NULL;
COMMIT;