diff options
author | Daniil Baturin <daniil@vyos.io> | 2024-03-25 20:28:00 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-25 20:28:00 +0100 |
commit | 515b577b62e420d0a89d02ec5af3bb066a2b785a (patch) | |
tree | 4f39d56d94d0858570b95348ab4fc19573e3b810 | |
parent | 7c0be25eea90cf9324e421b6c2dfda9bda2ecb7e (diff) | |
parent | 98f923bd0f4dd66db5c89f38f9aa3c13ba23edcd (diff) | |
download | vyos-1x-515b577b62e420d0a89d02ec5af3bb066a2b785a.tar.gz vyos-1x-515b577b62e420d0a89d02ec5af3bb066a2b785a.zip |
Merge pull request #3188 from nicolas-fort/T6171
T6171: migrate <set service dhcp-server failover> to <set service dhcp-server high-availability>
-rw-r--r-- | data/templates/dhcp-server/kea-ctrl-agent.conf.j2 | 4 | ||||
-rw-r--r-- | data/templates/dhcp-server/kea-dhcp4.conf.j2 | 4 | ||||
-rw-r--r-- | interface-definitions/include/version/dhcp-server-version.xml.i | 2 | ||||
-rw-r--r-- | interface-definitions/service_dhcp-server.xml.in | 12 | ||||
-rw-r--r-- | python/vyos/template.py | 4 | ||||
-rwxr-xr-x | smoketest/scripts/cli/test_service_dhcp-server.py | 10 | ||||
-rwxr-xr-x | src/conf_mode/service_dhcp-server.py | 48 | ||||
-rwxr-xr-x | src/migration-scripts/dhcp-server/10-to-11 | 48 |
8 files changed, 90 insertions, 42 deletions
diff --git a/data/templates/dhcp-server/kea-ctrl-agent.conf.j2 b/data/templates/dhcp-server/kea-ctrl-agent.conf.j2 index 74c63a7a0..b37cf4798 100644 --- a/data/templates/dhcp-server/kea-ctrl-agent.conf.j2 +++ b/data/templates/dhcp-server/kea-ctrl-agent.conf.j2 @@ -1,7 +1,7 @@ { "Control-agent": { -{% if failover is vyos_defined %} - "http-host": "{{ failover.source_address }}", +{% if high_availability is vyos_defined %} + "http-host": "{{ high_availability.source_address }}", "http-port": 647, "control-sockets": { "dhcp4": { diff --git a/data/templates/dhcp-server/kea-dhcp4.conf.j2 b/data/templates/dhcp-server/kea-dhcp4.conf.j2 index 629fa952a..bf37b94f6 100644 --- a/data/templates/dhcp-server/kea-dhcp4.conf.j2 +++ b/data/templates/dhcp-server/kea-dhcp4.conf.j2 @@ -51,11 +51,11 @@ } ], "hooks-libraries": [ -{% if failover is vyos_defined %} +{% if high_availability is vyos_defined %} { "library": "/usr/lib/{{ machine }}-linux-gnu/kea/hooks/libdhcp_ha.so", "parameters": { - "high-availability": [{{ failover | kea_failover_json }}] + "high-availability": [{{ high_availability | kea_high_availability_json }}] } }, {% endif %} diff --git a/interface-definitions/include/version/dhcp-server-version.xml.i b/interface-definitions/include/version/dhcp-server-version.xml.i index 3dcbc513a..71f3d4a36 100644 --- a/interface-definitions/include/version/dhcp-server-version.xml.i +++ b/interface-definitions/include/version/dhcp-server-version.xml.i @@ -1,3 +1,3 @@ <!-- include start from include/version/dhcp-server-version.xml.i --> -<syntaxVersion component='dhcp-server' version='10'></syntaxVersion> +<syntaxVersion component='dhcp-server' version='11'></syntaxVersion> <!-- include end --> diff --git a/interface-definitions/service_dhcp-server.xml.in b/interface-definitions/service_dhcp-server.xml.in index 1c10a462d..2afa05a8a 100644 --- a/interface-definitions/service_dhcp-server.xml.in +++ b/interface-definitions/service_dhcp-server.xml.in @@ -16,18 +16,18 @@ <valueless/> </properties> </leafNode> - <node name="failover"> + <node name="high-availability"> <properties> - <help>DHCP failover configuration</help> + <help>DHCP high availability configuration</help> </properties> <children> #include <include/source-address-ipv4.xml.i> <leafNode name="remote"> <properties> - <help>IPv4 remote address used for connectio</help> + <help>IPv4 remote address used for connection</help> <valueHelp> <format>ipv4</format> - <description>IPv4 address of failover peer</description> + <description>IPv4 address of high availability peer</description> </valueHelp> <constraint> <validator name="ipv4-address"/> @@ -45,7 +45,7 @@ </leafNode> <leafNode name="status"> <properties> - <help>Failover hierarchy</help> + <help>High availability hierarchy</help> <completionHelp> <list>primary secondary</list> </completionHelp> @@ -60,7 +60,7 @@ <constraint> <regex>(primary|secondary)</regex> </constraint> - <constraintErrorMessage>Invalid DHCP failover peer status</constraintErrorMessage> + <constraintErrorMessage>Invalid DHCP high availability peer status</constraintErrorMessage> </properties> </leafNode> #include <include/pki/ca-certificate.xml.i> diff --git a/python/vyos/template.py b/python/vyos/template.py index 456239568..bde8e3554 100644 --- a/python/vyos/template.py +++ b/python/vyos/template.py @@ -803,8 +803,8 @@ def kea_address_json(addresses): return dumps(out) -@register_filter('kea_failover_json') -def kea_failover_json(config): +@register_filter('kea_high_availability_json') +def kea_high_availability_json(config): from json import dumps source_addr = config['source_address'] diff --git a/smoketest/scripts/cli/test_service_dhcp-server.py b/smoketest/scripts/cli/test_service_dhcp-server.py index b582a2108..24bd14af2 100755 --- a/smoketest/scripts/cli/test_service_dhcp-server.py +++ b/smoketest/scripts/cli/test_service_dhcp-server.py @@ -673,7 +673,7 @@ class TestServiceDHCPServer(VyOSUnitTestSHIM.TestCase): # Check for running process self.assertTrue(process_named_running(PROCESS_NAME)) - def test_dhcp_failover(self): + def test_dhcp_high_availability(self): shared_net_name = 'FAILOVER' failover_name = 'VyOS-Failover' @@ -695,10 +695,10 @@ class TestServiceDHCPServer(VyOSUnitTestSHIM.TestCase): failover_local = router failover_remote = inc_ip(router, 1) - self.cli_set(base_path + ['failover', 'source-address', failover_local]) - self.cli_set(base_path + ['failover', 'name', failover_name]) - self.cli_set(base_path + ['failover', 'remote', failover_remote]) - self.cli_set(base_path + ['failover', 'status', 'primary']) + self.cli_set(base_path + ['high-availability', 'source-address', failover_local]) + self.cli_set(base_path + ['high-availability', 'name', failover_name]) + self.cli_set(base_path + ['high-availability', 'remote', failover_remote]) + self.cli_set(base_path + ['high-availability', 'status', 'primary']) # commit changes self.cli_commit() diff --git a/src/conf_mode/service_dhcp-server.py b/src/conf_mode/service_dhcp-server.py index 91ea354b6..ba3d69b07 100755 --- a/src/conf_mode/service_dhcp-server.py +++ b/src/conf_mode/service_dhcp-server.py @@ -143,7 +143,7 @@ def get_config(config=None): dhcp['shared_network_name'][network]['subnet'][subnet].update( {'range' : new_range_dict}) - if dict_search('failover.certificate', dhcp): + if dict_search('high_availability.certificate', dhcp): dhcp['pki'] = conf.get_config_dict(['pki'], key_mangling=('-', '_'), get_first_key=True, no_tag_node_value_mangle=True) return dhcp @@ -286,34 +286,34 @@ def verify(dhcp): if (shared_networks - disabled_shared_networks) < 1: raise ConfigError(f'At least one shared network must be active!') - if 'failover' in dhcp: + if 'high_availability' in dhcp: for key in ['name', 'remote', 'source_address', 'status']: - if key not in dhcp['failover']: + if key not in dhcp['high_availability']: tmp = key.replace('_', '-') - raise ConfigError(f'DHCP failover requires "{tmp}" to be specified!') + raise ConfigError(f'DHCP high-availability requires "{tmp}" to be specified!') - if len({'certificate', 'ca_certificate'} & set(dhcp['failover'])) == 1: - raise ConfigError(f'DHCP secured failover requires both certificate and CA certificate') + if len({'certificate', 'ca_certificate'} & set(dhcp['high_availability'])) == 1: + raise ConfigError(f'DHCP secured high-availability requires both certificate and CA certificate') - if 'certificate' in dhcp['failover']: - cert_name = dhcp['failover']['certificate'] + if 'certificate' in dhcp['high_availability']: + cert_name = dhcp['high_availability']['certificate'] if cert_name not in dhcp['pki']['certificate']: - raise ConfigError(f'Invalid certificate specified for DHCP failover') + raise ConfigError(f'Invalid certificate specified for DHCP high-availability') if not dict_search_args(dhcp['pki']['certificate'], cert_name, 'certificate'): - raise ConfigError(f'Invalid certificate specified for DHCP failover') + raise ConfigError(f'Invalid certificate specified for DHCP high-availability') if not dict_search_args(dhcp['pki']['certificate'], cert_name, 'private', 'key'): - raise ConfigError(f'Missing private key on certificate specified for DHCP failover') + raise ConfigError(f'Missing private key on certificate specified for DHCP high-availability') - if 'ca_certificate' in dhcp['failover']: - ca_cert_name = dhcp['failover']['ca_certificate'] + if 'ca_certificate' in dhcp['high_availability']: + ca_cert_name = dhcp['high_availability']['ca_certificate'] if ca_cert_name not in dhcp['pki']['ca']: - raise ConfigError(f'Invalid CA certificate specified for DHCP failover') + raise ConfigError(f'Invalid CA certificate specified for DHCP high-availability') if not dict_search_args(dhcp['pki']['ca'], ca_cert_name, 'certificate'): - raise ConfigError(f'Invalid CA certificate specified for DHCP failover') + raise ConfigError(f'Invalid CA certificate specified for DHCP high-availability') for address in (dict_search('listen_address', dhcp) or []): if is_addr_assigned(address): @@ -359,23 +359,23 @@ def generate(dhcp): if os.path.exists(f): os.unlink(f) - if 'failover' in dhcp: - if 'certificate' in dhcp['failover']: - cert_name = dhcp['failover']['certificate'] + if 'high_availability' in dhcp: + if 'certificate' in dhcp['high_availability']: + cert_name = dhcp['high_availability']['certificate'] cert_data = dhcp['pki']['certificate'][cert_name]['certificate'] key_data = dhcp['pki']['certificate'][cert_name]['private']['key'] write_file(cert_file, wrap_certificate(cert_data), user=user_group, mode=0o600) write_file(cert_key_file, wrap_private_key(key_data), user=user_group, mode=0o600) - dhcp['failover']['cert_file'] = cert_file - dhcp['failover']['cert_key_file'] = cert_key_file + dhcp['high_availability']['cert_file'] = cert_file + dhcp['high_availability']['cert_key_file'] = cert_key_file - if 'ca_certificate' in dhcp['failover']: - ca_cert_name = dhcp['failover']['ca_certificate'] + if 'ca_certificate' in dhcp['high_availability']: + ca_cert_name = dhcp['high_availability']['ca_certificate'] ca_cert_data = dhcp['pki']['ca'][ca_cert_name]['certificate'] write_file(ca_cert_file, wrap_certificate(ca_cert_data), user=user_group, mode=0o600) - dhcp['failover']['ca_cert_file'] = ca_cert_file + dhcp['high_availability']['ca_cert_file'] = ca_cert_file render(systemd_override, 'dhcp-server/10-override.conf.j2', dhcp) @@ -402,7 +402,7 @@ def apply(dhcp): if service == 'kea-dhcp-ddns-server' and 'dynamic_dns_update' not in dhcp: action = 'stop' - if service == 'kea-ctrl-agent' and 'failover' not in dhcp: + if service == 'kea-ctrl-agent' and 'high_availability' not in dhcp: action = 'stop' call(f'systemctl {action} {service}.service') diff --git a/src/migration-scripts/dhcp-server/10-to-11 b/src/migration-scripts/dhcp-server/10-to-11 new file mode 100755 index 000000000..a0dc96ad0 --- /dev/null +++ b/src/migration-scripts/dhcp-server/10-to-11 @@ -0,0 +1,48 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2024 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# T6171: rename "service dhcp-server failover" to "service dhcp-server high-availability" + +from sys import argv +from sys import exit + +from vyos.configtree import ConfigTree + +if len(argv) < 2: + print("Must specify file name!") + exit(1) + +file_name = argv[1] + +with open(file_name, 'r') as f: + config_file = f.read() + +base = ['service', 'dhcp-server'] +config = ConfigTree(config_file) + +if not config.exists(base): + # Nothing to do + exit(0) + +if config.exists(base + ['failover']): + config.rename(base + ['failover'],'high-availability') + +try: + with open(file_name, 'w') as f: + f.write(config.to_string()) +except OSError as e: + print(f'Failed to save the modified config: {e}') + exit(1)
\ No newline at end of file |