[pve-devel] [PATCH pve-manager 2/2] API2: Network: display vnets in any_bridge

Alexandre Derumier aderumier at odiso.com
Mon Feb 10 17:27:11 CET 2020


---
 PVE/API2/Network.pm | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/PVE/API2/Network.pm b/PVE/API2/Network.pm
index a32f6c01..84bd3c3a 100644
--- a/PVE/API2/Network.pm
+++ b/PVE/API2/Network.pm
@@ -18,6 +18,7 @@ use base qw(PVE::RESTHandler);
 
 my $have_sdn;
 eval {
+    require PVE::Network::SDN::Vnets;
     require PVE::Network::SDN::Zones;
     require PVE::Network::SDN::Controllers;
     $have_sdn = 1;
@@ -246,6 +247,30 @@ __PACKAGE__->register_method({
 		    ($type eq 'bridge' || $type eq 'OVSBridge'));
 		delete $ifaces->{$k} if !$match;
 	    }
+
+	    if ($have_sdn && $param->{type} eq 'any_bridge') {
+		my $vnets_cfg = PVE::Network::SDN::Vnets::config();
+		my $zones_cfg = PVE::Network::SDN::Zones::config();
+		my @vnetids = PVE::Network::SDN::Vnets::sdn_vnets_ids($vnets_cfg);
+		my $authuser = $rpcenv->get_user();
+		my $nodename = PVE::INotify::nodename();
+
+
+		foreach my $vnetid (@vnetids) {
+
+	           my $vnet = PVE::Network::SDN::Vnets::sdn_vnets_config($vnets_cfg, $vnetid);
+        	   my $zoneid = $vnet->{zone};
+	           next if !$zoneid;
+	           my $zone_config = PVE::Network::SDN::Zones::sdn_zones_config($zones_cfg, $zoneid);
+
+		    my $privs = [ 'SDN.Audit', 'SDN.Allocate' ];
+		    next if !$rpcenv->check_any($authuser, "/sdn/vnets/$vnetid", $privs, 1);
+		    next if defined($zone_config->{nodes}) && !$zone_config->{nodes}->{$nodename};
+
+		    my $iface = { type => 'vnet', active => '1' };
+		    $ifaces->{$vnetid} = $iface;
+		}
+	    }
 	}
 
 	return PVE::RESTHandler::hash_to_array($ifaces, 'iface');
-- 
2.20.1



More information about the pve-devel mailing list