From b55023315c9bbe040a2ae22aa6580bd62c24fc45 Mon Sep 17 00:00:00 2001 From: Ad Schellevis Date: Tue, 1 Apr 2025 21:22:02 +0200 Subject: [PATCH] Services: Kea DHCP: Kea DHCPv4 - allow manual configuration for advanced scenarios, closes https://github.com/opnsense/core/issues/7822 This commit adds a toggle which skips config file generation for kea-dhcp4.conf and lets the user handle it manuallt, service startup and control stays in place while manually configured. When manual mode is selected, all other options will be hidden in the form, which should help people understand (and read) what the purpose of this toggle is (advanced mode). --- src/etc/inc/plugins.inc.d/kea.inc | 5 +++- .../OPNsense/Kea/forms/generalSettings4.xml | 13 ++++++++- .../mvc/app/models/OPNsense/Kea/KeaDhcpv4.xml | 1 + .../mvc/app/views/OPNsense/Kea/dhcpv4.volt | 28 +++++++++++++++++-- 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/etc/inc/plugins.inc.d/kea.inc b/src/etc/inc/plugins.inc.d/kea.inc index a64113d44..c403d0eac 100644 --- a/src/etc/inc/plugins.inc.d/kea.inc +++ b/src/etc/inc/plugins.inc.d/kea.inc @@ -115,7 +115,10 @@ function kea_configure_do($verbose = false) $keaDhcpv4 = new \OPNsense\Kea\KeaDhcpv4(); if ($keaDhcpv4->isEnabled()) { service_log('Sync KEA DHCP config...', $verbose); - $keaDhcpv4->generateConfig(); + if ($keaDhcpv4->general->manual_config->isEmpty()) { + /* skip kea-dhcp4.conf when configured manually */ + $keaDhcpv4->generateConfig(); + } (new \OPNsense\Kea\KeaCtrlAgent())->generateConfig(); service_log("done.\n", $verbose); } diff --git a/src/opnsense/mvc/app/controllers/OPNsense/Kea/forms/generalSettings4.xml b/src/opnsense/mvc/app/controllers/OPNsense/Kea/forms/generalSettings4.xml index 182df08c3..ae929167c 100644 --- a/src/opnsense/mvc/app/controllers/OPNsense/Kea/forms/generalSettings4.xml +++ b/src/opnsense/mvc/app/controllers/OPNsense/Kea/forms/generalSettings4.xml @@ -1,7 +1,7 @@
header - + dhcpv4.general.enabled @@ -9,6 +9,17 @@ checkbox Enable DHCPv4 server. + + dhcpv4.general.manual_config + + checkbox + true + Disable configuration file generation and manage the file (/usr/local/etc/kea/kea-dhcp4.conf) manually. + + + header + + dhcpv4.general.interfaces diff --git a/src/opnsense/mvc/app/models/OPNsense/Kea/KeaDhcpv4.xml b/src/opnsense/mvc/app/models/OPNsense/Kea/KeaDhcpv4.xml index 83c935a78..876e93268 100644 --- a/src/opnsense/mvc/app/models/OPNsense/Kea/KeaDhcpv4.xml +++ b/src/opnsense/mvc/app/models/OPNsense/Kea/KeaDhcpv4.xml @@ -8,6 +8,7 @@ 0 Y + Y diff --git a/src/opnsense/mvc/app/views/OPNsense/Kea/dhcpv4.volt b/src/opnsense/mvc/app/views/OPNsense/Kea/dhcpv4.volt index 09450dcf1..8b06347df 100644 --- a/src/opnsense/mvc/app/views/OPNsense/Kea/dhcpv4.volt +++ b/src/opnsense/mvc/app/views/OPNsense/Kea/dhcpv4.volt @@ -130,14 +130,36 @@ } }); + /* Manual configuration, hide all config elements except the service section*/ + $("#dhcpv4\\.general\\.manual_config").change(function(){ + let manual_config = $(this).is(':checked'); + if (manual_config) { + if (!$("#show_advanced_frm_generalsettings").hasClass('fa-toggle-on')) { + /* enforce advanced mode so the user notices the checkbox */ + $("#show_advanced_frm_generalsettings").click(); + } + $(".is_managed").hide(); + } else { + $(".is_managed").show(); + } + $("#settings").find('table').each(function(){ + if (manual_config && $(this).find('#dhcpv4\\.general\\.manual_config').length == 0) { + $(this).hide(); + } else { + $(this).show(); + } + }); + }); + + });