diff options
| author | sarthurdev <965089+sarthurdev@users.noreply.github.com> | 2024-02-28 22:59:03 +0100 | 
|---|---|---|
| committer | sarthurdev <965089+sarthurdev@users.noreply.github.com> | 2024-02-28 22:59:03 +0100 | 
| commit | 4f311675217f1b983567565e4c500f8432f3b13f (patch) | |
| tree | 810b46ff494525269cc6c5e1cc92f3255181018d /src | |
| parent | fc96c0150eb632e016d7f2ba8adf32a9940c1e8c (diff) | |
| download | vyos-1x-4f311675217f1b983567565e4c500f8432f3b13f.tar.gz vyos-1x-4f311675217f1b983567565e4c500f8432f3b13f.zip | |
dhcp-server: T6079: Increment Kea migrator versions
Diffstat (limited to 'src')
| -rwxr-xr-x | src/migration-scripts/dhcp-server/6-to-7 | 87 | ||||
| -rwxr-xr-x | src/migration-scripts/dhcp-server/7-to-8 | 66 | ||||
| -rwxr-xr-x | src/migration-scripts/dhcp-server/8-to-9 | 42 | ||||
| -rwxr-xr-x | src/migration-scripts/dhcp-server/9-to-10 | 75 | 
4 files changed, 135 insertions, 135 deletions
| diff --git a/src/migration-scripts/dhcp-server/6-to-7 b/src/migration-scripts/dhcp-server/6-to-7 deleted file mode 100755 index ccf385a30..000000000 --- a/src/migration-scripts/dhcp-server/6-to-7 +++ /dev/null @@ -1,87 +0,0 @@ -#!/usr/bin/env python3 -# -# 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 -# 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/>. - -# T3316: Migrate to Kea -#        - global-parameters will not function -#        - shared-network-parameters will not function -#        - subnet-parameters will not function -#        - static-mapping-parameters will not function -#        - host-decl-name is on by default, option removed -#        - ping-check no longer supported -#        - failover is default enabled on all subnets that exist on failover servers - -import sys -from vyos.configtree import ConfigTree - -if (len(sys.argv) < 2): -    print("Must specify file name!") -    sys.exit(1) - -file_name = sys.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 -    sys.exit(0) - -if config.exists(base + ['host-decl-name']): -    config.delete(base + ['host-decl-name']) - -if config.exists(base + ['global-parameters']): -    config.delete(base + ['global-parameters']) - -if config.exists(base + ['shared-network-name']): -    for network in config.list_nodes(base + ['shared-network-name']): -        base_network = base + ['shared-network-name', network] - -        if config.exists(base_network + ['ping-check']): -            config.delete(base_network + ['ping-check']) - -        if config.exists(base_network + ['shared-network-parameters']): -            config.delete(base_network +['shared-network-parameters']) - -        if not config.exists(base_network + ['subnet']): -            continue - -        # Run this for every specified 'subnet' -        for subnet in config.list_nodes(base_network + ['subnet']): -            base_subnet = base_network + ['subnet', subnet] - -            if config.exists(base_subnet + ['enable-failover']): -                config.delete(base_subnet + ['enable-failover']) - -            if config.exists(base_subnet + ['ping-check']): -                config.delete(base_subnet + ['ping-check']) - -            if config.exists(base_subnet + ['subnet-parameters']): -                config.delete(base_subnet + ['subnet-parameters']) - -            if config.exists(base_subnet + ['static-mapping']): -                for mapping in config.list_nodes(base_subnet + ['static-mapping']): -                    if config.exists(base_subnet + ['static-mapping', mapping, 'static-mapping-parameters']): -                        config.delete(base_subnet + ['static-mapping', mapping, 'static-mapping-parameters']) - -try: -    with open(file_name, 'w') as f: -        f.write(config.to_string()) -except OSError as e: -    print("Failed to save the modified config: {}".format(e)) -    exit(1) diff --git a/src/migration-scripts/dhcp-server/7-to-8 b/src/migration-scripts/dhcp-server/7-to-8 index 151aa6d7b..ccf385a30 100755 --- a/src/migration-scripts/dhcp-server/7-to-8 +++ b/src/migration-scripts/dhcp-server/7-to-8 @@ -14,16 +14,19 @@  # You should have received a copy of the GNU General Public License  # along with this program.  If not, see <http://www.gnu.org/licenses/>. -# T3316: -# - 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 ..." +# T3316: Migrate to Kea +#        - global-parameters will not function +#        - shared-network-parameters will not function +#        - subnet-parameters will not function +#        - static-mapping-parameters will not function +#        - host-decl-name is on by default, option removed +#        - ping-check no longer supported +#        - failover is default enabled on all subnets that exist on failover servers  import sys -import re  from vyos.configtree import ConfigTree -if len(sys.argv) < 2: +if (len(sys.argv) < 2):      print("Must specify file name!")      sys.exit(1) @@ -32,30 +35,49 @@ file_name = sys.argv[1]  with open(file_name, 'r') as f:      config_file = f.read() -base = ['service', 'dhcp-server', 'shared-network-name'] +base = ['service', 'dhcp-server']  config = ConfigTree(config_file)  if not config.exists(base):      # Nothing to do      sys.exit(0) -for network in config.list_nodes(base): -    # 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] -            if config.exists(base_subnet + ['static-mapping']): -                for hostname in config.list_nodes(base_subnet + ['static-mapping']): -                    base_mapping = base_subnet + ['static-mapping', hostname] +if config.exists(base + ['host-decl-name']): +    config.delete(base + ['host-decl-name']) + +if config.exists(base + ['global-parameters']): +    config.delete(base + ['global-parameters']) + +if config.exists(base + ['shared-network-name']): +    for network in config.list_nodes(base + ['shared-network-name']): +        base_network = base + ['shared-network-name', network] + +        if config.exists(base_network + ['ping-check']): +            config.delete(base_network + ['ping-check']) + +        if config.exists(base_network + ['shared-network-parameters']): +            config.delete(base_network +['shared-network-parameters']) -                    # Rename the 'mac-address' node to 'mac' -                    if config.exists(base_mapping + ['mac-address']): -                        config.rename(base_mapping + ['mac-address'], 'mac') +        if not config.exists(base_network + ['subnet']): +            continue -                    # 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) +        # Run this for every specified 'subnet' +        for subnet in config.list_nodes(base_network + ['subnet']): +            base_subnet = base_network + ['subnet', subnet] + +            if config.exists(base_subnet + ['enable-failover']): +                config.delete(base_subnet + ['enable-failover']) + +            if config.exists(base_subnet + ['ping-check']): +                config.delete(base_subnet + ['ping-check']) + +            if config.exists(base_subnet + ['subnet-parameters']): +                config.delete(base_subnet + ['subnet-parameters']) + +            if config.exists(base_subnet + ['static-mapping']): +                for mapping in config.list_nodes(base_subnet + ['static-mapping']): +                    if config.exists(base_subnet + ['static-mapping', mapping, 'static-mapping-parameters']): +                        config.delete(base_subnet + ['static-mapping', mapping, 'static-mapping-parameters'])  try:      with open(file_name, 'w') as f: 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: diff --git a/src/migration-scripts/dhcp-server/9-to-10 b/src/migration-scripts/dhcp-server/9-to-10 new file mode 100755 index 000000000..810e403a6 --- /dev/null +++ b/src/migration-scripts/dhcp-server/9-to-10 @@ -0,0 +1,75 @@ +#!/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/>. + +# T3316: +# - Migrate dhcp options under new option node +# - Add subnet IDs to existing subnets + +import sys +import re +from vyos.configtree import ConfigTree + +if len(sys.argv) < 2: +    print("Must specify file name!") +    sys.exit(1) + +file_name = sys.argv[1] + +with open(file_name, 'r') as f: +    config_file = f.read() + +base = ['service', 'dhcp-server', 'shared-network-name'] +config = ConfigTree(config_file) + +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]) + +    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]) + +            config.set(base_subnet + ['subnet-id'], value=subnet_id) +            subnet_id += 1 + +try: +    with open(file_name, 'w') as f: +        f.write(config.to_string()) +except OSError as e: +    print("Failed to save the modified config: {}".format(e)) +    exit(1) | 
