diff options
| -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 | 
