From 469d8ed8197a536b622b4480c7e2cdf36cff0112 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Mon, 27 Apr 2015 16:48:11 +0100 Subject: [PATCH] do renumber hostname lookup inside core --- Netdisco/lib/App/Netdisco/Core/Discover.pm | 3 -- Netdisco/lib/App/Netdisco/DB/Result/Device.pm | 49 ++++++++++++------- Netdisco/lib/App/Netdisco/Util/Device.pm | 4 -- 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/Netdisco/lib/App/Netdisco/Core/Discover.pm b/Netdisco/lib/App/Netdisco/Core/Discover.pm index ee8002e5..f408fc59 100644 --- a/Netdisco/lib/App/Netdisco/Core/Discover.pm +++ b/Netdisco/lib/App/Netdisco/Core/Discover.pm @@ -85,9 +85,6 @@ sub set_canonical_ip { $device->renumber($new_ip) or die "cannot renumber to: $new_ip"; # rollback - my $hostname = hostname_from_ip($device->ip); - $device->update({dns => $hostname}); - debug sprintf ' [%s] device - changed IP to %s (%s)', $old_ip, $device->ip, ($device->dns || ''); }); diff --git a/Netdisco/lib/App/Netdisco/DB/Result/Device.pm b/Netdisco/lib/App/Netdisco/DB/Result/Device.pm index 132abbdf..f93d5dac 100644 --- a/Netdisco/lib/App/Netdisco/DB/Result/Device.pm +++ b/Netdisco/lib/App/Netdisco/DB/Result/Device.pm @@ -6,7 +6,9 @@ package App::Netdisco::DB::Result::Device; use strict; use warnings; + use NetAddr::IP::Lite ':lower'; +use App::Netdisco::Util::DNS 'hostname_from_ip'; use base 'DBIx::Class::Core'; __PACKAGE__->table("device"); @@ -193,7 +195,7 @@ __PACKAGE__->might_have( Will update this device and all related database records to use the new IP C<$new_ip>. Returns C if $new_ip seems invalid, otherwise returns the -Device row object. Does NOT update the device C field. +Device row object. =cut @@ -201,9 +203,16 @@ sub renumber { my ($device, $ip) = @_; my $schema = $device->result_source->schema; - my $new_ip = NetAddr::IP::Lite->new($ip) + my $new_addr = NetAddr::IP::Lite->new($ip) or return; + my $old_ip = $device->ip; + my $new_ip = $new_addr->addr; + + return + if $new_ip eq '0.0.0.0' + or $new_ip eq '127.0.0.1'; + foreach my $set (qw/ DeviceIp DeviceModule @@ -218,34 +227,38 @@ sub renumber { Community /) { $schema->resultset($set) - ->search({ip => $device->ip}) - ->update({ip => $new_ip->addr}); + ->search({ip => $old_ip}) + ->update({ip => $new_ip}); } $schema->resultset('DevicePort') - ->search({remote_ip => $device->ip}) - ->update({remote_ip => $new_ip->addr}); + ->search({remote_ip => $old_ip}) + ->update({remote_ip => $new_ip}); $schema->resultset('DeviceIp') - ->search({alias => $device->ip}) - ->update({alias => $new_ip->addr}); + ->search({alias => $old_ip}) + ->update({alias => $new_ip}); $schema->resultset('Admin') - ->search({device => $device->ip}) - ->update({device => $new_ip->addr}); + ->search({device => $old_ip}) + ->update({device => $new_ip}); $schema->resultset('Node') - ->search({switch => $device->ip}) - ->update({switch => $new_ip->addr}); + ->search({switch => $old_ip}) + ->update({switch => $new_ip}); $schema->resultset('Topology') - ->search({dev1 => $device->ip}) - ->update({dev1 => $new_ip->addr}); - $schema->resultset('Topology') - ->search({dev2 => $device->ip}) - ->update({dev2 => $new_ip->addr}); + ->search({dev1 => $old_ip}) + ->update({dev1 => $new_ip}); - $device->update({ip => $new_ip->addr}); + $schema->resultset('Topology') + ->search({dev2 => $old_ip}) + ->update({dev2 => $new_ip}); + + $device->update({ + ip => $new_ip, + dns => hostname_from_ip($new_ip), + }); return $device; } diff --git a/Netdisco/lib/App/Netdisco/Util/Device.pm b/Netdisco/lib/App/Netdisco/Util/Device.pm index 74012e1f..05e2d7af 100644 --- a/Netdisco/lib/App/Netdisco/Util/Device.pm +++ b/Netdisco/lib/App/Netdisco/Util/Device.pm @@ -3,7 +3,6 @@ package App::Netdisco::Util::Device; use Dancer qw/:syntax :script/; use Dancer::Plugin::DBIC 'schema'; use App::Netdisco::Util::Permission 'check_acl'; -use App::Netdisco::Util::DNS 'hostname_from_ip'; use base 'Exporter'; our @EXPORT = (); @@ -126,9 +125,6 @@ sub renumber_device { event => "Renumbered device from $ip to $new_ip", }); - my $hostname = hostname_from_ip($device->ip); - $device->update({dns => $hostname}); - $happy = 1; });