[pve-devel] [PATCH pve-network 4/4] api2: add local endpoint for listing transportzones status
Alexandre Derumier
aderumier at odiso.com
Wed Aug 21 05:22:28 CEST 2019
pvesh get /nodes/<node>/sdn/
┌─────────────────┬───────────┐
│ sdn │ status │
├─────────────────┼───────────┤
│ transportzone10 │ error │
├─────────────────┼───────────┤
│ zone1 │ available │
├─────────────────┼───────────┤
│ zone4 │ available │
└─────────────────┴───────────┘
Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
PVE/API2/Network/SDN/Makefile | 2 +-
PVE/API2/Network/SDN/Status.pm | 110 +++++++++++++++++++++++++++++++++
2 files changed, 111 insertions(+), 1 deletion(-)
create mode 100644 PVE/API2/Network/SDN/Status.pm
diff --git a/PVE/API2/Network/SDN/Makefile b/PVE/API2/Network/SDN/Makefile
index 85448a5..9fa8cb0 100644
--- a/PVE/API2/Network/SDN/Makefile
+++ b/PVE/API2/Network/SDN/Makefile
@@ -1,4 +1,4 @@
-SOURCES=Content.pm
+SOURCES=Content.pm Status.pm
PERL5DIR=${DESTDIR}/usr/share/perl5
diff --git a/PVE/API2/Network/SDN/Status.pm b/PVE/API2/Network/SDN/Status.pm
new file mode 100644
index 0000000..073b18a
--- /dev/null
+++ b/PVE/API2/Network/SDN/Status.pm
@@ -0,0 +1,110 @@
+package PVE::API2::Network::SDN::Status;
+
+use strict;
+use warnings;
+
+use File::Path;
+use File::Basename;
+use PVE::Tools;
+use PVE::INotify;
+use PVE::Cluster;
+use PVE::API2::Network::SDN::Content;
+use PVE::RESTHandler;
+use PVE::RPCEnvironment;
+use PVE::JSONSchema qw(get_standard_option);
+use PVE::Exception qw(raise_param_exc);
+
+use base qw(PVE::RESTHandler);
+
+__PACKAGE__->register_method ({
+ subclass => "PVE::API2::Network::SDN::Content",
+ path => '{sdn}/content',
+});
+
+__PACKAGE__->register_method ({
+ name => 'index',
+ path => '',
+ method => 'GET',
+ description => "Get status for all transportzones.",
+ permissions => {
+ description => "Only list entries where you have 'SDN.Audit'",
+ user => 'all',
+ },
+ protected => 1,
+ proxyto => 'node',
+ parameters => {
+ additionalProperties => 0,
+ properties => {
+ node => get_standard_option('pve-node')
+ },
+ },
+ returns => {
+ type => 'array',
+ items => {
+ type => "object",
+ properties => {
+ sdn => get_standard_option('pve-sdn-id'),
+ status => {
+ description => "Status of transportzone",
+ type => 'string',
+ },
+ },
+ },
+ links => [ { rel => 'child', href => "{sdn}" } ],
+ },
+ code => sub {
+ my ($param) = @_;
+
+ my $rpcenv = PVE::RPCEnvironment::get();
+ my $authuser = $rpcenv->get_user();
+
+ my $localnode = PVE::INotify::nodename();
+
+ my $res = [];
+
+ my ($transport_status, $vnet_status) = PVE::Network::SDN::status();
+
+ foreach my $id (keys %{$transport_status}) {
+ my $item->{sdn} = $id;
+ $item->{status} = $transport_status->{$id}->{'status'};
+ push @$res,$item;
+ }
+
+ return $res;
+ }});
+
+__PACKAGE__->register_method ({
+ name => 'diridx',
+ path => '{sdn}',
+ method => 'GET',
+ description => "",
+# permissions => {
+# check => ['perm', '/sdn/{sdn}', ['SDN.Audit'], any => 1],
+# },
+ parameters => {
+ additionalProperties => 0,
+ properties => {
+ node => get_standard_option('pve-node'),
+ sdn => get_standard_option('pve-sdn-id'),
+ },
+ },
+ returns => {
+ type => 'array',
+ items => {
+ type => "object",
+ properties => {
+ subdir => { type => 'string' },
+ },
+ },
+ links => [ { rel => 'child', href => "{subdir}" } ],
+ },
+ code => sub {
+ my ($param) = @_;
+ my $res = [
+ { subdir => 'content' },
+ ];
+
+ return $res;
+ }});
+
+1;
--
2.20.1
More information about the pve-devel
mailing list