return the vnets of the localnode

Signed-off-by: Alexandre Derumier <aderum...@odiso.com>
---
 PVE/Network/SDN.pm | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

diff --git a/PVE/Network/SDN.pm b/PVE/Network/SDN.pm
index 2e996e9..2b423a7 100644
--- a/PVE/Network/SDN.pm
+++ b/PVE/Network/SDN.pm
@@ -6,6 +6,7 @@ use warnings;
 use Data::Dumper;
 use JSON;
 
+use PVE::Network::SDN::Vnets;
 use PVE::Network::SDN::Zones;
 
 use PVE::Tools qw(extract_param dir_glob_regex run_command);
@@ -45,5 +46,38 @@ sub status {
     return($zone_status, $vnet_status);
 }
 
+sub get_local_vnets {
+
+    my $rpcenv = PVE::RPCEnvironment::get();
+
+    my $authuser = $rpcenv->get_user();
+
+    my $nodename = PVE::INotify::nodename();
+
+    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 $vnets = {};
+
+    foreach my $vnetid (@vnetids) {
+
+       my $vnet = PVE::Network::SDN::Vnets::sdn_vnets_config($vnets_cfg, 
$vnetid);
+       my $zoneid = $vnet->{zone};
+       my $privs = [ 'SDN.Audit', 'SDN.Allocate' ];
+
+       next if !$zoneid;
+       next if !$rpcenv->check_any($authuser, "/sdn/zones/$zoneid", $privs, 1);
+
+       my $zone_config = 
PVE::Network::SDN::Zones::sdn_zones_config($zones_cfg, $zoneid);
+
+       next if defined($zone_config->{nodes}) && 
!$zone_config->{nodes}->{$nodename};
+       $vnets->{$vnetid} = { type => 'vnet', active => '1' };
+    }
+
+    return $vnets;
+}
+
 1;
 
-- 
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