From e7dac14cb0f36c818c049fecea973bf92244d2a3 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Wed, 16 Oct 2013 22:38:41 +0100 Subject: [PATCH] fix another bug in device root_ip discovery --- Netdisco/lib/App/Netdisco/Core/Discover.pm | 31 ++++++++++++---------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/Netdisco/lib/App/Netdisco/Core/Discover.pm b/Netdisco/lib/App/Netdisco/Core/Discover.pm index 251c16f4..51c22749 100644 --- a/Netdisco/lib/App/Netdisco/Core/Discover.pm +++ b/Netdisco/lib/App/Netdisco/Core/Discover.pm @@ -127,24 +127,27 @@ sub set_canonical_ip { debug sprintf ' [%s] device - changing root IP to alt IP %s', $oldip, $newip; - # remove old device and aliases schema('netdisco')->txn_do(sub { - my $copy = schema('netdisco')->resultset('Device') - ->find({ip => $oldip}); + if ($device->in_storage) { + # remove old device and aliases + my $copy = schema('netdisco')->resultset('Device') + ->find({ip => $oldip}); - # our special delete which is more efficient - schema('netdisco')->resultset('Device') - ->search({ ip => $device->ip })->delete({keep_nodes => 1}); - debug sprintf ' [%s] device - deleted self', $oldip; + schema('netdisco')->resultset('Device') + ->search({ ip => $device->ip })->delete({keep_nodes => 1}); + debug sprintf ' [%s] device - deleted self', $oldip; - $device = schema('netdisco')->resultset('Device') - ->create({ $copy->get_columns, ip => $newip }) - if defined $copy; + $device = schema('netdisco')->resultset('Device') + ->create({ $copy->get_columns, ip => $newip }); - # make nodes follow device - schema('netdisco')->resultset('Node') - ->search({switch => $oldip}) - ->update({switch => $newip}); + # make nodes follow device + schema('netdisco')->resultset('Node') + ->search({switch => $oldip}) + ->update({switch => $newip}); + } + else { + $device->set_column(ip => $newip); + } }); } }