diff options
author | sever-sever <v.gletenko@vyos.io> | 2021-03-23 18:11:29 +0000 |
---|---|---|
committer | sever-sever <v.gletenko@vyos.io> | 2021-03-23 18:36:15 +0000 |
commit | c106aead9e297f973e91c3ea5371790040c05de3 (patch) | |
tree | c569bad27ffa320107c745f5000aacf3a8ebef53 | |
parent | fa62d104dc7a860d3a2237b4431e5c5fc6ad7457 (diff) | |
download | vyos-1x-c106aead9e297f973e91c3ea5371790040c05de3.tar.gz vyos-1x-c106aead9e297f973e91c3ea5371790040c05de3.zip |
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__': |