[pve-devel] [PATCH pve-manager 4/8] pvestatd: sdn: adapt to changes in status reporting
Stefan Hanreich
s.hanreich at proxmox.com
Thu Oct 30 16:48:38 CET 2025
Since pve-network now includes the fabric status in its top-level
status function call, move pvestatd over to use the zone-specific
function for generating SDN resources instead. Additionally, the
zone_type field has been added in the output of the zone status, so
broadcast and return that field as well. Main use-case for now is
discerning the type of zones, to decide which panels to show in the
SDN browser.
Also, the have_sdn guard can be removed since SDN is pre-installed and
therefore the guard is no longer needed.
Signed-off-by: Stefan Hanreich <s.hanreich at proxmox.com>
---
PVE/API2/Cluster.pm | 42 +++++++++++++++++++++++------------------
PVE/Service/pvestatd.pm | 16 ++++------------
2 files changed, 28 insertions(+), 30 deletions(-)
diff --git a/PVE/API2/Cluster.pm b/PVE/API2/Cluster.pm
index 34523fd7e..f8e6ed47c 100644
--- a/PVE/API2/Cluster.pm
+++ b/PVE/API2/Cluster.pm
@@ -443,6 +443,11 @@ __PACKAGE__->register_method({
enum => ["fabric"],
optional => 1,
},
+ zone_type => {
+ description => "The type of an SDN zone (for type 'sdn').",
+ type => "string",
+ optional => 1,
+ },
protocol => {
description =>
"The protocol of a fabric (for type 'network', network_type 'fabric').",
@@ -616,24 +621,25 @@ __PACKAGE__->register_method({
}
}
- if ($have_sdn) {
- my $nodes = PVE::Cluster::get_node_kv("sdn");
-
- for my $node (sort keys %{$nodes}) {
- my $sdns = decode_json($nodes->{$node});
-
- for my $id (sort keys %{$sdns}) {
- next if !$rpcenv->check($authuser, "/sdn/zones/$id", ['SDN.Audit'], 1);
- my $sdn = $sdns->{$id};
- my $entry = {
- id => "sdn/$node/$id",
- sdn => $id,
- node => $node,
- type => 'sdn',
- status => $sdn->{'status'},
- };
- push @$res, $entry;
- }
+ my $nodes = PVE::Cluster::get_node_kv("sdn");
+
+ for my $node (sort keys %{$nodes}) {
+ my $sdns = decode_json($nodes->{$node});
+
+ for my $id (sort keys %{$sdns}) {
+ next if !$rpcenv->check($authuser, "/sdn/zones/$id", ['SDN.Audit'], 1);
+ my $sdn = $sdns->{$id};
+ my $entry = {
+ id => "sdn/$node/$id",
+ sdn => $id,
+ node => $node,
+ type => 'sdn',
+ status => $sdn->{'status'},
+ };
+
+ $entry->{zone_type} = $sdn->{zone_type} if defined($sdn->{zone_type});
+
+ push @$res, $entry;
}
}
}
diff --git a/PVE/Service/pvestatd.pm b/PVE/Service/pvestatd.pm
index 862bf8b43..84e8cf7c0 100755
--- a/PVE/Service/pvestatd.pm
+++ b/PVE/Service/pvestatd.pm
@@ -15,6 +15,7 @@ use PVE::CpuSet;
use Filesys::Df;
use PVE::INotify;
use PVE::Network;
+use PVE::Network::SDN::Zones;
use PVE::RS::SDN::Fabrics;
use PVE::NodeConfig;
use PVE::Cluster qw(cfs_read_file);
@@ -38,12 +39,6 @@ use PVE::Status::Plugin;
use base qw(PVE::Daemon);
-my $have_sdn;
-eval {
- require PVE::Network::SDN;
- $have_sdn = 1;
-};
-
my $opt_debug;
my $restart_request;
@@ -767,13 +762,10 @@ sub update_ceph_metadata {
}
sub update_sdn_status {
+ my ($zone_status, $vnet_status) = PVE::Network::SDN::Zones::status();
- if ($have_sdn) {
- my ($transport_status, $vnet_status) = PVE::Network::SDN::status();
-
- my $status = $transport_status ? encode_json($transport_status) : undef;
- PVE::Cluster::broadcast_node_kv("sdn", $status);
- }
+ my $status = $zone_status ? encode_json($zone_status) : undef;
+ PVE::Cluster::broadcast_node_kv("sdn", $status);
}
sub update_network_status {
--
2.47.3
More information about the pve-devel
mailing list