diff options
| author | Christian Poessinger <christian@poessinger.com> | 2021-11-15 20:53:05 +0100 | 
|---|---|---|
| committer | Christian Poessinger <christian@poessinger.com> | 2021-11-15 20:53:05 +0100 | 
| commit | f4f447738aa1ebbe01b6d2acf75bccf5fbebad9c (patch) | |
| tree | 5921c85dc07f5c813a469836de043d0e6bd06aaa | |
| parent | e196fae2f934a9c9eb5608cfbc0ff715faae896e (diff) | |
| download | vyos-1x-f4f447738aa1ebbe01b6d2acf75bccf5fbebad9c.tar.gz vyos-1x-f4f447738aa1ebbe01b6d2acf75bccf5fbebad9c.zip | |
vrf: T3960: when adding multiple VRFs and VNIs - do not delete previous ones
| -rw-r--r-- | data/templates/frr/vrf-vni.frr.tmpl | 10 | ||||
| -rw-r--r-- | interface-definitions/vrf.xml.in | 2 | ||||
| -rwxr-xr-x | src/conf_mode/vrf_vni.py | 25 | 
3 files changed, 15 insertions, 22 deletions
| diff --git a/data/templates/frr/vrf-vni.frr.tmpl b/data/templates/frr/vrf-vni.frr.tmpl index 51d4ede1b..299c9719e 100644 --- a/data/templates/frr/vrf-vni.frr.tmpl +++ b/data/templates/frr/vrf-vni.frr.tmpl @@ -1,7 +1,9 @@ -{% if vrf is defined and vrf is not none %} +{% if name is defined and name is not none %} +{%   for vrf, vrf_config in name.items() %}  vrf {{ vrf }} -{%   if vni is defined and vni is not none %} - vni {{ vni }} -{%   endif %} +{%     if vrf_config.vni is defined and vrf_config.vni is not none %} + vni {{ vrf_config.vni }} +{%     endif %}   exit-vrf +{%   endfor %}  {% endif %} diff --git a/interface-definitions/vrf.xml.in b/interface-definitions/vrf.xml.in index a82c0b2a6..d6a602f53 100644 --- a/interface-definitions/vrf.xml.in +++ b/interface-definitions/vrf.xml.in @@ -85,7 +85,7 @@                <constraintErrorMessage>VRF routing table must be in range from 100 to 65535</constraintErrorMessage>              </properties>            </leafNode> -          <leafNode name="vni" owner="${vyos_conf_scripts_dir}/vrf_vni.py $VAR(../@)"> +          <leafNode name="vni" owner="${vyos_conf_scripts_dir}/vrf_vni.py">              <properties>                <help>Virtual Network Identifier</help>                <!-- priority must be after BGP --> diff --git a/src/conf_mode/vrf_vni.py b/src/conf_mode/vrf_vni.py index 87ee8f2d1..8baa73801 100755 --- a/src/conf_mode/vrf_vni.py +++ b/src/conf_mode/vrf_vni.py @@ -32,32 +32,23 @@ def get_config(config=None):      else:          conf = Config() -    # This script only works with a passed VRF name -    if len(argv) < 1: -        raise NotImplementedError -    vrf = argv[1] +    base = ['vrf'] +    vrf = conf.get_config_dict(base, get_first_key=True) +    return vrf -    # "assemble" dict - easier here then use a full blown get_config_dict() -    # on a single leafNode -    vni = { 'vrf' : vrf } -    tmp = conf.return_value(['vrf', 'name', vrf, 'vni']) -    if tmp: vni.update({ 'vni' : tmp }) - -    return vni - -def verify(vni): +def verify(vrf):      return None -def generate(vni): -    vni['new_frr_config'] = render_to_string('frr/vrf-vni.frr.tmpl', vni) +def generate(vrf): +    vrf['new_frr_config'] = render_to_string('frr/vrf-vni.frr.tmpl', vrf)      return None -def apply(vni): +def apply(vrf):      # add configuration to FRR      frr_cfg = frr.FRRConfig()      frr_cfg.load_configuration(frr_daemon)      frr_cfg.modify_section(f'^vrf [a-zA-Z-]*$', '') -    frr_cfg.add_before(r'(interface .*|line vty)', vni['new_frr_config']) +    frr_cfg.add_before(r'(interface .*|line vty)', vrf['new_frr_config'])      frr_cfg.commit_configuration(frr_daemon)      # Save configuration to /run/frr/config/frr.conf | 
