From 253d7dc03b3fbf11dd96d4279841a0658b7611fb Mon Sep 17 00:00:00 2001 From: Daniil Baturin Date: Mon, 9 Mar 2020 14:07:37 +0100 Subject: T1967: add a migration script for the enforce-first-as option. --- src/migration-scripts/quagga/3-to-4 | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'src/migration-scripts/quagga/3-to-4') 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) + -- cgit v1.2.3