implementation of store_modules

This commit is contained in:
Oliver Gorwits
2013-04-04 19:52:37 +01:00
parent c2ac19e647
commit df68ff0890
4 changed files with 79 additions and 2 deletions

View File

@@ -110,6 +110,14 @@ Returns the set of ports on this Device.
__PACKAGE__->has_many( ports => 'App::Netdisco::DB::Result::DevicePort', 'ip' ); __PACKAGE__->has_many( ports => 'App::Netdisco::DB::Result::DevicePort', 'ip' );
=head2 modules
Returns the set chassis modules on this Device.
=cut
__PACKAGE__->has_many( modules => 'App::Netdisco::DB::Result::DeviceModule', 'ip' );
=head2 power_modules =head2 power_modules
Returns the set of power modules on this Device. Returns the set of power modules on this Device.

View File

@@ -54,6 +54,15 @@ __PACKAGE__->set_primary_key("ip", "index");
# Created by DBIx::Class::Schema::Loader v0.07015 @ 2012-01-07 14:20:02 # Created by DBIx::Class::Schema::Loader v0.07015 @ 2012-01-07 14:20:02
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:nuwxZBoiip9trdJFmgk3Fw # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:nuwxZBoiip9trdJFmgk3Fw
=head1 RELATIONSHIPS
=head2 device
Returns the entry from the C<device> table on which this VLAN entry was discovered.
=cut
__PACKAGE__->belongs_to( device => 'App::Netdisco::DB::Result::Device', 'ip' );
# You can replace this text with custom code or comments, and it will be preserved on regeneration # You can replace this text with custom code or comments, and it will be preserved on regeneration
1; 1;

View File

@@ -46,7 +46,7 @@ sub discover {
store_wireless($device, $snmp); store_wireless($device, $snmp);
store_vlans($device, $snmp); store_vlans($device, $snmp);
store_power($device, $snmp); store_power($device, $snmp);
#store_modules($device, $snmp); store_modules($device, $snmp);
return job_done("Ended Discover for $host"); return job_done("Ended Discover for $host");
} }

View File

@@ -10,7 +10,7 @@ use base 'Exporter';
our @EXPORT = (); our @EXPORT = ();
our @EXPORT_OK = qw/ our @EXPORT_OK = qw/
store_device store_interfaces store_wireless store_device store_interfaces store_wireless
store_vlans store_power store_vlans store_power store_modules
/; /;
our %EXPORT_TAGS = (all => \@EXPORT_OK); our %EXPORT_TAGS = (all => \@EXPORT_OK);
@@ -411,4 +411,64 @@ sub store_power {
}); });
} }
=head2 store_modules( $device, $snmp )
Given a Device database object, and a working SNMP connection, discover and
store the device's module information.
The Device database object can be a fresh L<DBIx::Class::Row> object which is
not yet stored to the database.
=cut
sub store_modules {
my ($device, $snmp) = @_;
my $e_index = $snmp->e_index;
if (!defined $e_index) {
# TODO log
return;
}
my $e_descr = $snmp->e_descr;
my $e_type = $snmp->e_type;
my $e_parent = $snmp->e_parent;
my $e_name = $snmp->e_name;
my $e_class = $snmp->e_class;
my $e_pos = $snmp->e_pos;
my $e_hwver = $snmp->e_hwver;
my $e_fwver = $snmp->e_fwver;
my $e_swver = $snmp->e_swver;
my $e_model = $snmp->e_model;
my $e_serial = $snmp->e_serial;
my $e_fru = $snmp->e_fru;
# build device modules list for DBIC
my @modules;
foreach my $entry (keys %$e_class) {
push @modules, {
index => $e_index->{$entry},
type => $e_type->{$entry},
parent => $e_parent->{$entry},
name => $e_name->{$entry},
class => $e_class->{$entry},
pos => $e_pos->{$entry},
hw_ver => $e_hwver->{$entry},
fw_ver => $e_fwver->{$entry},
sw_ver => $e_swver->{$entry},
model => $e_model->{$entry},
serial => $e_serial->{$entry},
fru => $e_fru->{$entry},
description => $e_descr->{$entry},
last_discover => \'now()',
};
}
schema('netdisco')->txn_do(sub {
$device->modules->delete;
$device->modules->populate(\@modules);
});
}
1; 1;