gracefully handle lack of dns col on node_ip
This commit is contained in:
		| @@ -50,7 +50,7 @@ sub dns { | ||||
|   return $row->get_column('dns') | ||||
|     if $row->result_source->has_column('dns'); | ||||
|  | ||||
|   use Net::DNS; | ||||
|   use Net::DNS (); | ||||
|   my $q = Net::DNS::Resolver->new->query($row->ip); | ||||
|   if ($q) { | ||||
|     foreach my $rr ($q->answer) { | ||||
|   | ||||
| @@ -47,6 +47,8 @@ sub by_ip { | ||||
| sub by_name { | ||||
|     my ($set, $archive, $name) = @_; | ||||
|     return $set unless $name; | ||||
|     die "do not call by_name unless you have a dns col on the node_ip table." | ||||
|       if not $set->has_dns_col; | ||||
|  | ||||
|     return $set->search( | ||||
|       { | ||||
| @@ -55,7 +57,7 @@ sub by_name { | ||||
|       }, | ||||
|       { | ||||
|         %$search_attr, | ||||
|         ( $set->has_dns_col ? ('+columns' => 'dns') : () ), | ||||
|         '+columns' => 'dns', | ||||
|       } | ||||
|     ); | ||||
| } | ||||
|   | ||||
| @@ -7,6 +7,7 @@ use Dancer::Plugin::DBIC; | ||||
| use NetAddr::IP::Lite ':lower'; | ||||
| use Net::MAC (); | ||||
| use List::MoreUtils (); | ||||
| use Net::DNS (); | ||||
|  | ||||
| hook 'before' => sub { | ||||
|     # make hash lookups of query lists | ||||
| @@ -94,9 +95,33 @@ ajax '/ajax/content/search/node' => sub { | ||||
|               ->by_ip(param('archived'), $ip); | ||||
|         } | ||||
|         else { | ||||
|             $node = "\%$node\%" if param('partial'); | ||||
|             $set = schema('netdisco')->resultset('NodeIp') | ||||
|               ->by_name(param('archived'), $node); | ||||
|             if (schema('netdisco')->resultset('NodeIp')->has_dns_col) { | ||||
|                 if (param('partial')) { | ||||
|                     $node = "\%$node\%"; | ||||
|                 } | ||||
|                 elsif (setting('domain_suffix')) { | ||||
|                     $node .= setting('domain_suffix') | ||||
|                         if index($node, setting('domain_suffix')) == -1; | ||||
|                 } | ||||
|                 $set = schema('netdisco')->resultset('NodeIp') | ||||
|                   ->by_name(param('archived'), $node); | ||||
|             } | ||||
|             elsif (setting('domain_suffix')) { | ||||
|                 $node .= setting('domain_suffix') | ||||
|                     if index($node, setting('domain_suffix')) == -1; | ||||
|                 my $q = Net::DNS::Resolver->new->query($node); | ||||
|                 if ($q) { | ||||
|                     foreach my $rr ($q->answer) { | ||||
|                         next unless $rr->type eq 'A'; | ||||
|                         $node = $rr->address; | ||||
|                     } | ||||
|                 } | ||||
|                 else { | ||||
|                     return; | ||||
|                 } | ||||
|                 $set = schema('netdisco')->resultset('NodeIp') | ||||
|                   ->by_ip(param('archived'), $node); | ||||
|             } | ||||
|         } | ||||
|         return unless $set->count; | ||||
|  | ||||
| @@ -205,6 +230,9 @@ get '/search' => sub { | ||||
|         { id => 'port',   label => 'Port'   }, | ||||
|     ]); | ||||
|  | ||||
|     var('node_ip_has_dns_col' => | ||||
|       schema('netdisco')->resultset('NodeIp')->has_dns_col); | ||||
|  | ||||
|     template 'search'; | ||||
| }; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user