From d489093c88d88173b5005cad084bd0b49fbec832 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Wed, 11 Sep 2013 23:13:56 +0100 Subject: [PATCH] fix device and device_port delete not to kill nodes --- Netdisco/lib/App/Netdisco/Core/Discover.pm | 4 ++-- Netdisco/lib/App/Netdisco/DB/ResultSet/Node.pm | 9 ++++++--- Netdisco/lib/App/Netdisco/Web/AdminTask.pm | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Netdisco/lib/App/Netdisco/Core/Discover.pm b/Netdisco/lib/App/Netdisco/Core/Discover.pm index 53cca2c9..e559275e 100644 --- a/Netdisco/lib/App/Netdisco/Core/Discover.pm +++ b/Netdisco/lib/App/Netdisco/Core/Discover.pm @@ -133,7 +133,7 @@ sub _set_canonical_ip { # our special delete which is more efficient schema('netdisco')->resultset('Device') - ->search({ ip => $device->ip })->delete; + ->search({ ip => $device->ip })->delete({keep_nodes => 1}); # a new row object from the old one $device = schema('netdisco')->resultset('Device') @@ -259,7 +259,7 @@ sub store_interfaces { } schema('netdisco')->txn_do(sub { - my $gone = $device->ports->delete; + my $gone = $device->ports->delete({keep_nodes => 1}); debug sprintf ' [%s] interfaces - removed %s interfaces', $device->ip, $gone; $device->update_or_insert(undef, {for => 'update'}); diff --git a/Netdisco/lib/App/Netdisco/DB/ResultSet/Node.pm b/Netdisco/lib/App/Netdisco/DB/ResultSet/Node.pm index 75636b12..1c77a8fc 100644 --- a/Netdisco/lib/App/Netdisco/DB/ResultSet/Node.pm +++ b/Netdisco/lib/App/Netdisco/DB/ResultSet/Node.pm @@ -77,13 +77,12 @@ handle the removal or archiving of nodes. sub delete { my $self = shift; my ($opts) = @_; + $opts = {} if (ref {} ne ref $opts); my $schema = $self->result_source->schema; my $nodes = $self->search(undef, { columns => 'mac' }); - if (ref {} eq ref $opts - and exists $opts->{archive} and $opts->{archive}) { - + if (exists $opts->{archive_nodes} and $opts->{archive_nodes}) { foreach my $set (qw/ NodeIp NodeNbt @@ -101,6 +100,10 @@ sub delete { # avoid letting DBIC delete nodes return 0E0; } + elsif (exists $opts->{keep_nodes} and $opts->{keep_nodes}) { + # avoid letting DBIC delete nodes + return 0E0; + } else { foreach my $set (qw/ NodeIp diff --git a/Netdisco/lib/App/Netdisco/Web/AdminTask.pm b/Netdisco/lib/App/Netdisco/Web/AdminTask.pm index fac92d12..c9b7278b 100644 --- a/Netdisco/lib/App/Netdisco/Web/AdminTask.pm +++ b/Netdisco/lib/App/Netdisco/Web/AdminTask.pm @@ -78,7 +78,7 @@ ajax '/ajax/control/admin/delete' => require_role admin => sub { ->search({ip => param('device')}); # will delete everything related too... - $device->delete; + $device->delete({archive_nodes => param('archive')}); }); };