App-Netdisco
view release on metacpan or search on metacpan
lib/App/Netdisco/Configuration.pm view on Meta::CPAN
and config->{'sidebar_defaults'}->{'device_netmap'}->{'too_many_devices'}->{'default'} != 1000;
delete config->{'sidebar_defaults'}->{'device_netmap'}->{'too_many_devices'};
config->{'devport_vlan_limit'} =
config->{'deviceport_vlan_membership_threshold'}
if setting('deviceport_vlan_membership_threshold')
and not setting('devport_vlan_limit');
delete config->{'deviceport_vlan_membership_threshold'};
# portctl_native_vlan used to be called vlanctl
config->{'portctl_native_vlan'} ||= config->{'vlanctl'};
delete config->{'vlanctl'};
config->{'schedule'} = config->{'housekeeping'}
if setting('housekeeping') and not setting('schedule');
delete config->{'housekeeping'};
# used to have separate types of worker
if (exists setting('workers')->{interactives}
or exists setting('workers')->{pollers}) {
setting('workers')->{tasks} ||=
(setting('workers')->{pollers} || 0)
+ (setting('workers')->{interactives} || 0);
delete setting('workers')->{pollers};
delete setting('workers')->{interactives};
}
# allow container orchestrators to pin worker count via env (e.g. scheduler pod sets this to 0)
if (exists $ENV{NETDISCO_WORKERS_TASKS}) {
setting('workers')->{tasks} = int($ENV{NETDISCO_WORKERS_TASKS});
}
# moved the timeout setting
setting('workers')->{'timeout'} = setting('timeout')
if defined setting('timeout')
and !defined setting('workers')->{'timeout'};
# 0 for workers max_deferrals and retry_after is like disabling
# but we need to fake it with special values
setting('workers')->{'max_deferrals'} ||= (2**30);
setting('workers')->{'retry_after'} ||= '100 years';
# schedule expire used to be called expiry
setting('schedule')->{expire} ||= setting('schedule')->{expiry}
if setting('schedule') and exists setting('schedule')->{expiry};
delete config->{'schedule'}->{'expiry'} if setting('schedule');
# upgrade reports config from hash to list
if (setting('reports') and ref {} eq ref setting('reports')) {
config->{'reports'} = [ map {{
tag => $_,
%{ setting('reports')->{$_} }
}} keys %{ setting('reports') } ];
}
# add system_reports onto reports
config->{'reports'} = [ @{setting('system_reports')}, @{setting('reports')} ];
#Â upgrade bare bind_params to dict
foreach my $r ( @{setting('reports')} ) {
next unless exists $r->{bind_params};
my $new_bind_params = [ map {ref $_ ? $_ : {param => $_}} @{ $r->{bind_params} } ];
$r->{'bind_params'} = $new_bind_params;
}
# set swagger ui location
#config->{plugins}->{Swagger}->{ui_dir} =
#dir(dist_dir('App-Netdisco'), 'share', 'public', 'swagger-ui')->absolute;
# setup helpers for when request->uri_for() isn't available
# (for example when inside swagger_path())
config->{url_base}
= URI::Based->new((config->{path} eq '/') ? '' : config->{path});
config->{api_base}
= config->{url_base}->with('/api/v1')->path;
#Â device custom_fields with snmp_object creates a hook
my @new_dcf = ();
my @new_hooks = @{ setting('hooks') };
foreach my $field (@{ setting('custom_fields')->{'device'} }) {
next unless $field->{'name'};
if (not exists $field->{'snmp_object'} or not $field->{'snmp_object'}) {
push @new_dcf, $field;
next;
}
#Â snmp_object implies JSON content in the field
$field->{'json_list'} = true;
#Â snmp_object implies user should not edit in the web
$field->{'editable'} = false;
push @new_hooks, {
type => 'exec',
event => 'discover',
with => {
#Â get JSON format of the snmp_object
cmd => (sprintf q![%% ndo %%] show -d '[%% ip %%]' -e %s --quiet!
#Â this jq will: promote null to [], promote bare string to ["str"], collapse obj to list
.q! | jq -cjM '. // [] | if type=="string" then [.] else . end | [ .[] ] | sort'!
#Â send the JSON output into device custom_field (action inline)
.q! | [%% ndo %%] %s --enqueue -d '[%% ip %%]' -e '@-' --quiet!,
$field->{'snmp_object'}, ('cf_'. $field->{'name'})),
},
filter => {
no => $field->{'no'},
only => $field->{'only'},
},
};
push @new_dcf, $field;
}
#Â #1040 change with-nodes to be job hook
foreach my $action (qw(macsuck arpnip)) {
push @new_hooks, {
type => 'exec',
event => 'new_device',
with => {
cmd => (sprintf q![%% ndo %%] %s --enqueue -d '[%% ip %%]' --quiet!, $action)
}
};
}
( run in 0.814 second using v1.01-cache-2.11-cpan-2398b32b56e )