[pve-devel] [PATCH pve-network 2/3] fabrics: add api endpoint to return fabrics routes
Gabriel Goller
g.goller at proxmox.com
Wed Aug 13 15:30:11 CEST 2025
Add api endpoint that returns all the routes distributed through the
fabrics.
Signed-off-by: Gabriel Goller <g.goller at proxmox.com>
---
src/PVE/API2/Network/SDN/Fabrics.pm | 61 ++++++++++++++++++++++++++++-
1 file changed, 60 insertions(+), 1 deletion(-)
diff --git a/src/PVE/API2/Network/SDN/Fabrics.pm b/src/PVE/API2/Network/SDN/Fabrics.pm
index 5644fbee0fff..94905e865ce1 100644
--- a/src/PVE/API2/Network/SDN/Fabrics.pm
+++ b/src/PVE/API2/Network/SDN/Fabrics.pm
@@ -12,6 +12,7 @@ use PVE::API2::Network::SDN::Fabrics::Fabric;
use PVE::API2::Network::SDN::Fabrics::Node;
use PVE::RESTHandler;
+use PVE::JSONSchema qw(get_standard_option);
use base qw(PVE::RESTHandler);
__PACKAGE__->register_method({
@@ -49,7 +50,10 @@ __PACKAGE__->register_method({
my ($param) = @_;
my $res = [
- { subdir => 'fabric' }, { subdir => 'node' }, { subdir => 'all' },
+ { subdir => 'fabric' },
+ { subdir => 'node' },
+ { subdir => 'all' },
+ { subdir => 'routes' },
];
return $res;
@@ -175,4 +179,59 @@ __PACKAGE__->register_method({
},
});
+__PACKAGE__->register_method({
+ name => 'routes',
+ path => 'routes',
+ method => 'GET',
+ description => "Get routes of all fabrics.",
+ permissions => {
+ description => "Only list entries where you have 'SDN.Audit' or 'SDN.Allocate'",
+ user => 'all',
+ },
+ protected => 1,
+ proxyto => 'node',
+ parameters => {
+ additionalProperties => 0,
+ properties => {
+ node => get_standard_option('pve-node'),
+ },
+ },
+ returns => {
+ type => 'array',
+ items => {
+ type => "object",
+ properties => {
+ fabric_id => get_standard_option('pve-sdn-fabric-id'),
+ protocol => get_standard_option('pve-sdn-fabric-protocol'),
+ route => {
+ description => "Route",
+ type => 'string',
+ },
+ via => {
+ description => "Nexthop",
+ type => 'string',
+ },
+ },
+ },
+ },
+ code => sub {
+ my ($param) = @_;
+
+ my $rpcenv = PVE::RPCEnvironment::get();
+ my $authuser = $rpcenv->get_user();
+
+ my $res = [];
+
+ my $routes = PVE::RS::SDN::Fabrics::routes();
+ my $fabric_privs = ['SDN.Audit', 'SDN.Allocate'];
+ for my $route (@$routes) {
+ my $fabric_id = $route->{fabric_id};
+ next if !$rpcenv->check_any($authuser, "/sdn/fabrics/$fabric_id", $fabric_privs, 1);
+ push @$res, $route;
+ }
+
+ return $res;
+ },
+});
+
1;
--
2.47.2
More information about the pve-devel
mailing list