summaryrefslogtreecommitdiff
path: root/src/migration-scripts/interfaces
diff options
context:
space:
mode:
authorChristian Poessinger <christian@poessinger.com>2021-01-29 15:01:48 +0100
committerChristian Poessinger <christian@poessinger.com>2021-01-29 15:01:48 +0100
commitb17b6d8931b142dcd3e2ddc4e213929bfafe9948 (patch)
tree66aee7e2e85e28cb9b166d8e5ab8fef884862f76 /src/migration-scripts/interfaces
parent323c0c3b8c109394ec8caf3f105633b0691fdef7 (diff)
downloadvyos-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-xsrc/migration-scripts/interfaces/19-to-2082
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)
+