diff options
Diffstat (limited to 'src/conf_mode/protocols_babel.py')
| -rwxr-xr-x | src/conf_mode/protocols_babel.py | 81 | 
1 files changed, 16 insertions, 65 deletions
diff --git a/src/conf_mode/protocols_babel.py b/src/conf_mode/protocols_babel.py index 90b6e4a31..48b7ae734 100755 --- a/src/conf_mode/protocols_babel.py +++ b/src/conf_mode/protocols_babel.py @@ -17,15 +17,14 @@  from sys import exit  from vyos.config import Config -from vyos.config import config_dict_merge -from vyos.configdict import dict_merge -from vyos.configdict import node_changed +from vyos.configdict import get_frrender_dict +from vyos.configverify import has_frr_protocol_in_dict  from vyos.configverify import verify_access_list  from vyos.configverify import verify_prefix_list +from vyos.frrender import FRRender  from vyos.utils.dict import dict_search -from vyos.template import render_to_string +from vyos.utils.process import is_systemd_service_running  from vyos import ConfigError -from vyos import frr  from vyos import airbag  airbag.enable() @@ -34,46 +33,16 @@ def get_config(config=None):          conf = config      else:          conf = Config() -    base = ['protocols', 'babel'] -    babel = conf.get_config_dict(base, key_mangling=('-', '_'), -                                 get_first_key=True) -    # FRR has VRF support for different routing daemons. As interfaces belong -    # to VRFs - or the global VRF, we need to check for changed interfaces so -    # that they will be properly rendered for the FRR config. Also this eases -    # removal of interfaces from the running configuration. -    interfaces_removed = node_changed(conf, base + ['interface']) -    if interfaces_removed: -        babel['interface_removed'] = list(interfaces_removed) +    return get_frrender_dict(conf) -    # Bail out early if configuration tree does not exist -    if not conf.exists(base): -        babel.update({'deleted' : ''}) -        return babel - -    # We have gathered the dict representation of the CLI, but there are default -    # values which we need to update into the dictionary retrieved. -    default_values = conf.get_config_defaults(base, key_mangling=('-', '_'), -                                              get_first_key=True, -                                              recursive=True) - -    # merge in default values -    babel = config_dict_merge(default_values, babel) - -    # We also need some additional information from the config, prefix-lists -    # and route-maps for instance. They will be used in verify(). -    # -    # XXX: one MUST always call this without the key_mangling() option! See -    # vyos.configverify.verify_common_route_maps() for more information. -    tmp = conf.get_config_dict(['policy']) -    # Merge policy dict into "regular" config dict -    babel = dict_merge(tmp, babel) -    return babel - -def verify(babel): -    if not babel: +def verify(config_dict): +    if not has_frr_protocol_in_dict(config_dict, 'babel'):          return None +    babel = config_dict['babel'] +    babel['policy'] = config_dict['policy'] +      # verify distribute_list      if "distribute_list" in babel:          acl_keys = { @@ -120,32 +89,14 @@ def verify(babel):                      verify_prefix_list(prefix_list, babel, version='6' if address_family == 'ipv6' else '') -def generate(babel): -    if not babel or 'deleted' in babel: -        return None - -    babel['new_frr_config'] = render_to_string('frr/babeld.frr.j2', babel) +def generate(config_dict): +    if config_dict and not is_systemd_service_running('vyos-configd.service'): +        FRRender().generate(config_dict)      return None -def apply(babel): -    babel_daemon = 'babeld' - -    # Save original configuration prior to starting any commit actions -    frr_cfg = frr.FRRConfig() - -    frr_cfg.load_configuration(babel_daemon) -    frr_cfg.modify_section('^router babel', stop_pattern='^exit', remove_stop_mark=True) - -    for key in ['interface', 'interface_removed']: -        if key not in babel: -            continue -        for interface in babel[key]: -            frr_cfg.modify_section(f'^interface {interface}', stop_pattern='^exit', remove_stop_mark=True) - -    if 'new_frr_config' in babel: -        frr_cfg.add_before(frr.default_add_before, babel['new_frr_config']) -    frr_cfg.commit_configuration(babel_daemon) - +def apply(config_dict): +    if config_dict and not is_systemd_service_running('vyos-configd.service'): +        FRRender().apply()      return None  if __name__ == '__main__':  | 
