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

Thomas Lamprecht t.lamprecht at proxmox.com
Wed Mar 25 18:25:29 CET 2020


On 3/24/20 8:27 AM, Alexandre Derumier wrote:
> Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
> ---
>  PVE/API2/Network.pm | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
> 
> diff --git a/PVE/API2/Network.pm b/PVE/API2/Network.pm
> index 4c691879..d727a2fc 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;
> +		}
> +	    }

hmm, isn't there any "get vnets" function in pve-network? If not, should there be
one? this code seems besides the $rpcenv (which can be get in the pve-network too)
not be suited to "clutter" this API call, a simple:

my $vnets = PVE::Network::SDN::Vnets::get_user_vnets();
map {
    $iface->{$_} = $vnets->{$_};
} keys %$vnets;

(or "foreach" instead of "map") would make this easier to read.

>  	}
>  
>  	return PVE::RESTHandler::hash_to_array($ifaces, 'iface');
> 





More information about the pve-devel mailing list