do renumber hostname lookup inside core
This commit is contained in:
		@@ -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 || '');
 | 
			
		||||
  });
 | 
			
		||||
 
 | 
			
		||||
@@ -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<undef> if $new_ip seems invalid, otherwise returns the
 | 
			
		||||
Device row object. Does NOT update the device C<dns> 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;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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;
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user