[pve-devel] [PATCH pve-manager 3/3] sdn-commit: only reload ifupdown if sdn configuration changed
Stefan Hanreich
s.hanreich at proxmox.com
Fri Jul 18 14:33:13 CEST 2025
Check for any changes between the running config and the currently
applied config and guard against executing pve-sdn-commit if the
configuration is unchanged.
Signed-off-by: Stefan Hanreich <s.hanreich at proxmox.com>
---
bin/pve-sdn-commit | 65 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 65 insertions(+)
diff --git a/bin/pve-sdn-commit b/bin/pve-sdn-commit
index 7536608d6..d75e14440 100644
--- a/bin/pve-sdn-commit
+++ b/bin/pve-sdn-commit
@@ -7,6 +7,11 @@ use Time::HiRes qw(usleep);
use PVE::Cluster;
use PVE::Network::SDN;
+use PVE::Network::SDN::Zones;
+use PVE::Network::SDN::Vnets;
+use PVE::Network::SDN::Subnets;
+use PVE::Network::SDN::Controllers;
+use PVE::Network::SDN::Fabrics;
use PVE::Tools;
for (my $i = 0; !PVE::Cluster::check_cfs_quorum(1); $i++) {
@@ -16,6 +21,66 @@ for (my $i = 0; !PVE::Cluster::check_cfs_quorum(1); $i++) {
usleep(100 * 1000);
}
+sub has_pending_changes {
+ my ($pending_config) = @_;
+
+ for my $entity (values $pending_config->{ids}->%*) {
+ return 1 if $entity->{state};
+ }
+
+ return 0;
+}
+
+sub fabrics_changed {
+ my $current_config = PVE::Network::SDN::Fabrics::config();
+ my $running_config = PVE::Network::SDN::Fabrics::config(1);
+
+ my ($running_fabrics, $running_nodes) = $running_config->list_all();
+ my ($current_fabrics, $current_nodes) = $current_config->list_all();
+
+ my $pending_fabrics = PVE::Network::SDN::pending_config(
+ { fabrics => { ids => $running_fabrics } },
+ { ids => $current_fabrics },
+ 'fabrics',
+ );
+
+ my $pending_nodes = PVE::Network::SDN::pending_config(
+ { nodes => { ids => $running_nodes } },
+ { ids => $current_nodes },
+ 'nodes',
+ );
+
+ return has_pending_changes($pending_fabrics) || has_pending_changes($pending_nodes);
+}
+
+sub sdn_changed {
+ my $running_config = PVE::Network::SDN::running_config();
+
+ my $configs = {
+ zones => PVE::Network::SDN::Zones::config(),
+ vnets => PVE::Network::SDN::Vnets::config(),
+ subnets => PVE::Network::SDN::Subnets::config(),
+ controllers => PVE::Network::SDN::Controllers::config(),
+ };
+
+ for my $type (keys $configs->%*) {
+ my $pending_config = PVE::Network::SDN::pending_config(
+ $running_config,
+ $configs->{$type},
+ $type,
+ );
+
+ return 1 if has_pending_changes($pending_config);
+ }
+
+ return fabrics_changed();
+}
+
+if (!sdn_changed()) {
+ print "No changes to SDN configuration detected, skipping reload\n";
+ exit 0;
+}
+
my $previous_config_has_frr = PVE::Network::SDN::running_config_has_frr();
PVE::Network::SDN::commit_config();
--
2.39.5
More information about the pve-devel
mailing list