diff options
| author | Daniil Baturin <daniil@baturin.org> | 2020-03-09 14:07:37 +0100 | 
|---|---|---|
| committer | Daniil Baturin <daniil@baturin.org> | 2020-03-09 14:10:37 +0100 | 
| commit | 253d7dc03b3fbf11dd96d4279841a0658b7611fb (patch) | |
| tree | ab61fde0ed14d1fd490a1c4ec65ee0f35bea7dcc /src | |
| parent | 8ea275db78d93db391a357c6ffe1894e4e52abc6 (diff) | |
| download | vyos-1x-253d7dc03b3fbf11dd96d4279841a0658b7611fb.tar.gz vyos-1x-253d7dc03b3fbf11dd96d4279841a0658b7611fb.zip | |
T1967: add a migration script for the enforce-first-as option.
Diffstat (limited to 'src')
| -rwxr-xr-x | src/migration-scripts/quagga/3-to-4 | 25 | ||||
| -rwxr-xr-x | src/migration-scripts/quagga/4-to-5 | 63 | 
2 files changed, 82 insertions, 6 deletions
| diff --git a/src/migration-scripts/quagga/3-to-4 b/src/migration-scripts/quagga/3-to-4 index f8c87ce8c..be3528391 100755 --- a/src/migration-scripts/quagga/3-to-4 +++ b/src/migration-scripts/quagga/3-to-4 @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2019 VyOS maintainers and contributors +# Copyright (C) 2020 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 @@ -16,6 +16,13 @@  #  # +# Between 1.2.3 and 1.2.4, FRR added per-neighbor enforce-first-as option. +# Unfortunately they also removed the global enforce-first-as option, +# which broke all old configs that used to have it. +# +# To emulate the effect of the original option, we insert it in every neighbor +# if the config used to have the original global option +  import sys  from vyos.configtree import ConfigTree @@ -45,11 +52,16 @@ else:          # There's actually no BGP, just its empty shell          sys.exit(0) -    # Check if BGP scan-time parameter exist -    scan_time_param = ['protocols', 'bgp', asn, 'parameters', 'scan-time'] -    if config.exists(scan_time_param): -        # Delete BGP scan-time parameter -        config.delete(scan_time_param) +    # Check if BGP enforce-first-as option is set +    enforce_first_as_path = ['protocols', 'bgp', asn, 'parameters', 'enforce-first-as'] +    if config.exists(enforce_first_as_path): +        # Delete the obsolete option +        config.delete(enforce_first_as_path) + +        # Now insert it in every peer +        peers = config.list_nodes(['protocols', 'bgp', asn, 'neighbor']) +        for p in peers: +            config.set(['protocols', 'bgp', asn, 'neighbor', p, 'enforce-first-as'])      else:          # Do nothing          sys.exit(0) @@ -61,3 +73,4 @@ else:      except OSError as e:          print("Failed to save the modified config: {}".format(e))          sys.exit(1) + diff --git a/src/migration-scripts/quagga/4-to-5 b/src/migration-scripts/quagga/4-to-5 new file mode 100755 index 000000000..f8c87ce8c --- /dev/null +++ b/src/migration-scripts/quagga/4-to-5 @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2019 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/>. +# +# + +import sys + +from vyos.configtree import ConfigTree + + +if (len(sys.argv) < 1): +    print("Must specify file name!") +    sys.exit(1) + +file_name = sys.argv[1] + +with open(file_name, 'r') as f: +    config_file = f.read() + +config = ConfigTree(config_file) + +if not config.exists(['protocols', 'bgp']): +    # Nothing to do +    sys.exit(0) +else: +    # Check if BGP is actually configured and obtain the ASN +    asn_list = config.list_nodes(['protocols', 'bgp']) +    if asn_list: +        # There's always just one BGP node, if any +        asn = asn_list[0] +    else: +        # There's actually no BGP, just its empty shell +        sys.exit(0) + +    # Check if BGP scan-time parameter exist +    scan_time_param = ['protocols', 'bgp', asn, 'parameters', 'scan-time'] +    if config.exists(scan_time_param): +        # Delete BGP scan-time parameter +        config.delete(scan_time_param) +    else: +        # Do nothing +        sys.exit(0) + +    # Save a new configuration file +    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)) +        sys.exit(1) | 
