diff options
author | Christian Poessinger <christian@poessinger.com> | 2021-01-29 15:01:48 +0100 |
---|---|---|
committer | Christian Poessinger <christian@poessinger.com> | 2021-01-29 15:01:48 +0100 |
commit | b17b6d8931b142dcd3e2ddc4e213929bfafe9948 (patch) | |
tree | 66aee7e2e85e28cb9b166d8e5ab8fef884862f76 /src/migration-scripts/interfaces | |
parent | 323c0c3b8c109394ec8caf3f105633b0691fdef7 (diff) | |
download | vyos-1x-b17b6d8931b142dcd3e2ddc4e213929bfafe9948.tar.gz vyos-1x-b17b6d8931b142dcd3e2ddc4e213929bfafe9948.zip |
ospf: T3267: move "interface ip ospf" configuration to "protocols ospf interface"
For easier maintenance and operability move the interface specific protocol
setting of OSPF to the OSPF protocol section. This is now also in-line with IS-IS.
This means to migrate:
ethernet eth0 {
vif 202 {
ip {
ospf {
authentication {
md5 {
key-id 10 {
md5-key vyosvyos
}
}
}
dead-interval 40
hello-interval 10
priority 1
retransmit-interval 5
transmit-delay 1
}
}
}
}
to
protocols {
ospf {
interface eth0.201 {
authentication {
md5 {
key-id 10 {
md5-key vyosvyos
}
}
}
dead-interval 40
hello-interval 10
priority 1
retransmit-interval 5
transmit-delay 1
}
}
Diffstat (limited to 'src/migration-scripts/interfaces')
-rwxr-xr-x | src/migration-scripts/interfaces/19-to-20 | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/migration-scripts/interfaces/19-to-20 b/src/migration-scripts/interfaces/19-to-20 new file mode 100755 index 000000000..7ea1ed267 --- /dev/null +++ b/src/migration-scripts/interfaces/19-to-20 @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2021 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +from sys import exit, argv +from vyos.configtree import ConfigTree + +if __name__ == '__main__': + if (len(argv) < 1): + print("Must specify file name!") + exit(1) + + file_name = argv[1] + with open(file_name, 'r') as f: + config_file = f.read() + + config = ConfigTree(config_file) + + # + # Migrate "interface ethernet eth0 ip ospf" to "protocols ospf interface eth0" + # + for type in config.list_nodes(['interfaces']): + for interface in config.list_nodes(['interfaces', type]): + + ip_ospf = ['interfaces', type, interface, 'ip', 'ospf'] + if config.exists(ip_ospf): + config.set(['protocols', 'ospf', 'interface']) + config.set_tag(['protocols', 'ospf', 'interface']) + config.copy(ip_ospf, ['protocols', 'ospf', 'interface', interface]) + config.delete(ip_ospf) + + vif_path = ['interfaces', type, interface, 'vif'] + if config.exists(vif_path): + for vif in config.list_nodes(vif_path): + vif_ospf_path = vif_path + [vif, 'ip', 'ospf'] + if config.exists(vif_ospf_path): + config.set(['protocols', 'ospf', 'interface']) + config.set_tag(['protocols', 'ospf', 'interface']) + config.copy(vif_ospf_path, ['protocols', 'ospf', 'interface', f'{interface}.{vif}']) + config.delete(vif_ospf_path) + + vif_s_path = ['interfaces', type, interface, 'vif-s'] + if config.exists(vif_s_path): + for vif_s in config.list_nodes(vif_s_path): + vif_s_ospf_path = vif_s_path + [vif_s, 'ip', 'ospf'] + if config.exists(vif_s_ospf_path): + config.set(['protocols', 'ospf', 'interface']) + config.set_tag(['protocols', 'ospf', 'interface']) + config.copy(vif_s_ospf_path, ['protocols', 'ospf', 'interface', f'{interface}.{vif_s}']) + + vif_c_path = ['interfaces', type, interface, 'vif-s', vif_s, 'vif-c'] + if config.exists(vif_c_path): + for vif_c in config.list_nodes(vif_c_path): + vif_c_ospf_path = vif_c_path + [vif_c, 'ip', 'ospf'] + print(vif_c_ospf_path) + if config.exists(vif_c_ospf_path): + config.set(['protocols', 'ospf', 'interface']) + config.set_tag(['protocols', 'ospf', 'interface']) + config.copy(vif_c_ospf_path, ['protocols', 'ospf', 'interface', f'{interface}.{vif_s}.{vif_c}']) + config.delete(vif_c_ospf_path) + + config.delete(vif_s_ospf_path) + + try: + with open(file_name, 'w') as f: + f.write(config.to_string()) + except OSError as e: + print("Failed to save the modified config: {}".format(e)) + exit(1) + |