diff --git a/junos_converter.py b/junos_converter.py index e680b69..e5cf0fe 100644 --- a/junos_converter.py +++ b/junos_converter.py @@ -26,6 +26,52 @@ def replace_curly(s): return s.replace("{", "{\n").replace("}", "\n}") +def vlan_members_to_leaves(data): + new_data = [] + in_members_array = False + for line in data.splitlines(): + if line.strip().startswith("members ["): + in_members_array = True + + if in_members_array: + if "];" in line: + in_members_array = False + new_leaves_update(line, new_data) + + else: + new_data.append(line) + return "\n".join(new_data) + + +def new_leaves_update(line, new_data): + chunks = line.split() + for chunk in chunks: + if chunks[0] == "members ": + startwhites = line[: len(line) - len(line.lstrip())] + new_data.append(f"{startwhites}{chunks[0]} {chunk};") + elif chunk in ["];", "]", "[", "members"]: + continue + else: + startwhites = line[: len(line) - len(line.lstrip())] + new_data.append(f"{startwhites}members {chunk};") + + +def new_leaf_line(line): + chunks = line.split() + for chunk in chunks: + if chunks[0] == "members ": + startwhites = line[: len(line) - len(line.lstrip())] + line = f"{startwhites}{chunks[0]} {chunk};" + elif chunk in ["];", "]", "[", "members"]: + continue + else: + startwhites = line[: len(line) - len(line.lstrip())] + line = f"{startwhites}members {chunk};" + + in_members_array = False if "];" in line else True + return in_members_array, line + + def get_set_config(filein, ignore_annotations): try: with open(filein, "r") as f: @@ -34,6 +80,7 @@ def get_set_config(filein, ignore_annotations): print("Error: Could not read input file:", filein) exit() + data = vlan_members_to_leaves(data) # Add \n for one-line configs if not '"' in data: data = replace_curly(data) diff --git a/test_junos_converter.py b/test_junos_converter.py index bf9014e..f7be7d0 100644 --- a/test_junos_converter.py +++ b/test_junos_converter.py @@ -8,11 +8,12 @@ def test_junos_converter(capsys): test_files = filter(lambda x: ".set" not in x, os.listdir(directory)) for file in test_files: - get_set_config(directory + file, False) out, err = capsys.readouterr() # Make the output visible in the pytest report + # import sys + # sys.stdout.write(out) # Convert unicode to str and remove the last carriage return diff --git a/tests/example9.conf b/tests/example9.conf new file mode 100644 index 0000000..e9e2550 --- /dev/null +++ b/tests/example9.conf @@ -0,0 +1,59 @@ +interfaces { + ge-0/0/5 { + native-vlan-id 706; + unit 0 { + family ethernet-switching { + interface-mode trunk; + vlan { + members [ VLAN842 VLAN841 VLAN703 VLAN704 VLAN900 VLAN706 VLAN800 VLAN802 VLAN811 VLAN826 VLAN828 VLAN830 VLAN999 VLAN839 VLAN840 VLAN684 VLAN846 VLAN848 ]; + } + } + } + } + ge-0/0/6 { + unit 0 { + family ethernet-switching { + interface-mode access; + vlan { + members VLAN710; + } + } + } + } + ae1 { + description "Interfaces ae1"; + aggregated-ether-options { + lacp { + active; + periodic slow; + } + } + unit 0 { + family ethernet-switching { + interface-mode trunk; + vlan { + members [ VLAN101 VLAN102 VLAN103 VLAN110 VLAN684 VLAN310 VLAN699 VLAN700 VLAN702 VLAN703 VLAN704 VLAN705 VLAN706 VLAN708 VLAN709 VLAN710 VLAN711 VLAN712 VLAN713 VLAN740 VLAN741 VLAN800 VLAN801 VLAN802 VLAN811 VLAN812 VLAN813 VLAN814 VLAN815 VLAN816 VLAN817 VLAN818 VLAN819 VLAN820 VLAN821 VLAN822 VLAN823 VLAN826 VLAN827 VLAN828 VLAN829 VLAN830 VLAN831 VLAN835 VLAN839 VLAN840 VLAN843 VLAN844 VLAN848 VLAN845 VLAN846 VLAN850 VLAN847 VLAN849 VLAN851 VLAN836 VLAN837 VLAN899 VLAN900 VLAN912 VLAN999 VLAN841 VLAN842 + 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 + VLAN833 VLAN854 VLAN855 VLAN856 VLAN857 VLAN858 VLAN859 VLAN860 VLAN891 VLAN892 VLAN893 VLAN895 VLAN852 894 ]; + } + } + } + } + ae2 { + description "Interfaces ae2"; + aggregated-ether-options { + lacp { + active; + periodic slow; + } + } + unit 0 { + family ethernet-switching { + interface-mode trunk; + vlan { + members [ VLAN101 VLAN102 ]; + } + } + } + } +} \ No newline at end of file diff --git a/tests/example9.set b/tests/example9.set new file mode 100644 index 0000000..6097b7c --- /dev/null +++ b/tests/example9.set @@ -0,0 +1,211 @@ +set interfaces ge-0/0/5 native-vlan-id 706 +set interfaces ge-0/0/5 unit 0 family ethernet-switching interface-mode trunk +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN842 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN841 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN703 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN704 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN900 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN706 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN800 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN802 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN811 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN826 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN828 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN830 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN999 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN839 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN840 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN684 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN846 +set interfaces ge-0/0/5 unit 0 family ethernet-switching vlan members VLAN848 +set interfaces ge-0/0/6 unit 0 family ethernet-switching interface-mode access +set interfaces ge-0/0/6 unit 0 family ethernet-switching vlan members VLAN710 +set interfaces ae1 description "Interfaces ae1" +set interfaces ae1 aggregated-ether-options lacp active +set interfaces ae1 aggregated-ether-options lacp periodic slow +set interfaces ae1 unit 0 family ethernet-switching interface-mode trunk +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN101 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN102 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN103 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN110 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN684 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN310 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN699 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN700 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN702 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN703 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN704 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN705 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN706 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN708 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN709 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN710 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN711 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN712 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN713 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN740 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN741 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN800 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN801 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN802 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN811 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN812 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN813 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN814 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN815 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN816 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN817 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN818 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN819 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN820 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN821 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN822 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN823 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN826 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN827 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN828 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN829 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN830 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN831 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN835 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN839 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN840 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN843 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN844 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN848 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN845 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN846 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN850 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN847 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN849 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN851 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN836 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN837 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN899 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN900 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN912 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN999 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN841 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN842 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1001 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1002 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1003 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1004 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1005 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1006 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1007 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1008 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1009 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1010 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1011 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1012 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1013 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1014 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1015 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1016 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1017 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1018 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1019 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1020 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1021 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1022 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1023 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1024 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1025 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1026 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1027 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1028 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1029 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1030 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1031 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1032 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1033 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1034 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1035 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1036 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1037 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1038 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1039 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1040 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1041 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1042 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1043 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1044 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1045 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1046 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1047 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1048 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1049 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1050 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1051 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1052 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1053 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1054 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1055 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1056 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1057 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1058 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1059 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1060 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1061 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1062 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1063 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1064 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1065 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1066 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1067 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1068 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1069 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1070 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1071 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1072 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1073 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1074 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1075 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1076 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1077 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1078 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1079 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1080 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1081 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1082 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1083 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1084 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1085 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1086 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1087 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1088 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1089 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1090 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1091 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1092 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1093 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1094 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1095 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1096 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1097 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1098 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1099 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1100 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1101 +set interfaces ae1 unit 0 family ethernet-switching vlan members 1102 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN833 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN854 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN855 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN856 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN857 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN858 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN859 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN860 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN891 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN892 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN893 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN895 +set interfaces ae1 unit 0 family ethernet-switching vlan members VLAN852 +set interfaces ae1 unit 0 family ethernet-switching vlan members 894 +set interfaces ae2 description "Interfaces ae2" +set interfaces ae2 aggregated-ether-options lacp active +set interfaces ae2 aggregated-ether-options lacp periodic slow +set interfaces ae2 unit 0 family ethernet-switching interface-mode trunk +set interfaces ae2 unit 0 family ethernet-switching vlan members VLAN101 +set interfaces ae2 unit 0 family ethernet-switching vlan members VLAN102 \ No newline at end of file