[pve-devel] [PATCH pve-network 1/2] dhcp: make plugin types query from Dhcp.pm possible
Hannes Duerr
h.duerr at proxmox.com
Fri Jul 11 11:52:05 CEST 2025
At the moment it is possible to query the Dhcp plugin types from the
`use PVE::Network::SDN::Dhcp::Plugin` without importing
`PVE::Network::SDN::Dhcp`. In consequence the section config is not
created although one would have been expected it to be created.
Importing `use pve::network::sdn::Dhcp` would solve the issue, but since
this is not a nice pattern and in order to avoid such problems in the
future, we are now making it possible to query the plugin type from
DHCP. If you then import DHCP, the section config will be built
correctly.
The problem was noticed/introduced after the ordering of the two imports
`use PVE::Network::SDN::Vnets` and `use PVE::Network::SDN::Vnets` were
swapped in pve-bridge [0], resulting in the error:
file /etc/pve/sdn/zones.cfg line 2 (section 'simple') - unable to parse value of 'dhcp': value 'dnsmasq' does not have a value in the enumeration ''
The Zones Section Config no longer returned correct values for dhcp
because the Section Config was not yet built correctly at that time.
Swapping the entries back also solves the issue, because Vnets.pm is
importing `PVE::Network::SDN::Dhcp`, but that is also not really a nice
solution
[0] https://lore.proxmox.com/pve-devel/20250625155751.268047-6-f.ebner@proxmox.com/
Signed-off-by: Hannes Duerr <h.duerr at proxmox.com>
---
src/PVE/Network/SDN/Dhcp.pm | 4 ++++
src/PVE/Network/SDN/Zones/SimplePlugin.pm | 4 ++--
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/PVE/Network/SDN/Dhcp.pm b/src/PVE/Network/SDN/Dhcp.pm
index 5f0d46d..7dc38fb 100644
--- a/src/PVE/Network/SDN/Dhcp.pm
+++ b/src/PVE/Network/SDN/Dhcp.pm
@@ -19,6 +19,10 @@ PVE::Network::SDN::Dhcp::Plugin->init();
PVE::Network::SDN::Dhcp::Dnsmasq->register();
PVE::Network::SDN::Dhcp::Dnsmasq->init();
+sub plugin_types {
+ return PVE::Network::SDN::Dhcp::Plugin->lookup_types();
+}
+
sub add_mapping {
my ($vnetid, $mac, $ip4, $ip6) = @_;
diff --git a/src/PVE/Network/SDN/Zones/SimplePlugin.pm b/src/PVE/Network/SDN/Zones/SimplePlugin.pm
index 97cf29e..f5cd18e 100644
--- a/src/PVE/Network/SDN/Zones/SimplePlugin.pm
+++ b/src/PVE/Network/SDN/Zones/SimplePlugin.pm
@@ -3,7 +3,7 @@ package PVE::Network::SDN::Zones::SimplePlugin;
use strict;
use warnings;
use PVE::Network::SDN::Zones::Plugin;
-use PVE::Network::SDN::Dhcp::Plugin;
+use PVE::Network::SDN::Dhcp;
use PVE::Exception qw(raise raise_param_exc);
use PVE::Cluster;
use PVE::Tools;
@@ -32,7 +32,7 @@ sub properties {
dhcp => {
description => 'Type of the DHCP backend for this zone',
type => 'string',
- enum => PVE::Network::SDN::Dhcp::Plugin->lookup_types(),
+ enum => PVE::Network::SDN::Dhcp->plugin_types(),
},
};
}
--
2.47.2
More information about the pve-devel
mailing list