diff options
| -rwxr-xr-x | src/conf_mode/system-ip.py | 28 | ||||
| -rwxr-xr-x | src/conf_mode/system-ipv6.py | 25 | 
2 files changed, 32 insertions, 21 deletions
| diff --git a/src/conf_mode/system-ip.py b/src/conf_mode/system-ip.py index 5e4e5ec28..7612e2c0d 100755 --- a/src/conf_mode/system-ip.py +++ b/src/conf_mode/system-ip.py @@ -20,10 +20,12 @@ from vyos.config import Config  from vyos.configdict import dict_merge  from vyos.configverify import verify_route_map  from vyos.template import render_to_string -from vyos.utils.process import call  from vyos.utils.dict import dict_search  from vyos.utils.file import write_file +from vyos.utils.process import call +from vyos.utils.process import is_systemd_service_active  from vyos.utils.system import sysctl_write +  from vyos import ConfigError  from vyos import frr  from vyos import airbag @@ -115,16 +117,20 @@ def apply(opt):      value = '48' if (tmp is None) else tmp      sysctl_write('net.ipv4.tcp_mtu_probe_floor', value) -    zebra_daemon = 'zebra' -    # Save original configuration prior to starting any commit actions -    frr_cfg = frr.FRRConfig() - -    # The route-map used for the FIB (zebra) is part of the zebra daemon -    frr_cfg.load_configuration(zebra_daemon) -    frr_cfg.modify_section(r'ip protocol \w+ route-map [-a-zA-Z0-9.]+', stop_pattern='(\s|!)') -    if 'frr_zebra_config' in opt: -        frr_cfg.add_before(frr.default_add_before, opt['frr_zebra_config']) -    frr_cfg.commit_configuration(zebra_daemon) +    # During startup of vyos-router that brings up FRR, the service is not yet +    # running when this script is called first. Skip this part and wait for initial +    # commit of the configuration to trigger this statement +    if is_systemd_service_active('frr.service'): +        zebra_daemon = 'zebra' +        # Save original configuration prior to starting any commit actions +        frr_cfg = frr.FRRConfig() + +        # The route-map used for the FIB (zebra) is part of the zebra daemon +        frr_cfg.load_configuration(zebra_daemon) +        frr_cfg.modify_section(r'ip protocol \w+ route-map [-a-zA-Z0-9.]+', stop_pattern='(\s|!)') +        if 'frr_zebra_config' in opt: +            frr_cfg.add_before(frr.default_add_before, opt['frr_zebra_config']) +        frr_cfg.commit_configuration(zebra_daemon)  if __name__ == '__main__':      try: diff --git a/src/conf_mode/system-ipv6.py b/src/conf_mode/system-ipv6.py index e40ed38e2..90a1a8087 100755 --- a/src/conf_mode/system-ipv6.py +++ b/src/conf_mode/system-ipv6.py @@ -22,8 +22,9 @@ from vyos.configdict import dict_merge  from vyos.configverify import verify_route_map  from vyos.template import render_to_string  from vyos.utils.dict import dict_search -from vyos.utils.system import sysctl_write  from vyos.utils.file import write_file +from vyos.utils.process import is_systemd_service_active +from vyos.utils.system import sysctl_write  from vyos import ConfigError  from vyos import frr  from vyos import airbag @@ -93,16 +94,20 @@ def apply(opt):              if name == 'accept_dad':                  write_file(os.path.join(root, name), value) -    zebra_daemon = 'zebra' -    # Save original configuration prior to starting any commit actions -    frr_cfg = frr.FRRConfig() +    # During startup of vyos-router that brings up FRR, the service is not yet +    # running when this script is called first. Skip this part and wait for initial +    # commit of the configuration to trigger this statement +    if is_systemd_service_active('frr.service'): +        zebra_daemon = 'zebra' +        # Save original configuration prior to starting any commit actions +        frr_cfg = frr.FRRConfig() -    # The route-map used for the FIB (zebra) is part of the zebra daemon -    frr_cfg.load_configuration(zebra_daemon) -    frr_cfg.modify_section(r'ipv6 protocol \w+ route-map [-a-zA-Z0-9.]+', stop_pattern='(\s|!)') -    if 'frr_zebra_config' in opt: -        frr_cfg.add_before(frr.default_add_before, opt['frr_zebra_config']) -    frr_cfg.commit_configuration(zebra_daemon) +        # The route-map used for the FIB (zebra) is part of the zebra daemon +        frr_cfg.load_configuration(zebra_daemon) +        frr_cfg.modify_section(r'ipv6 protocol \w+ route-map [-a-zA-Z0-9.]+', stop_pattern='(\s|!)') +        if 'frr_zebra_config' in opt: +            frr_cfg.add_before(frr.default_add_before, opt['frr_zebra_config']) +        frr_cfg.commit_configuration(zebra_daemon)  if __name__ == '__main__':      try: | 
