From b22c32a578945edffb0558f356fc02b1e1d25051 Mon Sep 17 00:00:00 2001 From: Oliver Gorwits Date: Mon, 1 Apr 2019 22:36:35 +0100 Subject: [PATCH] better sql update, fixed worker return, better logic on vlans --- .../Netdisco/Worker/Plugin/Discover/VLANs.pm | 41 +++++++++++-------- .../App-Netdisco-DB-56-57-PostgreSQL.sql | 6 ++- 2 files changed, 28 insertions(+), 19 deletions(-) diff --git a/lib/App/Netdisco/Worker/Plugin/Discover/VLANs.pm b/lib/App/Netdisco/Worker/Plugin/Discover/VLANs.pm index 0ac7034e..84d0aadf 100644 --- a/lib/App/Netdisco/Worker/Plugin/Discover/VLANs.pm +++ b/lib/App/Netdisco/Worker/Plugin/Discover/VLANs.pm @@ -43,22 +43,6 @@ register_worker({ phase => 'main', driver => 'snmp' }, sub { next; } - foreach my $vlan (@{ $i_vlan_membership->{$entry} }) { - next unless defined $vlan and $vlan; - next if ++$port_vseen{$vlan} > 1; - - my $native = ((defined $i_vlan->{$entry}) and ($vlan eq $i_vlan->{$entry})) ? "t" : "f"; - push @portvlans, { - port => $port, - vlan => $vlan, - native => $native, - egress_tag => 't', - vlantype => $type, - last_discover => \'now()', - }; - ++$p_seen{$vlan}; - } - foreach my $vlan (@{ $i_vlan_membership_untagged->{$entry} }) { next unless defined $vlan and $vlan; next if ++$port_vseen{$vlan} > 1; @@ -74,6 +58,23 @@ register_worker({ phase => 'main', driver => 'snmp' }, sub { }; ++$p_seen{$vlan}; } + + foreach my $vlan (@{ $i_vlan_membership->{$entry} }) { + next unless defined $vlan and $vlan; + next if ++$port_vseen{$vlan} > 1; + + my $native = ((defined $i_vlan->{$entry}) and ($vlan eq $i_vlan->{$entry})) ? "t" : "f"; + my $egress = ((defined $i_vlan->{$entry}) and ($vlan eq $i_vlan->{$entry})) ? "f" : "t"; + push @portvlans, { + port => $port, + vlan => $vlan, + native => $native, + egress_tag => $egress, + vlantype => $type, + last_discover => \'now()', + }; + ++$p_seen{$vlan}; + } } schema('netdisco')->txn_do(sub { @@ -82,8 +83,8 @@ register_worker({ phase => 'main', driver => 'snmp' }, sub { $device->ip, $gone; $device->port_vlans->populate(\@portvlans); - return Status->info(sprintf ' [%s] vlans - added %d new port VLANs', - $device->ip, scalar @portvlans); + debug sprintf ' [%s] vlans - added %d new port VLANs', + $device->ip, scalar @portvlans; }); my %d_seen = (); @@ -117,9 +118,13 @@ register_worker({ phase => 'main', driver => 'snmp' }, sub { debug sprintf ' [%s] vlans - removed %d device VLANs', $device->ip, $gone; $device->vlans->populate(\@devicevlans); + debug sprintf ' [%s] vlans - added %d new device VLANs', $device->ip, scalar @devicevlans; }); + + return Status->info(sprintf ' [%s] vlans - discovered for ports and device', + $device->ip); }); true; diff --git a/share/schema_versions/App-Netdisco-DB-56-57-PostgreSQL.sql b/share/schema_versions/App-Netdisco-DB-56-57-PostgreSQL.sql index 480c4ba2..856a70c8 100644 --- a/share/schema_versions/App-Netdisco-DB-56-57-PostgreSQL.sql +++ b/share/schema_versions/App-Netdisco-DB-56-57-PostgreSQL.sql @@ -1,5 +1,9 @@ BEGIN; -ALTER TABLE device_port_vlan ADD COLUMN "egress_tag" boolean not null default false; +ALTER TABLE device_port_vlan ADD COLUMN "egress_tag" boolean not null default true; + +UPDATE device_port_vlan SET egress_tag = true; + +UPDATE device_port_vlan SET egress_tag = false WHERE native = TRUE; COMMIT;