diff options
author | Christian Poessinger <christian@poessinger.com> | 2021-03-24 17:45:19 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-24 17:45:19 +0100 |
commit | 90ecb7ec0e75596d5ec69b119954313c0cb77a43 (patch) | |
tree | e8b4e34ff687c1df08b1f06ac75de196026d5402 | |
parent | 00d0ca6f8aafe5be55624ccd1462d855565b124f (diff) | |
parent | c106aead9e297f973e91c3ea5371790040c05de3 (diff) | |
download | vyos-1x-90ecb7ec0e75596d5ec69b119954313c0cb77a43.tar.gz vyos-1x-90ecb7ec0e75596d5ec69b119954313c0cb77a43.zip |
Merge pull request #784 from sever-sever/T3217
routing: T3217: Save configs of daemon per commit
-rw-r--r-- | python/vyos/frr.py | 20 | ||||
-rwxr-xr-x | src/conf_mode/protocols_bgp.py | 3 | ||||
-rwxr-xr-x | src/conf_mode/protocols_isis.py | 3 | ||||
-rwxr-xr-x | src/conf_mode/protocols_ospf.py | 3 | ||||
-rwxr-xr-x | src/conf_mode/protocols_ospfv3.py | 3 | ||||
-rwxr-xr-x | src/conf_mode/protocols_rip.py | 3 | ||||
-rwxr-xr-x | src/conf_mode/protocols_ripng.py | 3 | ||||
-rwxr-xr-x | src/conf_mode/protocols_static.py | 3 |
8 files changed, 41 insertions, 0 deletions
diff --git a/python/vyos/frr.py b/python/vyos/frr.py index 69c7a14ce..ec0bef37a 100644 --- a/python/vyos/frr.py +++ b/python/vyos/frr.py @@ -86,6 +86,7 @@ _frr_daemons = ['zebra', 'bgpd', 'fabricd', 'isisd', 'ospf6d', 'ospfd', 'pbrd', path_vtysh = '/usr/bin/vtysh' path_frr_reload = '/usr/lib/frr/frr-reload.py' +path_config = '/run/frr' class FrrError(Exception): @@ -207,6 +208,25 @@ def reload_configuration(config, daemon=None): return output +def save_configuration(daemon=None): + """Save FRR configuration to /run/frr/{daemon}.conf + It save configuration on each commit. + """ + if daemon and daemon not in _frr_daemons: + raise ValueError(f'The specified daemon type is not supported {repr(daemon)}') + + cmd = f"{path_vtysh} -d {daemon} -c 'show run no-header'" + output, code = util.popen(cmd, stderr=util.STDOUT) + if code: + raise OSError(code, output) + + with open(f"{path_config}/{daemon}.conf", "w") as f: + f.write(output) + config = output + + return config + + def execute(command): """ Run commands inside vtysh command: str containing commands to execute inside a vtysh session diff --git a/src/conf_mode/protocols_bgp.py b/src/conf_mode/protocols_bgp.py index d5cc169c2..2f60795c1 100755 --- a/src/conf_mode/protocols_bgp.py +++ b/src/conf_mode/protocols_bgp.py @@ -234,6 +234,9 @@ def apply(bgp): for a in range(5): frr_cfg.commit_configuration(frr_daemon) + # Save configuration to /run/frr/{daemon}.conf + frr.save_configuration(frr_daemon) + return None if __name__ == '__main__': diff --git a/src/conf_mode/protocols_isis.py b/src/conf_mode/protocols_isis.py index bcd9960ed..0fc02f953 100755 --- a/src/conf_mode/protocols_isis.py +++ b/src/conf_mode/protocols_isis.py @@ -209,6 +209,9 @@ def apply(isis): for a in range(5): frr_cfg.commit_configuration(frr_daemon) + # Save configuration to /run/frr/{daemon}.conf + frr.save_configuration(frr_daemon) + return None if __name__ == '__main__': diff --git a/src/conf_mode/protocols_ospf.py b/src/conf_mode/protocols_ospf.py index a655eaeca..b4ee8659a 100755 --- a/src/conf_mode/protocols_ospf.py +++ b/src/conf_mode/protocols_ospf.py @@ -200,6 +200,9 @@ def apply(ospf): for a in range(5): frr_cfg.commit_configuration(frr_daemon) + # Save configuration to /run/frr/{daemon}.conf + frr.save_configuration(frr_daemon) + return None if __name__ == '__main__': diff --git a/src/conf_mode/protocols_ospfv3.py b/src/conf_mode/protocols_ospfv3.py index 6f068b196..f3beab204 100755 --- a/src/conf_mode/protocols_ospfv3.py +++ b/src/conf_mode/protocols_ospfv3.py @@ -91,6 +91,9 @@ def apply(ospfv3): for a in range(5): frr_cfg.commit_configuration(frr_daemon) + # Save configuration to /run/frr/{daemon}.conf + frr.save_configuration(frr_daemon) + return None if __name__ == '__main__': diff --git a/src/conf_mode/protocols_rip.py b/src/conf_mode/protocols_rip.py index 6db5143c5..34d42d630 100755 --- a/src/conf_mode/protocols_rip.py +++ b/src/conf_mode/protocols_rip.py @@ -116,6 +116,9 @@ def apply(rip): for a in range(5): frr_cfg.commit_configuration(frr_daemon) + # Save configuration to /run/frr/{daemon}.conf + frr.save_configuration(frr_daemon) + return None if __name__ == '__main__': diff --git a/src/conf_mode/protocols_ripng.py b/src/conf_mode/protocols_ripng.py index 8cc5de64a..b1c4d1173 100755 --- a/src/conf_mode/protocols_ripng.py +++ b/src/conf_mode/protocols_ripng.py @@ -120,6 +120,9 @@ def apply(ripng): for a in range(5): frr_cfg.commit_configuration(frr_daemon) + # Save configuration to /run/frr/{daemon}.conf + frr.save_configuration(frr_daemon) + return None if __name__ == '__main__': diff --git a/src/conf_mode/protocols_static.py b/src/conf_mode/protocols_static.py index 3314baf47..0de073a6d 100755 --- a/src/conf_mode/protocols_static.py +++ b/src/conf_mode/protocols_static.py @@ -97,6 +97,9 @@ def apply(static): for a in range(5): frr_cfg.commit_configuration(frr_daemon) + # Save configuration to /run/frr/{daemon}.conf + frr.save_configuration(frr_daemon) + return None if __name__ == '__main__': |