fix very wrong rancid conf parser

This commit is contained in:
Oliver Gorwits
2018-02-01 18:02:34 +00:00
parent 340773ecd1
commit e5e2fc4ac4

View File

@@ -7,7 +7,7 @@ use App::Netdisco::Worker::Plugin;
use aliased 'App::Netdisco::Worker::Status'; use aliased 'App::Netdisco::Worker::Status';
use Path::Class; use Path::Class;
use List::Util 'first'; use List::Util qw/pairkeys pairfirst/;
use File::Slurper 'write_text'; use File::Slurper 'write_text';
use App::Netdisco::Util::Permission 'check_acl_no'; use App::Netdisco::Util::Permission 'check_acl_no';
@@ -30,8 +30,8 @@ register_worker({ phase => 'main' }, sub {
\['age(now(), last_discover) > ?::interval', $down_age] }, \['age(now(), last_discover) > ?::interval', $down_age] },
}); });
$config->{groups} ||= [{ default => 'any' }]; $config->{groups} ||= { default => 'any' };
$config->{vendormap} ||= []; $config->{vendormap} ||= {};
my $routerdb = {}; my $routerdb = {};
while (my $d = $devices->next) { while (my $d = $devices->next) {
@@ -40,14 +40,12 @@ register_worker({ phase => 'main' }, sub {
$name =~ s/$domain_suffix$// $name =~ s/$domain_suffix$//
if check_acl_no($d, $config->{by_hostname}); if check_acl_no($d, $config->{by_hostname});
my $vmatch = my ($group) =
first { check_acl_no($d, (values %$_)[0]) } @{$config->{vendormap}}; pairkeys pairfirst { check_acl_no($d, $b) } %{ $config->{groups} };
my $vendor = $vmatch
? (keys %$vmatch)[0] : $d->vendor;
my $gmatch = my ($vendor) =
first { check_acl_no($d, (values %$_)[0]) } @{$config->{groups}}; (pairkeys pairfirst { check_acl_no($d, $b) } %{ $config->{vendormap} })
my $group = (keys %$gmatch)[0]; || $d->vendor;
push @{$routerdb->{$group}}, push @{$routerdb->{$group}},
(sprintf "%s${delimiter}%s${delimiter}%s", $name, $vendor, (sprintf "%s${delimiter}%s${delimiter}%s", $name, $vendor,