---
 PVE/Network/SDN/Zones.pm        | 35 +++++++++++----------------------
 PVE/Network/SDN/Zones/Plugin.pm | 27 +++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 24 deletions(-)

diff --git a/PVE/Network/SDN/Zones.pm b/PVE/Network/SDN/Zones.pm
index a76ee11..e3d72e8 100644
--- a/PVE/Network/SDN/Zones.pm
+++ b/PVE/Network/SDN/Zones.pm
@@ -195,35 +195,22 @@ sub status {
     my $zone_cfg = PVE::Cluster::cfs_read_file('sdn/zones.cfg');
     my $nodename = PVE::INotify::nodename();
 
+
     my $vnet_status = {};
     my $zone_status = {};
 
     foreach my $id (keys %{$vnet_cfg->{ids}}) {
-       my $zone = $vnet_cfg->{ids}->{$id}->{zone};
-       next if defined($zone_cfg->{ids}->{$zone}->{nodes}) && 
!$zone_cfg->{ids}->{$zone}->{nodes}->{$nodename};
-
-       $vnet_status->{$id}->{zone} = $zone;
-       $zone_status->{$zone}->{status} = 'available' if 
!defined($zone_status->{$zone}->{status});
-
-       if($err_config) {
-           $vnet_status->{$id}->{status} = 'pending';
-           $vnet_status->{$id}->{statusmsg} = $err_config;
-           $zone_status->{$zone}->{status} = 'pending';
-       } elsif ($status->{$id}->{status} && $status->{$id}->{status} eq 
'pass') {
-           $vnet_status->{$id}->{status} = 'available';
-           my $bridgeport = $status->{$id}->{config}->{'bridge-ports'};
-
-           if ($status->{$bridgeport}->{status} && 
$status->{$bridgeport}->{status} ne 'pass') {
-               $vnet_status->{$id}->{status} = 'error';
-               $vnet_status->{$id}->{statusmsg} = 'configuration not fully 
applied';
-               $zone_status->{$zone}->{status} = 'error';
-           }
-       } else {
-           $vnet_status->{$id}->{status} = 'error';
-           $vnet_status->{$id}->{statusmsg} = 'missing';
-           $zone_status->{$zone}->{status} = 'error';
-       }
+        my $vnet = $vnet_cfg->{ids}->{$id};
+        my $zone = $vnet->{zone};
+
+       next if !$zone;
+        my $plugin_config = $zone_cfg->{ids}->{$zone};
+        next if defined($plugin_config->{nodes}) && 
!$plugin_config->{nodes}->{$nodename};
+
+        my $plugin = 
PVE::Network::SDN::Zones::Plugin->lookup($plugin_config->{type});
+        $plugin->status($plugin_config, $zone, $id, $vnet, $err_config, 
$status, $vnet_status, $zone_status);
     }
+
     return($zone_status, $vnet_status);
 }
 
diff --git a/PVE/Network/SDN/Zones/Plugin.pm b/PVE/Network/SDN/Zones/Plugin.pm
index f84c1b2..5aeff19 100644
--- a/PVE/Network/SDN/Zones/Plugin.pm
+++ b/PVE/Network/SDN/Zones/Plugin.pm
@@ -179,6 +179,33 @@ sub parse_tag_number_or_range {
     return (scalar(@elements) > 1);
 }
 
+sub status {
+    my ($class, $plugin_config, $zone, $id, $vnet, $err_config, $status, 
$vnet_status, $zone_status) = @_;
+
+    $vnet_status->{$id}->{zone} = $zone;
+    $zone_status->{$zone}->{status} = 'available' if 
!defined($zone_status->{$zone}->{status});
+
+    if($err_config) {
+       $vnet_status->{$id}->{status} = 'pending';
+       $vnet_status->{$id}->{statusmsg} = $err_config;
+       $zone_status->{$zone}->{status} = 'pending';
+    } elsif ($status->{$id}->{status} && $status->{$id}->{status} eq 'pass') {
+       $vnet_status->{$id}->{status} = 'available';
+       my $bridgeport = $status->{$id}->{config}->{'bridge-ports'};
+
+       if ($bridgeport && $status->{$bridgeport}->{status} && 
$status->{$bridgeport}->{status} ne 'pass') {
+           $vnet_status->{$id}->{status} = 'error';
+           $vnet_status->{$id}->{statusmsg} = 'configuration not fully 
applied';
+           $zone_status->{$zone}->{status} = 'error';
+       }
+
+    } else {
+       $vnet_status->{$id}->{status} = 'error';
+       $vnet_status->{$id}->{statusmsg} = 'missing';
+       $zone_status->{$zone}->{status} = 'error';
+    }
+}
+
 #helper
 
 sub get_uplink_iface {
-- 
2.20.1

_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to