diff options
| author | Nataliia S. <81954790+natali-rs1985@users.noreply.github.com> | 2026-05-13 14:50:43 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-05-13 14:50:43 +0300 |
| commit | db23d7201c9df78c91aeeeade6963f2cc12b50b1 (patch) | |
| tree | c4c6dc3d8c432a743a7bdca2ac1c9d2abf0710e0 | |
| parent | be3c157bd695ccb79a4d9cc25eae3328b9ab0a2f (diff) | |
| download | vyos-1x-db23d7201c9df78c91aeeeade6963f2cc12b50b1.tar.gz vyos-1x-db23d7201c9df78c91aeeeade6963f2cc12b50b1.zip | |
T8600: Add option to change logging verbosity in Kea (#5178)
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 |
