diff options
| author | Christian Poessinger <christian@poessinger.com> | 2021-07-31 23:23:32 +0200 | 
|---|---|---|
| committer | Christian Poessinger <christian@poessinger.com> | 2021-07-31 23:23:32 +0200 | 
| commit | c7338eebe9b759885bb4fa8580c787382b20e29f (patch) | |
| tree | 464e1e6ab3601279bbf371185a0f5db872c4d1b7 | |
| parent | 58a77a7aea020d32fc4c90301b9937609fc8a0eb (diff) | |
| download | vyos-1x-c7338eebe9b759885bb4fa8580c787382b20e29f.tar.gz vyos-1x-c7338eebe9b759885bb4fa8580c787382b20e29f.zip  | |
bgp: vrf: T3694: cannot delete default BGP instance when VRF BGP instance exists
| -rwxr-xr-x | src/conf_mode/protocols_bgp.py | 10 | 
1 files changed, 10 insertions, 0 deletions
diff --git a/src/conf_mode/protocols_bgp.py b/src/conf_mode/protocols_bgp.py index 1a2fabded..9ecfd07fe 100755 --- a/src/conf_mode/protocols_bgp.py +++ b/src/conf_mode/protocols_bgp.py @@ -57,6 +57,11 @@ def get_config(config=None):      if not conf.exists(base):          bgp.update({'deleted' : ''}) +        if not vrf: +            # We are running in the default VRF context, thus we can not delete +            # our main BGP instance if there are dependent BGP VRF instances. +            bgp['dependent_vrfs'] = conf.get_config_dict(['vrf', 'name'], +                key_mangling=('-', '_'), get_first_key=True, no_tag_node_value_mangle=True)          return bgp      # We also need some additional information from the config, prefix-lists @@ -96,6 +101,11 @@ def verify_remote_as(peer_config, bgp_config):  def verify(bgp):      if not bgp or 'deleted' in bgp: +        if 'dependent_vrfs' in bgp: +            for vrf, vrf_options in bgp['dependent_vrfs'].items(): +                if dict_search('protocols.bgp', vrf_options) != None: +                    raise ConfigError('Cannot delete default BGP instance, ' \ +                                      'dependent VRF instance(s) exist!')          return None      if 'local_as' not in bgp:  | 
