simplify discover options to only discoverall and discover
This commit is contained in:
@@ -815,8 +815,8 @@ sub discover_new_neighbors {
|
|||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
# could fail if queued job already exists
|
# could fail if queued job already exists
|
||||||
|
try {
|
||||||
schema('netdisco')->resultset('Admin')->create({
|
schema('netdisco')->resultset('Admin')->create({
|
||||||
device => $ip,
|
device => $ip,
|
||||||
action => 'discover',
|
action => 'discover',
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ sub capacity_for {
|
|||||||
debug "checking local capacity for action $action";
|
debug "checking local capacity for action $action";
|
||||||
|
|
||||||
my $action_map = {
|
my $action_map = {
|
||||||
Poller => [qw/refresh discover discovernew discover_neighbors arpnip macsuck/],
|
Poller => [qw/discoverall discover arpnip macsuck/],
|
||||||
Interactive => [qw/location contact portcontrol portname vlan power/],
|
Interactive => [qw/location contact portcontrol portname vlan power/],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ my $fqdn = hostfqdn || 'localhost';
|
|||||||
|
|
||||||
my $role_map = {
|
my $role_map = {
|
||||||
(map {$_ => 'Poller'}
|
(map {$_ => 'Poller'}
|
||||||
qw/refresh discover discovernew discover_neighbors arpnip macsuck/),
|
qw/discoverall discover arpnip macsuck/),
|
||||||
(map {$_ => 'Interactive'}
|
(map {$_ => 'Interactive'}
|
||||||
qw/location contact portcontrol portname vlan power/)
|
qw/location contact portcontrol portname vlan power/)
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ use Role::Tiny;
|
|||||||
use namespace::clean;
|
use namespace::clean;
|
||||||
|
|
||||||
# queue a discover job for all devices known to Netdisco
|
# queue a discover job for all devices known to Netdisco
|
||||||
sub refresh {
|
sub discoverall {
|
||||||
my ($self, $job) = @_;
|
my ($self, $job) = @_;
|
||||||
|
|
||||||
my $devices = schema('netdisco')->resultset('Device')->get_column('ip');
|
my $devices = schema('netdisco')->resultset('Device')->get_column('ip');
|
||||||
@@ -43,6 +43,7 @@ sub refresh {
|
|||||||
return job_done("Queued discover job for all devices");
|
return job_done("Queued discover job for all devices");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# queue a discover job for one device, and its *new* neighbors
|
||||||
sub discover {
|
sub discover {
|
||||||
my ($self, $job) = @_;
|
my ($self, $job) = @_;
|
||||||
|
|
||||||
@@ -65,61 +66,9 @@ sub discover {
|
|||||||
store_vlans($device, $snmp);
|
store_vlans($device, $snmp);
|
||||||
store_power($device, $snmp);
|
store_power($device, $snmp);
|
||||||
store_modules($device, $snmp);
|
store_modules($device, $snmp);
|
||||||
store_neighbors($device, $snmp);
|
discover_new_neighbors($device, $snmp);
|
||||||
|
|
||||||
return job_done("Ended discover for ". $host->addr);
|
return job_done("Ended discover for ". $host->addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
# run discover_neighbors on all known devices, and run discover on any
|
|
||||||
# newly found devices.
|
|
||||||
sub discovernew {
|
|
||||||
my ($self, $job) = @_;
|
|
||||||
|
|
||||||
my $devices = schema('netdisco')->resultset('Device')->get_column('ip');
|
|
||||||
my $jobqueue = schema('netdisco')->resultset('Admin');
|
|
||||||
|
|
||||||
schema('netdisco')->txn_do(sub {
|
|
||||||
# clean up user submitted jobs older than 1min,
|
|
||||||
# assuming skew between schedulers' clocks is not greater than 1min
|
|
||||||
$jobqueue->search({
|
|
||||||
action => 'discover_neighbors',
|
|
||||||
status => 'queued',
|
|
||||||
entered => { '<' => \"(now() - interval '1 minute')" },
|
|
||||||
})->delete;
|
|
||||||
|
|
||||||
# is scuppered by any user job submitted in last 1min (bad), or
|
|
||||||
# any similar job from another scheduler (good)
|
|
||||||
$jobqueue->populate([
|
|
||||||
map {{
|
|
||||||
device => $_,
|
|
||||||
action => 'discover_neighbors',
|
|
||||||
status => 'queued',
|
|
||||||
}} ($devices->all)
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
|
|
||||||
return job_done("Queued discover_neighbors job for all devices");
|
|
||||||
}
|
|
||||||
|
|
||||||
sub discover_neighbors {
|
|
||||||
my ($self, $job) = @_;
|
|
||||||
|
|
||||||
my $host = NetAddr::IP::Lite->new($job->device);
|
|
||||||
my $device = get_device($host->addr);
|
|
||||||
|
|
||||||
if ($device->in_storage
|
|
||||||
and $device->vendor and $device->vendor eq 'netdisco') {
|
|
||||||
return job_done("Skipped discover for pseudo-device $host");
|
|
||||||
}
|
|
||||||
|
|
||||||
my $snmp = snmp_connect($device);
|
|
||||||
if (!defined $snmp) {
|
|
||||||
return job_error("discover_neighbors failed: could not SNMP connect to $host");
|
|
||||||
}
|
|
||||||
|
|
||||||
discover_new_neighbors($device, $snmp);
|
|
||||||
|
|
||||||
return job_done("Ended discover_neighbors for". $host->addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
1;
|
1;
|
||||||
|
|||||||
@@ -11,8 +11,7 @@ use namespace::clean;
|
|||||||
|
|
||||||
my $jobactions = {
|
my $jobactions = {
|
||||||
map {$_ => undef} qw/
|
map {$_ => undef} qw/
|
||||||
refresh
|
discoverall
|
||||||
discovernew
|
|
||||||
/
|
/
|
||||||
# saveconfigs
|
# saveconfigs
|
||||||
# macwalk
|
# macwalk
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ App::Netdisco::Manual::Configuration - How to Configure Netdisco
|
|||||||
=head1 INTRODUCTION
|
=head1 INTRODUCTION
|
||||||
|
|
||||||
The configuration files for Netdisco come with all options set to sensible
|
The configuration files for Netdisco come with all options set to sensible
|
||||||
default values, and just a few that you initially must set yourself.
|
default values, and just a few that you must initially set yourself.
|
||||||
|
|
||||||
However as you use the system over time, there are many situations where you
|
However as you use the system over time, there are many situations where you
|
||||||
might want to tune the behaviour of Netdisco, and for that we have a lot of
|
might want to tune the behaviour of Netdisco, and for that we have a lot of
|
||||||
|
|||||||
Reference in New Issue
Block a user