From a395045f6fb4063ef7830ce5a453b4217f5af0f5 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Thu, 24 Aug 2023 12:34:18 +0300 Subject: [PATCH 01/42] Parse Private VLANs --- napalm/ios/ios.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index df7a78400..d74d17da7 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3738,7 +3738,11 @@ def _get_vlan_all_ports(self, output): vlan_id = vlan_m.group(1) vlan_name = vlan_m.group(2) interfaces = vlan_m.group(3) or "" - vlans[vlan_id] = {"name": vlan_name, "interfaces": []} + if vlan.get(vlan_name): + vlan_id = vlan_name + vlans[vlan_name] = {"name": vlans["vlan_name"]["name"], "interfaces": []} + else: + vlans[vlan_id] = {"name": vlan_name, "interfaces": []} cont_m = None if was_vlan_or_cont: From 85259371dcdc4546a4b5138012563290c5c7e613 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Thu, 24 Aug 2023 17:27:25 +0300 Subject: [PATCH 02/42] add tests --- .../expected_result.json | 22 ++++++++++++++++++- .../show_vlan_brief.txt | 5 ++++- .../show_vlan_id_2400.txt | 16 ++++++++++++++ .../show_vlan_id_2432.txt | 15 +++++++++++++ .../show_vlan_id_2433.txt | 15 +++++++++++++ 5 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt create mode 100644 test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt create mode 100644 test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2433.txt diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json index b9d0e250d..5b88502f6 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json @@ -217,5 +217,25 @@ "1005": { "name": "Vlan1005", "interfaces": [] - } + }, + "2400": { + "name": "Vlan2400", + "interfaces": [ + "Port-channel1" + ] + }, + "2432": { + "name": "Vlan2432", + "interfaces": [ + "GigabitEthernet0/1", + "GigabitEthernet0/2" + ] + }, + "2433": { + "name": "Vlan2433", + "interfaces": [ + "GigabitEthernet0/3", + "GigabitEthernet0/4" + ] + }, } diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt index 0a198502d..da3f6373b 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt @@ -11,4 +11,7 @@ VLAN Name Status Ports 1002 Vlan1002 act/unsup 1003 Vlan1003 act/unsup 1004 Vlan1004 act/unsup -1005 Vlan1005 act/unsup \ No newline at end of file +1005 Vlan1005 act/unsup +2400 Vlan2400 active +2432 Vlan2432 active +2433 Vlan2433 active diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt new file mode 100644 index 000000000..2873c7186 --- /dev/null +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt @@ -0,0 +1,16 @@ +VLAN Name Status Ports +---- -------------------------------- --------- ------------------------------- +2400 Vlan2400 active Po1 + +VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 +---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ +2400 enet 102400 1500 - - - - - 0 0 + +Remote SPAN VLAN +---------------- +Disabled + +Primary Secondary Type Ports +------- --------- ----------------- ------------------------------------------ +2400 2432 community Gi1/1, Gi1/2 +2400 2433 community Gi1/3, Gi1/4 diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt new file mode 100644 index 000000000..e8dd1aa10 --- /dev/null +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt @@ -0,0 +1,15 @@ +VLAN Name Status Ports +---- -------------------------------- --------- ------------------------------- +2432 Vlan2432 active Po1 + +VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 +---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ +2432 enet 102432 1500 - - - - - 0 0 + +Remote SPAN VLAN +---------------- +Disabled + +Primary Secondary Type Ports +------- --------- ----------------- ------------------------------------------ +2400 2432 community Gi0/1, Gi0/2 diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2433.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2433.txt new file mode 100644 index 000000000..a80662e3e --- /dev/null +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2433.txt @@ -0,0 +1,15 @@ +VLAN Name Status Ports +---- -------------------------------- --------- ------------------------------- +2433 Vlan2433 active Po1 + +VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 +---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ +2433 enet 102433 1500 - - - - - 0 0 + +Remote SPAN VLAN +---------------- +Disabled + +Primary Secondary Type Ports +------- --------- ----------------- ------------------------------------------ +2400 2433 community Gi0/3, Gi0/4 From 590e3cecc7e43315c48ddbbf060eb08004c15c98 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Thu, 24 Aug 2023 17:30:09 +0300 Subject: [PATCH 03/42] Update mock data --- .../no_show_vlan_all_ports/show_vlan_id_2400.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt index 2873c7186..25c0837ea 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt @@ -12,5 +12,5 @@ Disabled Primary Secondary Type Ports ------- --------- ----------------- ------------------------------------------ -2400 2432 community Gi1/1, Gi1/2 -2400 2433 community Gi1/3, Gi1/4 +2400 2432 community Gi0/1, Gi0/2 +2400 2433 community Gi0/3, Gi0/4 From bff8d13c6c71d1ec95082fc8e869ead87fa7b0b6 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Thu, 24 Aug 2023 17:57:53 +0300 Subject: [PATCH 04/42] run black --- napalm/ios/ios.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index d74d17da7..00632aa43 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3740,7 +3740,10 @@ def _get_vlan_all_ports(self, output): interfaces = vlan_m.group(3) or "" if vlan.get(vlan_name): vlan_id = vlan_name - vlans[vlan_name] = {"name": vlans["vlan_name"]["name"], "interfaces": []} + vlans[vlan_name] = { + "name": vlans["vlan_name"]["name"], + "interfaces": [], + } else: vlans[vlan_id] = {"name": vlan_name, "interfaces": []} From 35817fe07ac306bd3d087712ba6c1b0ea748609d Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Thu, 24 Aug 2023 18:02:46 +0300 Subject: [PATCH 05/42] fix typo --- napalm/ios/ios.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 00632aa43..246d7bae4 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3738,7 +3738,7 @@ def _get_vlan_all_ports(self, output): vlan_id = vlan_m.group(1) vlan_name = vlan_m.group(2) interfaces = vlan_m.group(3) or "" - if vlan.get(vlan_name): + if vlans.get(vlan_name): vlan_id = vlan_name vlans[vlan_name] = { "name": vlans["vlan_name"]["name"], From c747d1cc375939185cd103fe6029d335ffe03bd9 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Thu, 24 Aug 2023 18:12:58 +0300 Subject: [PATCH 06/42] fix more typos --- napalm/ios/ios.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 246d7bae4..76d200ae9 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3740,8 +3740,8 @@ def _get_vlan_all_ports(self, output): interfaces = vlan_m.group(3) or "" if vlans.get(vlan_name): vlan_id = vlan_name - vlans[vlan_name] = { - "name": vlans["vlan_name"]["name"], + vlans[vlan_id] = { + "name": vlans[vlan_id][name], "interfaces": [], } else: From 90a7b964bf96530197e0a0df694ef18708d7faf6 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Thu, 24 Aug 2023 18:15:50 +0300 Subject: [PATCH 07/42] s/name/'name'/ --- napalm/ios/ios.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 76d200ae9..454964a2f 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3741,7 +3741,7 @@ def _get_vlan_all_ports(self, output): if vlans.get(vlan_name): vlan_id = vlan_name vlans[vlan_id] = { - "name": vlans[vlan_id][name], + "name": vlans[vlan_id]["name"], "interfaces": [], } else: From d51968c51631fbcc546f547569c50677d83e13cd Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Thu, 24 Aug 2023 18:29:45 +0300 Subject: [PATCH 08/42] fix json encoding --- .../test_get_vlans/no_show_vlan_all_ports/expected_result.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json index 5b88502f6..da9cd8e01 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json @@ -237,5 +237,5 @@ "GigabitEthernet0/3", "GigabitEthernet0/4" ] - }, + } } From 6e541897a71274dfdce1b1328b13ee84a8859595 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Fri, 25 Aug 2023 11:09:53 +0300 Subject: [PATCH 09/42] refactor VLAN match logic --- napalm/ios/ios.py | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 454964a2f..acb3bb39c 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3721,9 +3721,12 @@ def get_vlans(self): else: return self._get_vlan_all_ports(output) - def _get_vlan_all_ports(self, output): + def _get_vlan_all_ports(self, output, _vlan_id): find_regexp = re.compile(r"^(\d+)\s+(\S+)\s+\S+(\s+[A-Z][a-z].*)?$") continuation_regexp = re.compile(r"^\s+([A-Z][a-z].*)$") + match_pvlan_regexp = re.compile( + r"^(\d+)\s+(\S+)\s+(community|isolated)?\s+\S+(\s+[A-Z][a-z].*)?$" + ) output = output.splitlines() vlans = {} @@ -3734,17 +3737,24 @@ def _get_vlan_all_ports(self, output): for line in output: vlan_m = find_regexp.match(line) if vlan_m: - was_vlan_or_cont = True - vlan_id = vlan_m.group(1) - vlan_name = vlan_m.group(2) - interfaces = vlan_m.group(3) or "" - if vlans.get(vlan_name): - vlan_id = vlan_name - vlans[vlan_id] = { - "name": vlans[vlan_id]["name"], - "interfaces": [], - } - else: + p_vlan_m = match_pvlan_regexp.match(line) + if p_vlan_m: + was_vlan_or_cont = True + vlan_name = vlan_m.group(2) + if ( + vlan_name == p_vlan_m.group(2) + and p_vlan_m.group(3) in ["community", "isolated"] + and vlan_name == _vlan_id + ): + vlan_id = p_vlan_m.group(2) + elif vlan_m.group(1) != p_vlan_m.group(2) and p_vlan_m.group(3) in [ + "community", + "isolated", + ]: + continue + else: + vlan_id = vlan_m.group(1) + interfaces = vlan_m.group(3) or "" vlans[vlan_id] = {"name": vlan_name, "interfaces": []} cont_m = None @@ -3775,7 +3785,7 @@ def _get_vlan_from_id(self): vlans = {} for vlan_id, vlan_name in find_vlan: output = self._send_command("show vlan id {}".format(vlan_id)) - _vlans = self._get_vlan_all_ports(output) + _vlans = self._get_vlan_all_ports(output, vlan_id) if len(_vlans) == 0: vlans[vlan_id] = {"name": vlan_name, "interfaces": []} elif len(_vlans) == 1: From 9980dc600d5240e31b4c1d13a53e273c7e50a419 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Fri, 25 Aug 2023 11:38:02 +0300 Subject: [PATCH 10/42] fix tests --- napalm/ios/ios.py | 2 +- .../no_show_vlan_all_ports/expected_result.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index acb3bb39c..f02ff8776 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3719,7 +3719,7 @@ def get_vlans(self): if output.find("Invalid input detected") >= 0: return self._get_vlan_from_id() else: - return self._get_vlan_all_ports(output) + return self._get_vlan_all_ports(output, vlan_id=None) def _get_vlan_all_ports(self, output, _vlan_id): find_regexp = re.compile(r"^(\d+)\s+(\S+)\s+\S+(\s+[A-Z][a-z].*)?$") diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json index da9cd8e01..ebeab20eb 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json @@ -225,14 +225,14 @@ ] }, "2432": { - "name": "Vlan2432", + "name": "2432", "interfaces": [ "GigabitEthernet0/1", "GigabitEthernet0/2" ] }, "2433": { - "name": "Vlan2433", + "name": "2433", "interfaces": [ "GigabitEthernet0/3", "GigabitEthernet0/4" From 399670f39409668277658893848b622e27082a3a Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Fri, 25 Aug 2023 11:45:40 +0300 Subject: [PATCH 11/42] fixing a typo --- napalm/ios/ios.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index f02ff8776..973c74234 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3719,7 +3719,7 @@ def get_vlans(self): if output.find("Invalid input detected") >= 0: return self._get_vlan_from_id() else: - return self._get_vlan_all_ports(output, vlan_id=None) + return self._get_vlan_all_ports(output, _vlan_id=None) def _get_vlan_all_ports(self, output, _vlan_id): find_regexp = re.compile(r"^(\d+)\s+(\S+)\s+\S+(\s+[A-Z][a-z].*)?$") From 0ee9432cc2cbc59636f7070059e9839c6bdf2c18 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 28 Aug 2023 16:20:09 +0300 Subject: [PATCH 12/42] Preserve private VLAN names --- napalm/ios/ios.py | 9 +++++---- .../no_show_vlan_all_ports/expected_result.json | 4 ++-- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 973c74234..f523c287f 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3719,9 +3719,9 @@ def get_vlans(self): if output.find("Invalid input detected") >= 0: return self._get_vlan_from_id() else: - return self._get_vlan_all_ports(output, _vlan_id=None) + return self._get_vlan_all_ports(output, _vlan_id=None, vlan_name=None) - def _get_vlan_all_ports(self, output, _vlan_id): + def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): find_regexp = re.compile(r"^(\d+)\s+(\S+)\s+\S+(\s+[A-Z][a-z].*)?$") continuation_regexp = re.compile(r"^\s+([A-Z][a-z].*)$") match_pvlan_regexp = re.compile( @@ -3754,6 +3754,7 @@ def _get_vlan_all_ports(self, output, _vlan_id): continue else: vlan_id = vlan_m.group(1) + vlan_name = _vlan_name if _vlan_name else vlan_name interfaces = vlan_m.group(3) or "" vlans[vlan_id] = {"name": vlan_name, "interfaces": []} @@ -3784,8 +3785,8 @@ def _get_vlan_from_id(self): find_vlan = re.findall(vlan_regexp, output, re.MULTILINE) vlans = {} for vlan_id, vlan_name in find_vlan: - output = self._send_command("show vlan id {}".format(vlan_id)) - _vlans = self._get_vlan_all_ports(output, vlan_id) + output = self._send_command("show vlan id {}".format(vlan_id, vlan_name)) + _vlans = self._get_vlan_all_ports(output, vlan_id, vlan_name) if len(_vlans) == 0: vlans[vlan_id] = {"name": vlan_name, "interfaces": []} elif len(_vlans) == 1: diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json index ebeab20eb..da9cd8e01 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json @@ -225,14 +225,14 @@ ] }, "2432": { - "name": "2432", + "name": "Vlan2432", "interfaces": [ "GigabitEthernet0/1", "GigabitEthernet0/2" ] }, "2433": { - "name": "2433", + "name": "Vlan2433", "interfaces": [ "GigabitEthernet0/3", "GigabitEthernet0/4" From a0f8f561ea65405b0936e010a893c53292b6023e Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 28 Aug 2023 16:24:24 +0300 Subject: [PATCH 13/42] fix a typo --- napalm/ios/ios.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index f523c287f..7c853bc57 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3785,7 +3785,7 @@ def _get_vlan_from_id(self): find_vlan = re.findall(vlan_regexp, output, re.MULTILINE) vlans = {} for vlan_id, vlan_name in find_vlan: - output = self._send_command("show vlan id {}".format(vlan_id, vlan_name)) + output = self._send_command("show vlan id {}".format(vlan_id)) _vlans = self._get_vlan_all_ports(output, vlan_id, vlan_name) if len(_vlans) == 0: vlans[vlan_id] = {"name": vlan_name, "interfaces": []} From 42454d25d195be0948d129a9882958f9bfe7367d Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 28 Aug 2023 16:37:41 +0300 Subject: [PATCH 14/42] fix ident --- napalm/ios/ios.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 7c853bc57..417119855 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3754,7 +3754,7 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): continue else: vlan_id = vlan_m.group(1) - vlan_name = _vlan_name if _vlan_name else vlan_name + vlan_name = _vlan_name if _vlan_name else vlan_name interfaces = vlan_m.group(3) or "" vlans[vlan_id] = {"name": vlan_name, "interfaces": []} From 7094e96298b35b0ec0ec8e4c36c21d46455cd8c2 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 28 Aug 2023 16:43:04 +0300 Subject: [PATCH 15/42] fix typo --- napalm/ios/ios.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 417119855..f49ac9bc4 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3719,7 +3719,7 @@ def get_vlans(self): if output.find("Invalid input detected") >= 0: return self._get_vlan_from_id() else: - return self._get_vlan_all_ports(output, _vlan_id=None, vlan_name=None) + return self._get_vlan_all_ports(output, _vlan_id=None, _vlan_name=None) def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): find_regexp = re.compile(r"^(\d+)\s+(\S+)\s+\S+(\s+[A-Z][a-z].*)?$") From 808eca9480c093a1df4858fc96186894e22ad70d Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Sat, 23 Mar 2024 04:01:54 +0200 Subject: [PATCH 16/42] black --- napalm/ios/ios.py | 9 +++--- napalm/iosxr/iosxr.py | 46 +++++++++++++-------------- napalm/iosxr_netconf/iosxr_netconf.py | 44 ++++++++++++------------- napalm/nxos/nxos.py | 16 +++++----- napalm/nxos_ssh/nxos_ssh.py | 6 ++-- 5 files changed, 60 insertions(+), 61 deletions(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index d12dce9d8..a4f6e717a 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3222,10 +3222,10 @@ def get_route_to(self, destination="", protocol="", longer=False): # was not specified if protocol == "" or protocol == route_entry["protocol"]: if route_proto == "bgp": - route_entry["protocol_attributes"] = ( - self._get_bgp_route_attr( - destination, _vrf, nh, ip_version - ) + route_entry[ + "protocol_attributes" + ] = self._get_bgp_route_attr( + destination, _vrf, nh, ip_version ) nh_line_found = ( False # for next RT entry processing ... @@ -3743,7 +3743,6 @@ def get_vlans(self): else: return self._get_vlan_all_ports(output, _vlan_id=None, _vlan_name=None) - def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): find_regexp = re.compile( r"^(\d+)\s+" # vlan id diff --git a/napalm/iosxr/iosxr.py b/napalm/iosxr/iosxr.py index ff87716b6..8747d00dd 100644 --- a/napalm/iosxr/iosxr.py +++ b/napalm/iosxr/iosxr.py @@ -587,23 +587,23 @@ def generate_vrf_query(vrf_name): ), 0, ) - this_neighbor["address_family"][this_afi]["accepted_prefixes"] = ( - napalm.base.helpers.convert( - int, - napalm.base.helpers.find_txt( - neighbor, "AFData/Entry/PrefixesAccepted" - ), - 0, - ) + this_neighbor["address_family"][this_afi][ + "accepted_prefixes" + ] = napalm.base.helpers.convert( + int, + napalm.base.helpers.find_txt( + neighbor, "AFData/Entry/PrefixesAccepted" + ), + 0, ) - this_neighbor["address_family"][this_afi]["sent_prefixes"] = ( - napalm.base.helpers.convert( - int, - napalm.base.helpers.find_txt( - neighbor, "AFData/Entry/PrefixesAdvertised" - ), - 0, - ) + this_neighbor["address_family"][this_afi][ + "sent_prefixes" + ] = napalm.base.helpers.convert( + int, + napalm.base.helpers.find_txt( + neighbor, "AFData/Entry/PrefixesAdvertised" + ), + 0, ) except AttributeError: this_neighbor["address_family"][this_afi]["received_prefixes"] = -1 @@ -947,11 +947,11 @@ def cli(self, commands, encoding="text"): try: cli_output[str(command)] = str(self.device._execute_show(command)) except TimeoutError: - cli_output[str(command)] = ( - 'Execution of command \ + cli_output[ + str(command) + ] = 'Execution of command \ "{command}" took too long! Please adjust your params!'.format( - command=command - ) + command=command ) logger.error(str(cli_output)) raise CommandTimeoutException(str(cli_output)) @@ -2288,9 +2288,9 @@ def traceroute( last_probe_host_name = tag_value continue if tag_name == "DeltaTime": - last_hop_dict["probes"][last_probe_index]["rtt"] = ( - napalm.base.helpers.convert(float, tag_value, 0.0) - ) + last_hop_dict["probes"][last_probe_index][ + "rtt" + ] = napalm.base.helpers.convert(float, tag_value, 0.0) continue if last_hop_index: diff --git a/napalm/iosxr_netconf/iosxr_netconf.py b/napalm/iosxr_netconf/iosxr_netconf.py index 7083da16e..6f224e46a 100644 --- a/napalm/iosxr_netconf/iosxr_netconf.py +++ b/napalm/iosxr_netconf/iosxr_netconf.py @@ -801,30 +801,30 @@ def get_vrf_neighbors(rpc_reply_etree, xpath): ), 0, ) - this_neighbor["address_family"][this_afi]["accepted_prefixes"] = ( - napalm.base.helpers.convert( - int, - self._find_txt( - neighbor, - "./bgp:af-data/bgp:prefixes-accepted", - default="", - namespaces=C.NS, - ), - 0, - ) + this_neighbor["address_family"][this_afi][ + "accepted_prefixes" + ] = napalm.base.helpers.convert( + int, + self._find_txt( + neighbor, + "./bgp:af-data/bgp:prefixes-accepted", + default="", + namespaces=C.NS, + ), + 0, ) - this_neighbor["address_family"][this_afi]["sent_prefixes"] = ( - napalm.base.helpers.convert( - int, - self._find_txt( - neighbor, - "./bgp:af-data/\ + this_neighbor["address_family"][this_afi][ + "sent_prefixes" + ] = napalm.base.helpers.convert( + int, + self._find_txt( + neighbor, + "./bgp:af-data/\ bgp:prefixes-advertised", - default="", - namespaces=C.NS, - ), - 0, - ) + default="", + namespaces=C.NS, + ), + 0, ) except AttributeError: this_neighbor["address_family"][this_afi]["received_prefixes"] = -1 diff --git a/napalm/nxos/nxos.py b/napalm/nxos/nxos.py index b975029ef..ea1d9fc66 100644 --- a/napalm/nxos/nxos.py +++ b/napalm/nxos/nxos.py @@ -669,15 +669,15 @@ def get_lldp_neighbors_detail( # Add field missing on IOS lldp_entry["parent_interface"] = "" # Translate the capability fields - lldp_entry["remote_system_capab"] = ( - napalm.base.helpers.transform_lldp_capab( - lldp_entry["remote_system_capab"] - ) + lldp_entry[ + "remote_system_capab" + ] = napalm.base.helpers.transform_lldp_capab( + lldp_entry["remote_system_capab"] ) - lldp_entry["remote_system_enable_capab"] = ( - napalm.base.helpers.transform_lldp_capab( - lldp_entry["remote_system_enable_capab"] - ) + lldp_entry[ + "remote_system_enable_capab" + ] = napalm.base.helpers.transform_lldp_capab( + lldp_entry["remote_system_enable_capab"] ) # Turn the interfaces into their long version local_intf = canonical_interface_name(local_intf) diff --git a/napalm/nxos_ssh/nxos_ssh.py b/napalm/nxos_ssh/nxos_ssh.py index 04896c9cc..6fa051937 100644 --- a/napalm/nxos_ssh/nxos_ssh.py +++ b/napalm/nxos_ssh/nxos_ssh.py @@ -1485,9 +1485,9 @@ def get_route_to(self, destination="", protocol="", longer=False): "preference": int(nh_metric), } if nh_source == "bgp": - route_entry["protocol_attributes"] = ( - self._get_bgp_route_attr(cur_prefix, curvrf, nh_ip) - ) + route_entry[ + "protocol_attributes" + ] = self._get_bgp_route_attr(cur_prefix, curvrf, nh_ip) else: route_entry["protocol_attributes"] = {} nh_list.append(route_entry) From ca3acb00a458394d5c902b88a8d7a03b9d38ec9b Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Sat, 23 Mar 2024 04:17:47 +0200 Subject: [PATCH 17/42] rebase From f1054af26227d2a5eb53e2181dcb829d7eac86ee Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Sat, 23 Mar 2024 04:39:22 +0200 Subject: [PATCH 18/42] empty commit / re-run tests From 07c6ae48d27fd681271f1c8f6f4df920cc3142b5 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Sat, 23 Mar 2024 06:41:09 +0200 Subject: [PATCH 19/42] black 24.3.0 --- napalm/ios/ios.py | 8 ++--- napalm/iosxr/iosxr.py | 46 +++++++++++++-------------- napalm/iosxr_netconf/iosxr_netconf.py | 44 ++++++++++++------------- napalm/nxos/nxos.py | 16 +++++----- napalm/nxos_ssh/nxos_ssh.py | 6 ++-- 5 files changed, 60 insertions(+), 60 deletions(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index a4f6e717a..5bd35e823 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3222,10 +3222,10 @@ def get_route_to(self, destination="", protocol="", longer=False): # was not specified if protocol == "" or protocol == route_entry["protocol"]: if route_proto == "bgp": - route_entry[ - "protocol_attributes" - ] = self._get_bgp_route_attr( - destination, _vrf, nh, ip_version + route_entry["protocol_attributes"] = ( + self._get_bgp_route_attr( + destination, _vrf, nh, ip_version + ) ) nh_line_found = ( False # for next RT entry processing ... diff --git a/napalm/iosxr/iosxr.py b/napalm/iosxr/iosxr.py index 8747d00dd..ff87716b6 100644 --- a/napalm/iosxr/iosxr.py +++ b/napalm/iosxr/iosxr.py @@ -587,23 +587,23 @@ def generate_vrf_query(vrf_name): ), 0, ) - this_neighbor["address_family"][this_afi][ - "accepted_prefixes" - ] = napalm.base.helpers.convert( - int, - napalm.base.helpers.find_txt( - neighbor, "AFData/Entry/PrefixesAccepted" - ), - 0, + this_neighbor["address_family"][this_afi]["accepted_prefixes"] = ( + napalm.base.helpers.convert( + int, + napalm.base.helpers.find_txt( + neighbor, "AFData/Entry/PrefixesAccepted" + ), + 0, + ) ) - this_neighbor["address_family"][this_afi][ - "sent_prefixes" - ] = napalm.base.helpers.convert( - int, - napalm.base.helpers.find_txt( - neighbor, "AFData/Entry/PrefixesAdvertised" - ), - 0, + this_neighbor["address_family"][this_afi]["sent_prefixes"] = ( + napalm.base.helpers.convert( + int, + napalm.base.helpers.find_txt( + neighbor, "AFData/Entry/PrefixesAdvertised" + ), + 0, + ) ) except AttributeError: this_neighbor["address_family"][this_afi]["received_prefixes"] = -1 @@ -947,11 +947,11 @@ def cli(self, commands, encoding="text"): try: cli_output[str(command)] = str(self.device._execute_show(command)) except TimeoutError: - cli_output[ - str(command) - ] = 'Execution of command \ + cli_output[str(command)] = ( + 'Execution of command \ "{command}" took too long! Please adjust your params!'.format( - command=command + command=command + ) ) logger.error(str(cli_output)) raise CommandTimeoutException(str(cli_output)) @@ -2288,9 +2288,9 @@ def traceroute( last_probe_host_name = tag_value continue if tag_name == "DeltaTime": - last_hop_dict["probes"][last_probe_index][ - "rtt" - ] = napalm.base.helpers.convert(float, tag_value, 0.0) + last_hop_dict["probes"][last_probe_index]["rtt"] = ( + napalm.base.helpers.convert(float, tag_value, 0.0) + ) continue if last_hop_index: diff --git a/napalm/iosxr_netconf/iosxr_netconf.py b/napalm/iosxr_netconf/iosxr_netconf.py index 6f224e46a..7083da16e 100644 --- a/napalm/iosxr_netconf/iosxr_netconf.py +++ b/napalm/iosxr_netconf/iosxr_netconf.py @@ -801,30 +801,30 @@ def get_vrf_neighbors(rpc_reply_etree, xpath): ), 0, ) - this_neighbor["address_family"][this_afi][ - "accepted_prefixes" - ] = napalm.base.helpers.convert( - int, - self._find_txt( - neighbor, - "./bgp:af-data/bgp:prefixes-accepted", - default="", - namespaces=C.NS, - ), - 0, + this_neighbor["address_family"][this_afi]["accepted_prefixes"] = ( + napalm.base.helpers.convert( + int, + self._find_txt( + neighbor, + "./bgp:af-data/bgp:prefixes-accepted", + default="", + namespaces=C.NS, + ), + 0, + ) ) - this_neighbor["address_family"][this_afi][ - "sent_prefixes" - ] = napalm.base.helpers.convert( - int, - self._find_txt( - neighbor, - "./bgp:af-data/\ + this_neighbor["address_family"][this_afi]["sent_prefixes"] = ( + napalm.base.helpers.convert( + int, + self._find_txt( + neighbor, + "./bgp:af-data/\ bgp:prefixes-advertised", - default="", - namespaces=C.NS, - ), - 0, + default="", + namespaces=C.NS, + ), + 0, + ) ) except AttributeError: this_neighbor["address_family"][this_afi]["received_prefixes"] = -1 diff --git a/napalm/nxos/nxos.py b/napalm/nxos/nxos.py index ea1d9fc66..b975029ef 100644 --- a/napalm/nxos/nxos.py +++ b/napalm/nxos/nxos.py @@ -669,15 +669,15 @@ def get_lldp_neighbors_detail( # Add field missing on IOS lldp_entry["parent_interface"] = "" # Translate the capability fields - lldp_entry[ - "remote_system_capab" - ] = napalm.base.helpers.transform_lldp_capab( - lldp_entry["remote_system_capab"] + lldp_entry["remote_system_capab"] = ( + napalm.base.helpers.transform_lldp_capab( + lldp_entry["remote_system_capab"] + ) ) - lldp_entry[ - "remote_system_enable_capab" - ] = napalm.base.helpers.transform_lldp_capab( - lldp_entry["remote_system_enable_capab"] + lldp_entry["remote_system_enable_capab"] = ( + napalm.base.helpers.transform_lldp_capab( + lldp_entry["remote_system_enable_capab"] + ) ) # Turn the interfaces into their long version local_intf = canonical_interface_name(local_intf) diff --git a/napalm/nxos_ssh/nxos_ssh.py b/napalm/nxos_ssh/nxos_ssh.py index 6fa051937..04896c9cc 100644 --- a/napalm/nxos_ssh/nxos_ssh.py +++ b/napalm/nxos_ssh/nxos_ssh.py @@ -1485,9 +1485,9 @@ def get_route_to(self, destination="", protocol="", longer=False): "preference": int(nh_metric), } if nh_source == "bgp": - route_entry[ - "protocol_attributes" - ] = self._get_bgp_route_attr(cur_prefix, curvrf, nh_ip) + route_entry["protocol_attributes"] = ( + self._get_bgp_route_attr(cur_prefix, curvrf, nh_ip) + ) else: route_entry["protocol_attributes"] = {} nh_list.append(route_entry) From 4e373e929c890566a71cd6d8bd850e75fecbe1e2 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Sat, 10 Aug 2024 14:01:49 +0300 Subject: [PATCH 20/42] remove ws --- napalm/ios/ios.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index d9df89c8c..d8aff3687 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3780,7 +3780,7 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): continue else: vlan_id = vlan_m.group(1) - vlan_name = _vlan_name if _vlan_name else vlan_name + vlan_name = _vlan_name.strip() if _vlan_name else vlan_name.strip() interfaces = vlan_m.group(3) or "" vlans[vlan_id] = {"name": vlan_name, "interfaces": []} else: From 2a42429279825521400d542d737234009d84d8ae Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Sat, 10 Aug 2024 18:24:51 +0300 Subject: [PATCH 21/42] refactor _get_vlan_all_ports() --- napalm/ios/ios.py | 40 ++++++------------- .../expected_result.json | 8 ++-- .../show_vlan_id_2400.txt | 6 ++- .../show_vlan_id_2432.txt | 15 ------- .../show_vlan_id_2433.txt | 15 ------- 5 files changed, 20 insertions(+), 64 deletions(-) delete mode 100644 test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt delete mode 100644 test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2433.txt diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index d8aff3687..efd1037da 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3751,7 +3751,7 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): ) continuation_regexp = re.compile(r"^\s+([A-Z][a-z].*)$") match_pvlan_regexp = re.compile( - r"^(\d+)\s+(\S+)\s+(community|isolated)?\s+\S+(\s+[A-Z][a-z].*)?$" + r"^(\d+)\s+(\S+)\s+(community|isolated)?\s+(\s+[A-Z][a-z].*)?$" ) output = output.splitlines() vlans = {} @@ -3762,33 +3762,19 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): interfaces = "" for line in output: vlan_m = find_regexp.match(line) + p_vlan_m = match_pvlan_regexp.match(line) if vlan_m: - p_vlan_m = match_pvlan_regexp.match(line) - if p_vlan_m: - was_vlan_or_cont = True - vlan_name = vlan_m.group(2) - if ( - vlan_name == p_vlan_m.group(2) - and p_vlan_m.group(3) in ["community", "isolated"] - and vlan_name == _vlan_id - ): - vlan_id = p_vlan_m.group(2) - elif vlan_m.group(1) != p_vlan_m.group(2) and p_vlan_m.group(3) in [ - "community", - "isolated", - ]: - continue - else: - vlan_id = vlan_m.group(1) - vlan_name = _vlan_name.strip() if _vlan_name else vlan_name.strip() - interfaces = vlan_m.group(3) or "" - vlans[vlan_id] = {"name": vlan_name, "interfaces": []} - else: - was_vlan_or_cont = True - vlan_id = vlan_m.group(1) - vlan_name = vlan_m.group(2).strip() - interfaces = vlan_m.group(3) or "" - vlans[vlan_id] = {"name": vlan_name, "interfaces": []} + was_vlan_or_cont = True + vlan_id = vlan_m.group(1) + vlan_name = vlan_m.group(2).strip() + interfaces = vlan_m.group(3) or "" + vlans[vlan_id] = {"name": vlan_name, "interfaces": []} + if p_vlan_m: + was_vlan_or_cont = True + vlan_id = p_vlan_m.group(2) + vlan_name = vlans.get(vlan_id)["name"] + interfaces = vlan_m.group(4) or "" + vlans[vlan_id] = {"name": vlan_name, "interfaces": []} cont_m = None if was_vlan_or_cont: diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json index da9cd8e01..62ccb8b3b 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json @@ -220,9 +220,7 @@ }, "2400": { "name": "Vlan2400", - "interfaces": [ - "Port-channel1" - ] + "interfaces": [] }, "2432": { "name": "Vlan2432", @@ -234,8 +232,8 @@ "2433": { "name": "Vlan2433", "interfaces": [ - "GigabitEthernet0/3", - "GigabitEthernet0/4" + "GigabitEthernet0/1", + "GigabitEthernet0/3" ] } } diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt index 25c0837ea..26d85b03a 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt @@ -1,6 +1,8 @@ VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- -2400 Vlan2400 active Po1 +2400 Vlan2400 active +2432 Vlan2432 active +2433 Vlan2433 active VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ @@ -13,4 +15,4 @@ Disabled Primary Secondary Type Ports ------- --------- ----------------- ------------------------------------------ 2400 2432 community Gi0/1, Gi0/2 -2400 2433 community Gi0/3, Gi0/4 +2400 2433 isolated Gi0/1, Gi0/3 diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt deleted file mode 100644 index e8dd1aa10..000000000 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt +++ /dev/null @@ -1,15 +0,0 @@ -VLAN Name Status Ports ----- -------------------------------- --------- ------------------------------- -2432 Vlan2432 active Po1 - -VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 ----- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ -2432 enet 102432 1500 - - - - - 0 0 - -Remote SPAN VLAN ----------------- -Disabled - -Primary Secondary Type Ports -------- --------- ----------------- ------------------------------------------ -2400 2432 community Gi0/1, Gi0/2 diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2433.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2433.txt deleted file mode 100644 index a80662e3e..000000000 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2433.txt +++ /dev/null @@ -1,15 +0,0 @@ -VLAN Name Status Ports ----- -------------------------------- --------- ------------------------------- -2433 Vlan2433 active Po1 - -VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 ----- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ -2433 enet 102433 1500 - - - - - 0 0 - -Remote SPAN VLAN ----------------- -Disabled - -Primary Secondary Type Ports -------- --------- ----------------- ------------------------------------------ -2400 2433 community Gi0/3, Gi0/4 From f33e1cf229934fcd7719664680e76e216b1d0f0d Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Sat, 10 Aug 2024 18:28:12 +0300 Subject: [PATCH 22/42] fix typo --- napalm/ios/ios.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index efd1037da..e02d98dc5 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3773,7 +3773,7 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): was_vlan_or_cont = True vlan_id = p_vlan_m.group(2) vlan_name = vlans.get(vlan_id)["name"] - interfaces = vlan_m.group(4) or "" + interfaces = p_vlan_m.group(4) or "" vlans[vlan_id] = {"name": vlan_name, "interfaces": []} cont_m = None From 870434d69efdbfffe1c8ce7d81d5204f82684276 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Sat, 10 Aug 2024 19:07:18 +0300 Subject: [PATCH 23/42] update unittest --- .../no_show_vlan_all_ports/expected_result.json | 4 ---- .../no_show_vlan_all_ports/show_vlan_id_2432.txt | 15 +++++++++++++++ ...how_vlan_id_2400.txt => show_vlan_id_2433.txt} | 5 +---- 3 files changed, 16 insertions(+), 8 deletions(-) create mode 100644 test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt rename test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/{show_vlan_id_2400.txt => show_vlan_id_2433.txt} (73%) diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json index 62ccb8b3b..66d1fc596 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json @@ -218,10 +218,6 @@ "name": "Vlan1005", "interfaces": [] }, - "2400": { - "name": "Vlan2400", - "interfaces": [] - }, "2432": { "name": "Vlan2432", "interfaces": [ diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt new file mode 100644 index 000000000..2ed5150ae --- /dev/null +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt @@ -0,0 +1,15 @@ +VLAN Name Status Ports +---- -------------------------------- --------- ------------------------------- +2432 Vlan2432 active + +VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 +---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ +2432 enet 102432 1500 - - - - - 0 0 + +Remote SPAN VLAN +---------------- +Disabled + +Primary Secondary Type Ports +------- --------- ----------------- ------------------------------------------ +2400 2432 isolated Gi0/1, Gi0/3 diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2433.txt similarity index 73% rename from test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt rename to test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2433.txt index 26d85b03a..7f6382a79 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2400.txt +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2433.txt @@ -1,12 +1,10 @@ VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- -2400 Vlan2400 active -2432 Vlan2432 active 2433 Vlan2433 active VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ -2400 enet 102400 1500 - - - - - 0 0 +2433 enet 102433 1500 - - - - - 0 0 Remote SPAN VLAN ---------------- @@ -14,5 +12,4 @@ Disabled Primary Secondary Type Ports ------- --------- ----------------- ------------------------------------------ -2400 2432 community Gi0/1, Gi0/2 2400 2433 isolated Gi0/1, Gi0/3 From 3df3890c7d851b41b1228f2f8550b3dbab4fce60 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Sat, 10 Aug 2024 19:13:27 +0300 Subject: [PATCH 24/42] remove wrongly entered PVLANs in mocked data --- .../test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt index da3f6373b..70145d812 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt @@ -12,6 +12,3 @@ VLAN Name Status Ports 1003 Vlan1003 act/unsup 1004 Vlan1004 act/unsup 1005 Vlan1005 act/unsup -2400 Vlan2400 active -2432 Vlan2432 active -2433 Vlan2433 active From cf4c5174aa003b2014c080fd122d33d840edc445 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Sat, 10 Aug 2024 19:15:42 +0300 Subject: [PATCH 25/42] update mocked data --- .../test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt index 70145d812..7faedad7e 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt @@ -12,3 +12,5 @@ VLAN Name Status Ports 1003 Vlan1003 act/unsup 1004 Vlan1004 act/unsup 1005 Vlan1005 act/unsup +2432 Vlan2432 active +2433 Vlan2432 active From 1fa6d7670f471caa954c0d197b12cd1501a49b4a Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Sat, 10 Aug 2024 19:39:13 +0300 Subject: [PATCH 26/42] update mocked data --- .../no_show_vlan_all_ports/expected_result.json | 10 ++-------- .../no_show_vlan_all_ports/show_vlan_brief.txt | 4 ++-- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json index 66d1fc596..c71e169d6 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json @@ -220,16 +220,10 @@ }, "2432": { "name": "Vlan2432", - "interfaces": [ - "GigabitEthernet0/1", - "GigabitEthernet0/2" - ] + "interfaces": [] }, "2433": { "name": "Vlan2433", - "interfaces": [ - "GigabitEthernet0/1", - "GigabitEthernet0/3" - ] + "interfaces": [] } } diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt index 7faedad7e..50179bafa 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt @@ -12,5 +12,5 @@ VLAN Name Status Ports 1003 Vlan1003 act/unsup 1004 Vlan1004 act/unsup 1005 Vlan1005 act/unsup -2432 Vlan2432 active -2433 Vlan2432 active +2432 Vlan2432 act/unsup +2433 Vlan2433 act/unsup From f45c2488e648f0fc444f0aae9dd68ee6469ea689 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Sat, 10 Aug 2024 19:48:22 +0300 Subject: [PATCH 27/42] update tests --- .../no_show_vlan_all_ports/expected_result.json | 10 ++++++++-- .../no_show_vlan_all_ports/show_vlan_brief.txt | 2 -- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json index c71e169d6..f21e00e48 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json @@ -220,10 +220,16 @@ }, "2432": { "name": "Vlan2432", - "interfaces": [] + "interfaces": [ + "GigabitEthernet0/1", + "GigabitEthernet0/2" + ] }, "2433": { "name": "Vlan2433", - "interfaces": [] + "interfaces": [ + "GigabitEthernet0/1", + "GigabitEthernet0/2" + ] } } diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt index 50179bafa..70145d812 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt @@ -12,5 +12,3 @@ VLAN Name Status Ports 1003 Vlan1003 act/unsup 1004 Vlan1004 act/unsup 1005 Vlan1005 act/unsup -2432 Vlan2432 act/unsup -2433 Vlan2433 act/unsup From c3597caff4cd4cf7589950adc1fb5c08b36087e2 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Sat, 10 Aug 2024 19:51:06 +0300 Subject: [PATCH 28/42] update tests --- .../no_show_vlan_all_ports/expected_result.json | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json index f21e00e48..6f0c1a83e 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json @@ -218,18 +218,4 @@ "name": "Vlan1005", "interfaces": [] }, - "2432": { - "name": "Vlan2432", - "interfaces": [ - "GigabitEthernet0/1", - "GigabitEthernet0/2" - ] - }, - "2433": { - "name": "Vlan2433", - "interfaces": [ - "GigabitEthernet0/1", - "GigabitEthernet0/2" - ] - } } From d1f7e1ecdf7032cb1a521c45ecde478874a2d984 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Sat, 10 Aug 2024 19:53:54 +0300 Subject: [PATCH 29/42] update tests --- .../test_get_vlans/no_show_vlan_all_ports/expected_result.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json index 6f0c1a83e..b9d0e250d 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json @@ -217,5 +217,5 @@ "1005": { "name": "Vlan1005", "interfaces": [] - }, + } } From 505385805887d4efd65424cc66e22fdb7f092d97 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 12 Aug 2024 15:45:13 +0300 Subject: [PATCH 30/42] add new mock data --- napalm/ios/ios.py | 4 +++- .../expected_result.json | 22 +++++++++++++++++++ .../show_vlan_brief.txt | 5 +++++ .../show_vlan_id_500.txt | 16 ++++++++++++++ ..._vlan_id_2432.txt => show_vlan_id_501.txt} | 6 ++--- ..._vlan_id_2433.txt => show_vlan_id_502.txt} | 6 ++--- 6 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_500.txt rename test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/{show_vlan_id_2432.txt => show_vlan_id_501.txt} (74%) rename test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/{show_vlan_id_2433.txt => show_vlan_id_502.txt} (74%) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index e02d98dc5..7eb8a8ce0 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3771,10 +3771,12 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): vlans[vlan_id] = {"name": vlan_name, "interfaces": []} if p_vlan_m: was_vlan_or_cont = True + p_vlan_id = p_vlan_m.group(1) vlan_id = p_vlan_m.group(2) vlan_name = vlans.get(vlan_id)["name"] interfaces = p_vlan_m.group(4) or "" vlans[vlan_id] = {"name": vlan_name, "interfaces": []} + vlans[p_vlan_id] = {"name": vlan_name, "interfaces": []} cont_m = None if was_vlan_or_cont: @@ -3797,7 +3799,7 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): return vlans def _get_vlan_from_id(self): - command = "show vlan brief" + command = "show vlan" output = self._send_command(command) vlan_regexp = r"^(\d+)\W+(.*?(?=active|act\/[isl]{1}shut|act\/unsup))" find_vlan = re.findall(vlan_regexp, output, re.MULTILINE) diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json index b9d0e250d..c09efb24a 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/expected_result.json @@ -8,6 +8,28 @@ "GigabitEthernet0/20" ] }, + "500": { + "name": "VLAN500", + "interfaces": [ + "GigabitEthernet1/1", + "GigabitEthernet1/2", + "GigabitEthernet1/3" + ] + }, + "501": { + "name": "Vlan501", + "interfaces": [ + "GigabitEthernet1/1", + "GigabitEthernet1/2" + ] + }, + "502": { + "name": "VLAN502", + "interfaces": [ + "GigabitEthernet1/1", + "GigabitEthernet1/3" + ] + }, "710": { "name": "Vlan710", "interfaces": [ diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt index 70145d812..9a594b352 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt @@ -1,6 +1,9 @@ VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- 1 default active Gi0/17, Gi0/18, Gi0/19, Gi0/20 +500 VLAN0500 active +501 Vlan0501 active +502 VLAN0502 active 710 Vlan710 active 736 Vlan736 active 748 Vlan748 active @@ -12,3 +15,5 @@ VLAN Name Status Ports 1003 Vlan1003 act/unsup 1004 Vlan1004 act/unsup 1005 Vlan1005 act/unsup +500 501 community Gi1/1, Gi1/2 +500 502 isolated Gi1/1, Gi1/3 diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_500.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_500.txt new file mode 100644 index 000000000..808b123f9 --- /dev/null +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_500.txt @@ -0,0 +1,16 @@ +VLAN Name Status Ports +---- -------------------------------- --------- ------------------------------- +500 VLAN0500 active + +VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 +---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ +500 enet 100500 1500 - - - - - 0 0 + +Remote SPAN VLAN +---------------- +Disabled + +Primary Secondary Type Ports +------- --------- ----------------- ------------------------------------------ +500 501 community Gi1/1, Gi1/2 +500 502 isolated Gi1/1, Gi1/3 diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_501.txt similarity index 74% rename from test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt rename to test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_501.txt index 2ed5150ae..e956d0feb 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2432.txt +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_501.txt @@ -1,10 +1,10 @@ VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- -2432 Vlan2432 active +501 VLAN0501 active VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ -2432 enet 102432 1500 - - - - - 0 0 +501 enet 100501 1500 - - - - - 0 0 Remote SPAN VLAN ---------------- @@ -12,4 +12,4 @@ Disabled Primary Secondary Type Ports ------- --------- ----------------- ------------------------------------------ -2400 2432 isolated Gi0/1, Gi0/3 +500 501 community Gi1/1, Gi1/2 diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2433.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_502.txt similarity index 74% rename from test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2433.txt rename to test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_502.txt index 7f6382a79..520f207cf 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_2433.txt +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_id_502.txt @@ -1,10 +1,10 @@ VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- -2433 Vlan2433 active +502 VLAN0502 active VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ -2433 enet 102433 1500 - - - - - 0 0 +502 enet 100502 1500 - - - - - 0 0 Remote SPAN VLAN ---------------- @@ -12,4 +12,4 @@ Disabled Primary Secondary Type Ports ------- --------- ----------------- ------------------------------------------ -2400 2433 isolated Gi0/1, Gi0/3 +500 502 isolated Gi1/1, Gi1/3 From e1598b4175ebf7e9255e613f0a9b12cba73fc842 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 12 Aug 2024 15:48:28 +0300 Subject: [PATCH 31/42] rename mock file --- .../no_show_vlan_all_ports/{show_vlan_brief.txt => show_vlan.txt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/{show_vlan_brief.txt => show_vlan.txt} (100%) diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan.txt similarity index 100% rename from test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan_brief.txt rename to test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan.txt From 25dad2010042860de4855e4fa3312dc627e494d3 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 12 Aug 2024 17:25:03 +0300 Subject: [PATCH 32/42] fix logic --- napalm/ios/ios.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 7eb8a8ce0..39d6f2613 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3775,8 +3775,6 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): vlan_id = p_vlan_m.group(2) vlan_name = vlans.get(vlan_id)["name"] interfaces = p_vlan_m.group(4) or "" - vlans[vlan_id] = {"name": vlan_name, "interfaces": []} - vlans[p_vlan_id] = {"name": vlan_name, "interfaces": []} cont_m = None if was_vlan_or_cont: @@ -3784,7 +3782,7 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): if cont_m: interfaces = cont_m.group(1) - if not cont_m and not vlan_m: + if not cont_m and not (vlan_m or p_vlan_m): was_vlan_or_cont = False continue From 20e94b113db31af8ac51c3f768e3047d21ca2d1c Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 12 Aug 2024 17:29:11 +0300 Subject: [PATCH 33/42] fixes --- napalm/ios/ios.py | 1 - 1 file changed, 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 39d6f2613..2668e0d08 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3771,7 +3771,6 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): vlans[vlan_id] = {"name": vlan_name, "interfaces": []} if p_vlan_m: was_vlan_or_cont = True - p_vlan_id = p_vlan_m.group(1) vlan_id = p_vlan_m.group(2) vlan_name = vlans.get(vlan_id)["name"] interfaces = p_vlan_m.group(4) or "" From cb52b095550e63e13c8b5ced3ea7ce8ff62a378e Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 12 Aug 2024 17:31:47 +0300 Subject: [PATCH 34/42] fixes --- napalm/ios/ios.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 2668e0d08..ff430de0a 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3771,8 +3771,9 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): vlans[vlan_id] = {"name": vlan_name, "interfaces": []} if p_vlan_m: was_vlan_or_cont = True + p_vlan_id = p_vlan_m.group(1) vlan_id = p_vlan_m.group(2) - vlan_name = vlans.get(vlan_id)["name"] + vlan_name = vlans.get(vlan_id)["name"] if vlans.get(vlan_id) else p_vlan_m.group(2) interfaces = p_vlan_m.group(4) or "" cont_m = None From 923035d8a877bd363985c186b30c29b9500752df Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 12 Aug 2024 17:34:13 +0300 Subject: [PATCH 35/42] black --- napalm/ios/ios.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index ff430de0a..e111f0a06 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3773,7 +3773,11 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): was_vlan_or_cont = True p_vlan_id = p_vlan_m.group(1) vlan_id = p_vlan_m.group(2) - vlan_name = vlans.get(vlan_id)["name"] if vlans.get(vlan_id) else p_vlan_m.group(2) + vlan_name = ( + vlans.get(vlan_id)["name"] + if vlans.get(vlan_id) + else p_vlan_m.group(2) + ) interfaces = p_vlan_m.group(4) or "" cont_m = None From 9b4023d1b94eb928f1e40c475711bd69e6ee2456 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 12 Aug 2024 17:36:11 +0300 Subject: [PATCH 36/42] fixes --- napalm/ios/ios.py | 1 - 1 file changed, 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index e111f0a06..40b2fc5d3 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3771,7 +3771,6 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): vlans[vlan_id] = {"name": vlan_name, "interfaces": []} if p_vlan_m: was_vlan_or_cont = True - p_vlan_id = p_vlan_m.group(1) vlan_id = p_vlan_m.group(2) vlan_name = ( vlans.get(vlan_id)["name"] From 3740b646071d0ee64cc3dce0f68f59e6f260649e Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 12 Aug 2024 17:53:56 +0300 Subject: [PATCH 37/42] add mock data --- .../test_get_vlans/no_show_vlan_all_ports/show_vlan.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan.txt b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan.txt index 9a594b352..de911f2d9 100644 --- a/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan.txt +++ b/test/ios/mocked_data/test_get_vlans/no_show_vlan_all_ports/show_vlan.txt @@ -1,9 +1,9 @@ VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- 1 default active Gi0/17, Gi0/18, Gi0/19, Gi0/20 -500 VLAN0500 active -501 Vlan0501 active -502 VLAN0502 active +500 VLAN500 active +501 Vlan501 active +502 VLAN502 active 710 Vlan710 active 736 Vlan736 active 748 Vlan748 active From f54656026a0821d2ce0d65a85a3836a5ce6ba3b8 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 12 Aug 2024 18:04:53 +0300 Subject: [PATCH 38/42] fixes --- napalm/ios/ios.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 40b2fc5d3..6c5646787 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3771,13 +3771,14 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): vlans[vlan_id] = {"name": vlan_name, "interfaces": []} if p_vlan_m: was_vlan_or_cont = True - vlan_id = p_vlan_m.group(2) + p_vlan_id = p_vlan_m.group(2) vlan_name = ( vlans.get(vlan_id)["name"] if vlans.get(vlan_id) else p_vlan_m.group(2) ) interfaces = p_vlan_m.group(4) or "" + vlans[p_vlan_id] = {"name": vlan_name, "interfaces": []} cont_m = None if was_vlan_or_cont: From 423e62368ce3b48950114ceeefba6dab4a91a398 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 12 Aug 2024 18:27:16 +0300 Subject: [PATCH 39/42] fixes --- napalm/ios/ios.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 6c5646787..62b88eacf 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3797,6 +3797,9 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): if intf.strip() ] ) + + if len(vlans).keys() > 1: + del(vlans[vlan_id]) return vlans From 34e90aa284603e079a43167eff00bdb3f069c1a4 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 12 Aug 2024 18:28:46 +0300 Subject: [PATCH 40/42] black --- napalm/ios/ios.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 62b88eacf..10ca85281 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3797,9 +3797,9 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): if intf.strip() ] ) - + if len(vlans).keys() > 1: - del(vlans[vlan_id]) + del vlans[vlan_id] return vlans From a850cd5c9b15c8facbdccf05f041b26d90e9d2dc Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 12 Aug 2024 18:31:17 +0300 Subject: [PATCH 41/42] fixes --- napalm/ios/ios.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 10ca85281..74739945c 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3798,8 +3798,8 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): ] ) - if len(vlans).keys() > 1: - del vlans[vlan_id] + if vlans and len(vlans).keys() > 1: + del vlans[vlan_id] return vlans From 7680d42b271acf8ce4f73db531dc2691c78b6016 Mon Sep 17 00:00:00 2001 From: Vladislav Vasilev Date: Mon, 12 Aug 2024 18:35:30 +0300 Subject: [PATCH 42/42] fixes --- napalm/ios/ios.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/napalm/ios/ios.py b/napalm/ios/ios.py index 74739945c..a64c84990 100644 --- a/napalm/ios/ios.py +++ b/napalm/ios/ios.py @@ -3798,7 +3798,7 @@ def _get_vlan_all_ports(self, output, _vlan_id, _vlan_name): ] ) - if vlans and len(vlans).keys() > 1: + if vlans and len(vlans) > 1: del vlans[vlan_id] return vlans