diff options
Diffstat (limited to 'src/conf_mode/protocols_pim6.py')
| -rwxr-xr-x | src/conf_mode/protocols_pim6.py | 71 | 
1 files changed, 17 insertions, 54 deletions
diff --git a/src/conf_mode/protocols_pim6.py b/src/conf_mode/protocols_pim6.py index 581ffe238..3a9b876cc 100755 --- a/src/conf_mode/protocols_pim6.py +++ b/src/conf_mode/protocols_pim6.py @@ -19,12 +19,12 @@ from ipaddress import IPv6Network  from sys import exit  from vyos.config import Config -from vyos.config import config_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_interface_exists -from vyos.template import render_to_string +from vyos.utils.process import is_systemd_service_running +from vyos.frrender import FRRender  from vyos import ConfigError -from vyos import frr  from vyos import airbag  airbag.enable() @@ -33,34 +33,15 @@ def get_config(config=None):          conf = config      else:          conf = Config() -    base = ['protocols', 'pim6'] -    pim6 = conf.get_config_dict(base, key_mangling=('-', '_'), -                                 get_first_key=True, with_recursive_defaults=True) +    return get_frrender_dict(conf) -    # 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: -        pim6['interface_removed'] = list(interfaces_removed) +def verify(config_dict): +    if not has_frr_protocol_in_dict(config_dict, 'pim6'): +        return None -    # Bail out early if configuration tree does no longer exist. this must -    # be done after retrieving the list of interfaces to be removed. -    if not conf.exists(base): -        pim6.update({'deleted' : ''}) -        return pim6 - -    # We have gathered the dict representation of the CLI, but there are default -    # options which we need to update into the dictionary retrived. -    default_values = conf.get_config_defaults(**pim6.kwargs, recursive=True) - -    pim6 = config_dict_merge(default_values, pim6) -    return pim6 - -def verify(pim6): -    if not pim6 or 'deleted' in pim6: -        return +    pim6 = config_dict['pim6'] +    if 'deleted' in pim6: +        return None      for interface, interface_config in pim6.get('interface', {}).items():          verify_interface_exists(pim6, interface) @@ -94,32 +75,14 @@ def verify(pim6):                      raise ConfigError(f'{pim_base_error} must be unique!')                  unique.append(gr_addr) -def generate(pim6): -    if not pim6 or 'deleted' in pim6: -        return -    pim6['new_frr_config'] = render_to_string('frr/pim6d.frr.j2', pim6) +def generate(config_dict): +    if config_dict and not is_systemd_service_running('vyos-configd.service'): +        FRRender().generate(config_dict)      return None -def apply(pim6): -    if pim6 is None: -        return - -    pim6_daemon = 'pim6d' - -    # Save original configuration prior to starting any commit actions -    frr_cfg = frr.FRRConfig() - -    frr_cfg.load_configuration(pim6_daemon) - -    for key in ['interface', 'interface_removed']: -        if key not in pim6: -            continue -        for interface in pim6[key]: -            frr_cfg.modify_section(f'^interface {interface}', stop_pattern='^exit', remove_stop_mark=True) - -    if 'new_frr_config' in pim6: -        frr_cfg.add_before(frr.default_add_before, pim6['new_frr_config']) -    frr_cfg.commit_configuration(pim6_daemon) +def apply(config_dict): +    if config_dict and not is_systemd_service_running('vyos-configd.service'): +        FRRender().apply()      return None  if __name__ == '__main__':  | 
