summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNataliia S. <81954790+natali-rs1985@users.noreply.github.com>2026-05-13 14:50:43 +0300
committerGitHub <noreply@github.com>2026-05-13 14:50:43 +0300
commitdb23d7201c9df78c91aeeeade6963f2cc12b50b1 (patch)
treec4c6dc3d8c432a743a7bdca2ac1c9d2abf0710e0
parentbe3c157bd695ccb79a4d9cc25eae3328b9ab0a2f (diff)
downloadvyos-1x-db23d7201c9df78c91aeeeade6963f2cc12b50b1.tar.gz
vyos-1x-db23d7201c9df78c91aeeeade6963f2cc12b50b1.zip
T8600: Add option to change logging verbosity in Kea (#5178)
-rw-r--r--data/templates/dhcp-server/kea-dhcp-ddns.conf.j22
-rw-r--r--data/templates/dhcp-server/kea-dhcp4.conf.j215
-rw-r--r--data/templates/dhcp-server/kea-dhcp6.conf.j216
-rw-r--r--interface-definitions/include/dhcp/dhcp-server-common-config.xml.i1
-rw-r--r--interface-definitions/include/dhcp/dhcpv6-server-common-config.xml.i1
-rw-r--r--interface-definitions/include/dhcp/log-level.xml.i34
-rwxr-xr-xsmoketest/scripts/cli/test_service_dhcp-server.py33
-rwxr-xr-xsrc/conf_mode/service_dhcpv6-server.py6
8 files changed, 103 insertions, 5 deletions
diff --git a/data/templates/dhcp-server/kea-dhcp-ddns.conf.j2 b/data/templates/dhcp-server/kea-dhcp-ddns.conf.j2
index 5393ec839..632b38fd8 100644
--- a/data/templates/dhcp-server/kea-dhcp-ddns.conf.j2
+++ b/data/templates/dhcp-server/kea-dhcp-ddns.conf.j2
@@ -27,7 +27,7 @@
"pattern": "%-5p %m\n"
}
],
- "severity": "INFO",
+ "severity": "{{ log_level | upper }}",
"debuglevel": 0
}
]
diff --git a/data/templates/dhcp-server/kea-dhcp4.conf.j2 b/data/templates/dhcp-server/kea-dhcp4.conf.j2
index dae2338ae..75be63ccb 100644
--- a/data/templates/dhcp-server/kea-dhcp4.conf.j2
+++ b/data/templates/dhcp-server/kea-dhcp4.conf.j2
@@ -96,7 +96,20 @@
}
],
{% if shared_network_name is vyos_defined %}
- "shared-networks": {{ shared_network_name | kea_shared_network_json }}
+ "shared-networks": {{ shared_network_name | kea_shared_network_json }},
{% endif %}
+ "loggers": [
+ {
+ "name": "kea-dhcp4",
+ "output_options": [
+ {
+ "output": "stdout",
+ "pattern": "%-5p %m\n"
+ }
+ ],
+ "severity": "{{ log_level | upper }}",
+ "debuglevel": 0
+ }
+ ]
}
}
diff --git a/data/templates/dhcp-server/kea-dhcp6.conf.j2 b/data/templates/dhcp-server/kea-dhcp6.conf.j2
index 41e31d35e..6b4d1d5b0 100644
--- a/data/templates/dhcp-server/kea-dhcp6.conf.j2
+++ b/data/templates/dhcp-server/kea-dhcp6.conf.j2
@@ -59,8 +59,20 @@
{% endif %}
],
{% if shared_network_name is vyos_defined %}
- "shared-networks": {{ shared_network_name | kea6_shared_network_json }}
+ "shared-networks": {{ shared_network_name | kea6_shared_network_json }},
{% endif %}
-
+ "loggers": [
+ {
+ "name": "kea-dhcp6",
+ "output_options": [
+ {
+ "output": "stdout",
+ "pattern": "%-5p %m\n"
+ }
+ ],
+ "severity": "{{ log_level | upper }}",
+ "debuglevel": 0
+ }
+ ]
}
}
diff --git a/interface-definitions/include/dhcp/dhcp-server-common-config.xml.i b/interface-definitions/include/dhcp/dhcp-server-common-config.xml.i
index c52a6e043..64f9707f7 100644
--- a/interface-definitions/include/dhcp/dhcp-server-common-config.xml.i
+++ b/interface-definitions/include/dhcp/dhcp-server-common-config.xml.i
@@ -228,6 +228,7 @@
<valueless/>
</properties>
</leafNode>
+#include <include/dhcp/log-level.xml.i>
#include <include/listen-address-ipv4.xml.i>
#include <include/listen-interface-multi-broadcast.xml.i>
<tagNode name="shared-network-name">
diff --git a/interface-definitions/include/dhcp/dhcpv6-server-common-config.xml.i b/interface-definitions/include/dhcp/dhcpv6-server-common-config.xml.i
index 174b259b9..bc949dd5a 100644
--- a/interface-definitions/include/dhcp/dhcpv6-server-common-config.xml.i
+++ b/interface-definitions/include/dhcp/dhcpv6-server-common-config.xml.i
@@ -28,6 +28,7 @@
<constraintErrorMessage>Preference must be between 0 and 255</constraintErrorMessage>
</properties>
</leafNode>
+#include <include/dhcp/log-level.xml.i>
<tagNode name="shared-network-name">
<properties>
<help>DHCPv6 shared network name</help>
diff --git a/interface-definitions/include/dhcp/log-level.xml.i b/interface-definitions/include/dhcp/log-level.xml.i
new file mode 100644
index 000000000..d9a9e9931
--- /dev/null
+++ b/interface-definitions/include/dhcp/log-level.xml.i
@@ -0,0 +1,34 @@
+<!-- include start from dhcp/log-level.xml.i -->
+<leafNode name="log-level">
+ <properties>
+ <help>Logging level</help>
+ <completionHelp>
+ <list>fatal error warn info debug</list>
+ </completionHelp>
+ <valueHelp>
+ <format>fatal</format>
+ <description>Fatal log level</description>
+ </valueHelp>
+ <valueHelp>
+ <format>error</format>
+ <description>Error log level</description>
+ </valueHelp>
+ <valueHelp>
+ <format>warn</format>
+ <description>Warning log level</description>
+ </valueHelp>
+ <valueHelp>
+ <format>info</format>
+ <description>Informational log level</description>
+ </valueHelp>
+ <valueHelp>
+ <format>debug</format>
+ <description>Debug log level</description>
+ </valueHelp>
+ <constraint>
+ <regex>(fatal|error|warn|info|debug)</regex>
+ </constraint>
+ </properties>
+ <defaultValue>info</defaultValue>
+</leafNode>
+<!-- include end --> \ No newline at end of file
diff --git a/smoketest/scripts/cli/test_service_dhcp-server.py b/smoketest/scripts/cli/test_service_dhcp-server.py
index dfc05cb81..129222313 100755
--- a/smoketest/scripts/cli/test_service_dhcp-server.py
+++ b/smoketest/scripts/cli/test_service_dhcp-server.py
@@ -1800,6 +1800,39 @@ class TestServiceDHCPServer(VyOSUnitTestSHIM.TestCase):
host_json = cmd(f'{HOSTSD_CLIENT} --get-hosts {tag_regex}')
self.assertTrue(host_json)
+ def test_dhcp_log_level(self):
+ shared_net_name = 'SMOKE-TEST'
+ subnet_range_start = inc_ip(subnet, 10)
+ subnet_range_stop = inc_ip(subnet, 20)
+ log_level = 'error'
+
+ pool = base_path + ['shared-network-name', shared_net_name, 'subnet', subnet]
+ self.cli_set(pool + ['subnet-id', '1'])
+ self.cli_set(pool + ['option', 'domain-name', domain_name])
+ self.cli_set(pool + ['range', '0', 'start', subnet_range_start])
+ self.cli_set(pool + ['range', '0', 'stop', subnet_range_stop])
+
+ # Set log level
+ self.cli_set(base_path + ['log-level', log_level])
+ self.cli_commit()
+
+ config = read_file(KEA4_CONF)
+ obj = loads(config)
+
+ # Check log level is ERROR
+ self.verify_config_value(obj, ['Dhcp4', 'loggers', 0], 'name', 'kea-dhcp4')
+ self.verify_config_value(
+ obj, ['Dhcp4', 'loggers', 0], 'severity', log_level.upper()
+ )
+
+ # Delete log-level and check it is set to default INFO
+ self.cli_delete(base_path + ['log-level'])
+ self.cli_commit()
+
+ config = read_file(KEA4_CONF)
+ obj = loads(config)
+ self.verify_config_value(obj, ['Dhcp4', 'loggers', 0], 'severity', 'INFO')
+
if __name__ == '__main__':
unittest.main(verbosity=2, failfast=VyOSUnitTestSHIM.TestCase.debug_on())
diff --git a/src/conf_mode/service_dhcpv6-server.py b/src/conf_mode/service_dhcpv6-server.py
index 308ed82a8..88d34bf61 100755
--- a/src/conf_mode/service_dhcpv6-server.py
+++ b/src/conf_mode/service_dhcpv6-server.py
@@ -93,7 +93,11 @@ def get_config(config=None):
return None
dhcpv6 = conf.get_config_dict(
- base, key_mangling=('-', '_'), get_first_key=True, no_tag_node_value_mangle=True
+ base,
+ key_mangling=('-', '_'),
+ get_first_key=True,
+ no_tag_node_value_mangle=True,
+ with_recursive_defaults=True,
)
# add vrf context if present