summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHannes Duerr <h.duerr@proxmox.com>2025-07-11 11:52:05 +0200
committerThomas Lamprecht <t.lamprecht@proxmox.com>2025-07-16 11:58:43 +0200
commite78d25b9b7279142c1827a8e8f8dd7db2e2fdaa8 (patch)
tree60f3cf7c5043dc4925a506783448987e0b5e5e9a
parenta6b9dbcda48f69f5eb6d8487e818ed2afa6f22a0 (diff)
dhcp: make plugin types query from Dhcp.pm possible
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@proxmox.com> Tested-by: Friedrich Weber <f.weber@proxmox.com> Link: https://lore.proxmox.com/20250711095206.30852-1-h.duerr@proxmox.com
-rw-r--r--src/PVE/Network/SDN/Dhcp.pm4
-rw-r--r--src/PVE/Network/SDN/Zones/SimplePlugin.pm4
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(),
},
};
}