[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