diff options
Diffstat (limited to 'src/migration-scripts/dhcp-server/8-to-9')
| -rwxr-xr-x | src/migration-scripts/dhcp-server/8-to-9 | 42 | 
1 files changed, 16 insertions, 26 deletions
| diff --git a/src/migration-scripts/dhcp-server/8-to-9 b/src/migration-scripts/dhcp-server/8-to-9 index 810e403a6..151aa6d7b 100755 --- a/src/migration-scripts/dhcp-server/8-to-9 +++ b/src/migration-scripts/dhcp-server/8-to-9 @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2024 VyOS maintainers and contributors +# Copyright (C) 2023 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 @@ -15,8 +15,9 @@  # along with this program.  If not, see <http://www.gnu.org/licenses/>.  # T3316: -# - Migrate dhcp options under new option node -# - Add subnet IDs to existing subnets +# - Adjust hostname to have valid FQDN characters only (underscores aren't allowed anymore) +# - Rename "service dhcp-server shared-network-name ... static-mapping <hostname> mac-address ..." +#       to "service dhcp-server shared-network-name ... static-mapping <hostname> mac ..."  import sys  import re @@ -38,34 +39,23 @@ if not config.exists(base):      # Nothing to do      sys.exit(0) -option_nodes = ['bootfile-name', 'bootfile-server', 'bootfile-size', 'captive-portal', -                'client-prefix-length', 'default-router', 'domain-name', 'domain-search', -                'name-server', 'ip-forwarding', 'ipv6-only-preferred', 'ntp-server', -                'pop-server', 'server-identifier', 'smtp-server', 'static-route', -                'tftp-server-name', 'time-offset', 'time-server', 'time-zone', -                'vendor-option', 'wins-server', 'wpad-url'] - -subnet_id = 1 -  for network in config.list_nodes(base): -    for option in option_nodes: -        if config.exists(base + [network, option]): -            config.set(base + [network, 'option']) -            config.copy(base + [network, option], base + [network, 'option', option]) -            config.delete(base + [network, option]) - +    # Run this for every specified 'subnet'      if config.exists(base + [network, 'subnet']):          for subnet in config.list_nodes(base + [network, 'subnet']):              base_subnet = base + [network, 'subnet', subnet] -             -            for option in option_nodes: -                if config.exists(base_subnet + [option]): -                    config.set(base_subnet + ['option']) -                    config.copy(base_subnet + [option], base_subnet + ['option', option]) -                    config.delete(base_subnet + [option]) +            if config.exists(base_subnet + ['static-mapping']): +                for hostname in config.list_nodes(base_subnet + ['static-mapping']): +                    base_mapping = base_subnet + ['static-mapping', hostname] + +                    # Rename the 'mac-address' node to 'mac' +                    if config.exists(base_mapping + ['mac-address']): +                        config.rename(base_mapping + ['mac-address'], 'mac') -            config.set(base_subnet + ['subnet-id'], value=subnet_id) -            subnet_id += 1 +                    # Adjust hostname to have valid FQDN characters only +                    new_hostname = re.sub(r'[^a-zA-Z0-9-.]', '-', hostname) +                    if new_hostname != hostname: +                        config.rename(base_mapping, new_hostname)  try:      with open(file_name, 'w') as f: | 
