[pve-devel] [RFC pve-network 3/6] sdn: dhcp: add abstract class for DHCP plugins
Stefan Hanreich
s.hanreich at proxmox.com
Fri Sep 8 15:43:01 CEST 2023
This abstract class provides several hooks that should be called
during the config regeneration process:
before_regenerate
Should be called before the plugin does any configuration tasks. The
main usage for this hook is tearing down old instances.
after_regenerate
Should be called after the plugin has finished generating any
configuration. The main usage for this hook is to perform cleanup and
restart / reload services.
before_configure
Should be called before creating the configuration for a specific DHCP
instance, as defined in the dhcp.cfg. This can be used for performing
instance-specific setup.
after_configure
Should be called after the configuration for a specific DHCP instance,
as defined in the dhcp.cfg. This will mainly be used for enabling and
restarting / reloading a specific instance of a DHCP server.
configure_subnet
This function configures the DHCP ranges for a given DHCP server and
subnet. This will usually involve generating configuration files based
on the SDN configuration.
Signed-off-by: Stefan Hanreich <s.hanreich at proxmox.com>
---
src/PVE/Network/SDN/Dhcp/Makefile | 8 ++++
src/PVE/Network/SDN/Dhcp/Plugin.pm | 76 ++++++++++++++++++++++++++++++
src/PVE/Network/SDN/Makefile | 1 +
3 files changed, 85 insertions(+)
create mode 100644 src/PVE/Network/SDN/Dhcp/Makefile
create mode 100644 src/PVE/Network/SDN/Dhcp/Plugin.pm
diff --git a/src/PVE/Network/SDN/Dhcp/Makefile b/src/PVE/Network/SDN/Dhcp/Makefile
new file mode 100644
index 0000000..1e9b6d3
--- /dev/null
+++ b/src/PVE/Network/SDN/Dhcp/Makefile
@@ -0,0 +1,8 @@
+SOURCES=Plugin.pm
+
+
+PERL5DIR=${DESTDIR}/usr/share/perl5
+
+.PHONY: install
+install:
+ for i in ${SOURCES}; do install -D -m 0644 $$i ${PERL5DIR}/PVE/Network/SDN/Dhcp/$$i; done
diff --git a/src/PVE/Network/SDN/Dhcp/Plugin.pm b/src/PVE/Network/SDN/Dhcp/Plugin.pm
new file mode 100644
index 0000000..31ca9e3
--- /dev/null
+++ b/src/PVE/Network/SDN/Dhcp/Plugin.pm
@@ -0,0 +1,76 @@
+package PVE::Network::SDN::Dhcp::Plugin;
+
+use strict;
+use warnings;
+
+use PVE::Cluster;
+use PVE::JSONSchema qw(get_standard_option);
+
+use base qw(PVE::SectionConfig);
+
+PVE::Cluster::cfs_register_file('sdn/dhcp.cfg',
+ sub { __PACKAGE__->parse_config(@_); },
+ sub { __PACKAGE__->write_config(@_); },
+);
+
+my $defaultData = {
+ propertyList => {
+ type => {
+ description => "Plugin type.",
+ format => 'pve-configid',
+ type => 'string',
+ },
+ node => {
+ type => 'array',
+ description => 'A list of nodes where this DHCP server should be deployed',
+ items => get_standard_option('pve-node'),
+ },
+ 'lease-time' => {
+ type => 'integer',
+ description => 'Lifetime for the DHCP leases of this DNS server',
+ minimum => '1',
+ },
+ },
+};
+
+sub private {
+ return $defaultData;
+}
+
+sub options {
+ return {
+ node => {
+ optional => 1,
+ },
+ 'lease-time' => {
+ optional => 1,
+ },
+ };
+}
+
+sub configure_subnet {
+ my ($class, $dhcp_config, $subnet_config, $range_config) = @_;
+ die 'implement in sub class';
+}
+
+sub before_configure {
+ my ($class, $dhcp_config) = @_;
+ die 'implement in sub class';
+}
+
+sub after_configure {
+ my ($class, $dhcp_config) = @_;
+ die 'implement in sub class';
+}
+
+sub before_regenerate {
+ my ($class) = @_;
+ die 'implement in sub class';
+}
+
+sub after_regenerate {
+ my ($class, $dhcp_config) = @_;
+ die 'implement in sub class';
+}
+
+1;
diff --git a/src/PVE/Network/SDN/Makefile b/src/PVE/Network/SDN/Makefile
index 92cfcd0..848f7d4 100644
--- a/src/PVE/Network/SDN/Makefile
+++ b/src/PVE/Network/SDN/Makefile
@@ -10,4 +10,5 @@ install:
make -C Zones install
make -C Ipams install
make -C Dns install
+ make -C Dhcp install
--
2.39.2
More information about the pve-devel
mailing list