support pseudo/offline device renumber and also pseudo device autovivification
This commit is contained in:
@@ -94,13 +94,17 @@ Returns C<undef> if the connection fails.
|
|||||||
sub test_connection {
|
sub test_connection {
|
||||||
my ($class, $ip) = @_;
|
my ($class, $ip) = @_;
|
||||||
my $addr = NetAddr::IP::Lite->new($ip) or return undef;
|
my $addr = NetAddr::IP::Lite->new($ip) or return undef;
|
||||||
|
|
||||||
# avoid renumbering to localhost loopbacks
|
# avoid renumbering to localhost loopbacks
|
||||||
return undef if $addr->addr eq '0.0.0.0'
|
return undef if $addr->addr eq '0.0.0.0'
|
||||||
or check_acl_no($addr->addr, 'group:__LOOPBACK_ADDRESSES__');
|
or check_acl_no($addr->addr, 'group:__LOOPBACK_ADDRESSES__');
|
||||||
|
|
||||||
my $device = schema(vars->{'tenant'})->resultset('Device')
|
my $device = schema(vars->{'tenant'})->resultset('Device')
|
||||||
->new_result({ ip => $addr->addr }) or return undef;
|
->new_result({ ip => $addr->addr }) or return undef;
|
||||||
|
|
||||||
my $readers = $class->instance->readers or return undef;
|
my $readers = $class->instance->readers or return undef;
|
||||||
return $readers->{$device->ip} if exists $readers->{$device->ip};
|
return $readers->{$device->ip} if exists $readers->{$device->ip};
|
||||||
|
|
||||||
debug sprintf 'snmp reader cache warm: [%s]', $device->ip;
|
debug sprintf 'snmp reader cache warm: [%s]', $device->ip;
|
||||||
return ($readers->{$device->ip} = _snmp_connect_generic('read', $device));
|
return ($readers->{$device->ip} = _snmp_connect_generic('read', $device));
|
||||||
}
|
}
|
||||||
@@ -167,10 +171,12 @@ sub _snmp_connect_generic {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# support for offline cache
|
# support for offline cache
|
||||||
if ($device->is_pseudo) {
|
|
||||||
my $pseudo_cache = catfile( catdir(($ENV{NETDISCO_HOME} || $ENV{HOME}), 'logs', 'snapshots'), $device->ip );
|
my $pseudo_cache = catfile( catdir(($ENV{NETDISCO_HOME} || $ENV{HOME}), 'logs', 'snapshots'), $device->ip );
|
||||||
|
if (-f $pseudo_cache and ($device->is_pseudo or ! $device->in_storage)) {
|
||||||
$snmp_args{Cache} = thaw( decode_base64( read_text($pseudo_cache) ) );
|
$snmp_args{Cache} = thaw( decode_base64( read_text($pseudo_cache) ) );
|
||||||
$snmp_args{Offline} = 1;
|
$snmp_args{Offline} = 1;
|
||||||
|
# support pseudo/offline device renumber and also pseudo device autovivification
|
||||||
|
$device->set_column(is_pseudo => \'true') if ! $device->is_pseudo;
|
||||||
debug sprintf 'snmp transport running in offline mode for: [%s]', $device->ip;
|
debug sprintf 'snmp transport running in offline mode for: [%s]', $device->ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user