From 24f887bd4b74a95d543308daa9b5fe38e2f33d65 Mon Sep 17 00:00:00 2001 From: bewing Date: Thu, 24 May 2018 10:22:57 -0500 Subject: [PATCH] Fix #736 (get_route_to bgp confed) (#737) * Add test case for #736 * Strip parans from path when doing remote_as in get_route_to --- napalm/eos/eos.py | 2 +- .../iss_736/expected_result.json | 1 + ..._ip_bgp_1_0_4_0_24_detail_vrf_default.json | 108 ++++++++++++++++++ ...ute_vrf_default_1_0_4_0_24_bgp_detail.json | 33 ++++++ .../test_get_route_to/iss_736/show_vrf.text | 3 + 5 files changed, 146 insertions(+), 1 deletion(-) create mode 100644 test/eos/mocked_data/test_get_route_to/iss_736/expected_result.json create mode 100644 test/eos/mocked_data/test_get_route_to/iss_736/show_ip_bgp_1_0_4_0_24_detail_vrf_default.json create mode 100644 test/eos/mocked_data/test_get_route_to/iss_736/show_ip_route_vrf_default_1_0_4_0_24_bgp_detail.json create mode 100644 test/eos/mocked_data/test_get_route_to/iss_736/show_vrf.text diff --git a/napalm/eos/eos.py b/napalm/eos/eos.py index f98100990..36deb7771 100644 --- a/napalm/eos/eos.py +++ b/napalm/eos/eos.py @@ -1129,7 +1129,7 @@ def get_route_to(self, destination='', protocol=''): for bgp_route_details in bgp_routes: bgp_route = route.copy() as_path = bgp_route_details.get('asPathEntry', {}).get('asPath', u'') - remote_as = int(as_path.split()[-1]) + remote_as = int(as_path.strip("()").split()[-1]) remote_address = napalm.base.helpers.ip(bgp_route_details.get( 'routeDetail', {}).get('peerEntry', {}).get('peerAddr', '')) local_preference = bgp_route_details.get('localPreference') diff --git a/test/eos/mocked_data/test_get_route_to/iss_736/expected_result.json b/test/eos/mocked_data/test_get_route_to/iss_736/expected_result.json new file mode 100644 index 000000000..b8942c698 --- /dev/null +++ b/test/eos/mocked_data/test_get_route_to/iss_736/expected_result.json @@ -0,0 +1 @@ +{"1.0.4.0/24": [{"current_active": true, "last_active": true, "age": 0, "next_hop": "1.0.4.221", "protocol": "eBGP", "outgoing_interface": "Ethernet51/1", "preference": 200, "inactive_reason": "noReason", "routing_table": "default", "selected_next_hop": true, "protocol_attributes": {"metric": 175, "as_path": "(20901 21149)", "local_preference": 100, "local_as": 20948, "remote_as": 21149, "remote_address": "1.0.4.221", "preference2": 0, "communities": []}}, {"current_active": false, "last_active": false, "age": 0, "next_hop": "1.0.4.223", "protocol": "eBGP", "outgoing_interface": "Ethernet52/1", "preference": 200, "inactive_reason": "ecmpFast", "routing_table": "default", "selected_next_hop": false, "protocol_attributes": {"metric": 175, "as_path": "(20902 21149)", "local_preference": 100, "local_as": 20948, "remote_as": 21149, "remote_address": "1.0.4.223", "preference2": 0, "communities": []}}]} diff --git a/test/eos/mocked_data/test_get_route_to/iss_736/show_ip_bgp_1_0_4_0_24_detail_vrf_default.json b/test/eos/mocked_data/test_get_route_to/iss_736/show_ip_bgp_1_0_4_0_24_detail_vrf_default.json new file mode 100644 index 000000000..91ab8e38e --- /dev/null +++ b/test/eos/mocked_data/test_get_route_to/iss_736/show_ip_bgp_1_0_4_0_24_detail_vrf_default.json @@ -0,0 +1,108 @@ +{ + "vrfs": { + "default": { + "routerId": "1.0.4.48", + "vrf": "default", + "bgpRouteEntries": { + "1.0.4.0/24": { + "totalPaths": 2, + "bgpAdvertisedPeerGroups": { + "INTERNAL-TOR": { + "peerList": [ + "1.0.4.223" + ] + } + }, + "totalAdvertisedPeers": 1, + "maskLength": 16, + "bgpRoutePaths": [ + { + "asPathEntry": { + "asPathType": "Confed-External", + "asPath": "(20901 21149)" + }, + "med": 175, + "localPreference": 100, + "weight": 0, + "reasonNotBestpath": "noReason", + "timestamp": 1526591713, + "nextHop": "1.0.4.221", + "routeType": { + "atomicAggregator": false, + "origin": "Igp", + "suppressed": false, + "queued": false, + "valid": true, + "ecmpContributor": true, + "luRoute": false, + "active": true, + "stale": false, + "ecmp": true, + "backup": false, + "ecmpHead": true, + "ucmp": false + }, + "routeDetail": { + "origin": "Igp", + "peerEntry": { + "peerRouterId": "1.0.4.1", + "peerAddr": "1.0.4.221" + }, + "tunnelRibEligible": false, + "extCommunityList": [], + "communityList": [], + "rxSafi": "Unicast", + "aggregator": " (aggregated by 65001 1.0.4.49)", + "recvdFromRRClient": false, + "labelStack": [] + } + }, + { + "asPathEntry": { + "asPathType": "Confed-External", + "asPath": "(20902 21149)" + }, + "med": 175, + "localPreference": 100, + "weight": 0, + "reasonNotBestpath": "ecmpFast", + "timestamp": 1526591756, + "nextHop": "1.0.4.223", + "routeType": { + "atomicAggregator": false, + "origin": "Igp", + "suppressed": false, + "queued": false, + "valid": true, + "ecmpContributor": true, + "luRoute": false, + "active": false, + "stale": false, + "ecmp": true, + "backup": false, + "ecmpHead": false, + "ucmp": false + }, + "routeDetail": { + "origin": "Igp", + "peerEntry": { + "peerRouterId": "1.0.4.2", + "peerAddr": "1.0.4.223" + }, + "tunnelRibEligible": false, + "extCommunityList": [], + "communityList": [], + "rxSafi": "Unicast", + "aggregator": " (aggregated by 65501 1.0.4.49)", + "recvdFromRRClient": false, + "labelStack": [] + } + } + ], + "address": "1.0.4.0" + } + }, + "asn": 20948 + } + } +} diff --git a/test/eos/mocked_data/test_get_route_to/iss_736/show_ip_route_vrf_default_1_0_4_0_24_bgp_detail.json b/test/eos/mocked_data/test_get_route_to/iss_736/show_ip_route_vrf_default_1_0_4_0_24_bgp_detail.json new file mode 100644 index 000000000..3234ba7d7 --- /dev/null +++ b/test/eos/mocked_data/test_get_route_to/iss_736/show_ip_route_vrf_default_1_0_4_0_24_bgp_detail.json @@ -0,0 +1,33 @@ +{ + "vrfs": { + "default": { + "routes": { + "1.0.4.0/24": { + "kernelProgrammed": true, + "directlyConnected": false, + "preference": 200, + "routeAction": "forward", + "vias": [ + { + "interface": "Ethernet51/1", + "interfaceDescription": "veos1:e5-21-1:", + "nexthopAddr": "1.0.4.221" + }, + { + "interface": "Ethernet52/1", + "interfaceDescription": "veos2:e5-21-1:", + "nexthopAddr": "1.0.4.223" + } + ], + "metric": 175, + "hardwareProgrammed": true, + "routeType": "eBGP" + } + }, + "allRoutesProgrammedKernel": true, + "routingDisabled": false, + "allRoutesProgrammedHardware": true, + "defaultRouteState": "reachable" + } + } +} diff --git a/test/eos/mocked_data/test_get_route_to/iss_736/show_vrf.text b/test/eos/mocked_data/test_get_route_to/iss_736/show_vrf.text new file mode 100644 index 000000000..f70ab6aa8 --- /dev/null +++ b/test/eos/mocked_data/test_get_route_to/iss_736/show_vrf.text @@ -0,0 +1,3 @@ +Maximum number of vrfs allowed: 14 + Vrf RD Protocols State Interfaces +------- ------------ ------------ ------------------------- -------------------