make get_device return a new result object
This commit is contained in:
		| @@ -31,19 +31,27 @@ subroutines. | ||||
| Given an IP address, returns a L<DBIx::Class::Row> object for the Device in | ||||
| the Netdisco database. The IP can be for any interface on the device. | ||||
|  | ||||
| Returns C<undef> if the device or interface IP is not known to Netdisco. | ||||
| If for any reason C<$ip> is already a C<DBIx::Class> Device object, then it is | ||||
| simply returned. | ||||
|  | ||||
| If the device or interface IP is not known to Netdisco a new Device object is | ||||
| created for the IP, and returned. This object is in-memory only and not yet | ||||
| stored to the database. | ||||
|  | ||||
| =cut | ||||
|  | ||||
| sub get_device { | ||||
|   my $ip = shift; | ||||
|  | ||||
|   # naive check for existing DBIC object | ||||
|   return $ip if ref $ip; | ||||
|  | ||||
|   my $alias = schema('netdisco')->resultset('DeviceIp') | ||||
|     ->search({alias => $ip})->first; | ||||
|   return if not eval { $alias->ip }; | ||||
|   $ip = $alias->ip if defined $alias; | ||||
|  | ||||
|   return schema('netdisco')->resultset('Device') | ||||
|     ->find({ip => $alias->ip}); | ||||
|     ->find_or_new({ip => $ip}); | ||||
| } | ||||
|  | ||||
| =head2 is_discoverable( $ip ) | ||||
|   | ||||
| @@ -125,8 +125,7 @@ sub get_port { | ||||
|   my ($device, $portname) = @_; | ||||
|  | ||||
|   # accept either ip or dbic object | ||||
|   $device = get_device($device) | ||||
|     if not ref $device; | ||||
|   $device = get_device($device); | ||||
|  | ||||
|   my $port = schema('netdisco')->resultset('DevicePort') | ||||
|     ->find({ip => $device->ip, port => $portname}); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user