]> git.proxmox.com Git - pve-network.git/commitdiff
move status code to zone plugin
authorAlexandre Derumier <aderumier@odiso.com>
Mon, 10 Feb 2020 16:26:05 +0000 (17:26 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Tue, 11 Feb 2020 18:03:38 +0000 (19:03 +0100)
PVE/Network/SDN/Zones.pm
PVE/Network/SDN/Zones/Plugin.pm

index a76ee11b205b27bab3cbd308bf4185d0e3e4e530..e3d72e87a35572bc06d4d4511d4cb83fba63f8d0 100644 (file)
@@ -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);
 }
 
index f84c1b2ac9aabd0f5ac21475561be8581bb538f1..5aeff190013c9387d8a24eba7dc1e9847a0698b4 100644 (file)
@@ -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 {