[pve-devel] [PATCH pve-network 3/4] api2: add local endpoint for listing content of a transportzone

Alexandre Derumier aderumier at odiso.com
Wed Aug 21 05:22:27 CEST 2019


pveset get /nodes/<node>/sdn/<transportzone>/content

┌─────────┬────────┐
│ vnet    │ status │
├─────────┼────────┤
│ vnet100 │ error  │
├─────────┼────────┤
│ vnet101 │ error  │
└─────────┴────────┘

Signed-off-by: Alexandre Derumier <aderumier at odiso.com>
---
 PVE/API2/Network/Makefile       |  2 +
 PVE/API2/Network/SDN/Content.pm | 80 +++++++++++++++++++++++++++++++++
 PVE/API2/Network/SDN/Makefile   |  8 ++++
 3 files changed, 90 insertions(+)
 create mode 100644 PVE/API2/Network/SDN/Content.pm
 create mode 100644 PVE/API2/Network/SDN/Makefile

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
-- 
2.20.1




More information about the pve-devel mailing list