From: Alexandre Derumier Date: Thu, 29 Aug 2019 10:32:44 +0000 (+0200) Subject: api2: add local endpoint for listing content of a transportzone X-Git-Url: https://git.proxmox.com/?p=pve-network.git;a=commitdiff_plain;h=903e2f5e910b2a5587bee56f035e60b9cdbad255 api2: add local endpoint for listing content of a transportzone pveset get /nodes//sdn//content ┌─────────┬────────┐ │ vnet │ status │ ├─────────┼────────┤ │ vnet100 │ error │ ├─────────┼────────┤ │ vnet101 │ error │ └─────────┴────────┘ Signed-off-by: Alexandre Derumier --- diff --git a/PVE/API2/Network/Makefile b/PVE/API2/Network/Makefile index 4b2fda3..80a3b25 100644 --- a/PVE/API2/Network/Makefile +++ b/PVE/API2/Network/Makefile @@ -6,3 +6,5 @@ PERL5DIR=${DESTDIR}/usr/share/perl5 .PHONY: install install: for i in ${SOURCES}; do install -D -m 0644 $$i ${PERL5DIR}/PVE/API2/Network/$$i; done + make -C SDN install + diff --git a/PVE/API2/Network/SDN/Content.pm b/PVE/API2/Network/SDN/Content.pm new file mode 100644 index 0000000..f6b59ec --- /dev/null +++ b/PVE/API2/Network/SDN/Content.pm @@ -0,0 +1,80 @@ +package PVE::API2::Network::SDN::Content; + +use strict; +use warnings; +use Data::Dumper; + +use PVE::SafeSyslog; +use PVE::Cluster; +use PVE::Storage; +use PVE::INotify; +use PVE::Exception qw(raise_param_exc); +use PVE::RPCEnvironment; +use PVE::RESTHandler; +use PVE::JSONSchema qw(get_standard_option); +use PVE::Network::SDN; + +use base qw(PVE::RESTHandler); + +__PACKAGE__->register_method ({ + name => 'index', + path => '', + method => 'GET', + description => "List transportzone content.", +# permissions => { +# check => ['perm', '/sdn/{sdn}', ['SDN.Audit'], any => 1], +# }, + protected => 1, + proxyto => 'node', + parameters => { + additionalProperties => 0, + properties => { + node => get_standard_option('pve-node'), + sdn => get_standard_option('pve-sdn-id', { + completion => \&PVE::Network::SDN::complete_sdn, + }), + }, + }, + returns => { + type => 'array', + items => { + type => "object", + properties => { + vnet => { + description => "Vnet identifier.", + type => 'string', + }, + status => { + description => "Status.", + type => 'string', + optional => 1, + }, + }, + }, + links => [ { rel => 'child', href => "{vnet}" } ], + }, + code => sub { + my ($param) = @_; + + my $rpcenv = PVE::RPCEnvironment::get(); + + my $authuser = $rpcenv->get_user(); + + my $transportid = $param->{sdn}; + + my $res = []; + + my ($transport_status, $vnet_status) = PVE::Network::SDN::status(); + + foreach my $id (keys %{$vnet_status}) { + if ($vnet_status->{$id}->{transportzone} eq $transportid) { + my $item->{vnet} = $id; + $item->{status} = $vnet_status->{$id}->{'status'}; + push @$res,$item; + } + } + + return $res; + }}); + +1; diff --git a/PVE/API2/Network/SDN/Makefile b/PVE/API2/Network/SDN/Makefile new file mode 100644 index 0000000..85448a5 --- /dev/null +++ b/PVE/API2/Network/SDN/Makefile @@ -0,0 +1,8 @@ +SOURCES=Content.pm + + +PERL5DIR=${DESTDIR}/usr/share/perl5 + +.PHONY: install +install: + for i in ${SOURCES}; do install -D -m 0644 $$i ${PERL5DIR}/PVE/API2/Network/SDN/$$i; done