Skip to content

Commit b5fa7f3

Browse files
committed
Skip IP range duplicate check in validate_bgp_peer_group for different vnets
<!-- Please make sure you've read and understood our contributing guidelines: https://github.com/Azure/SONiC/blob/gh-pages/CONTRIBUTING.md ** Make sure all your commits include a signature generated with `git commit -s` ** If this is a bug fix, make sure your description includes "closes #xxxx", "fixes #xxxx" or "resolves #xxxx" so that GitHub automatically closes the related issue when the PR is merged. If you are adding/modifying/removing any command or utility script, please also make sure to add/modify/remove any unit tests from the tests directory as appropriate. If you are modifying or removing an existing 'show', 'config' or 'sonic-clear' subcommand, or you are adding a new subcommand, please make sure you also update the Command Line Reference Guide (doc/Command-Reference.md) to reflect your changes. Please provide the following information: --> #### What I did Skip IP range duplicate check in `validate_bgp_peer_group` for different vnets Related issue: sonic-net#2145 #### How I did it Check duplicates only when both `vnet_name` and `ip_range` match #### How to verify it testbed tests and unit tests
1 parent 9c24925 commit b5fa7f3

2 files changed

Lines changed: 48 additions & 5 deletions

File tree

generic_config_updater/gu_common.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -311,10 +311,17 @@ def validate_bgp_peer_group(self, config_db):
311311
# TODO: convert string to IpAddress object for better handling of IPs
312312
# TODO: validate range intersection
313313
ip_range = peer_group["ip_range"]
314+
315+
# Use "default" vrf name if not specified
316+
name_split = peer_group_name.split('|')
317+
vrf_name = name_split[0] if len(name_split) > 1 else "default"
318+
314319
for ip in ip_range:
315-
if ip in visited:
316-
return False, f"{ip} is duplicated in BGP_PEER_RANGE: {set([peer_group_name, visited[ip]])}"
317-
visited[ip] = peer_group_name
320+
key = (ip, vrf_name)
321+
if key in visited:
322+
return False, (f"{ip} with vrf {vrf_name} is duplicated in BGP_PEER_RANGE: "
323+
f"{set([peer_group_name, visited[key]])}")
324+
visited[key] = peer_group_name
318325

319326
return True, None
320327

tests/generic_config_updater/gu_common_test.py

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,31 @@ def test_validate_bgp_peer_group__valid_non_intersecting_ip_ranges__returns_true
244244
self.assertTrue(actual)
245245
self.assertIsNone(error)
246246

247+
def test_validate_bgp_peer_group__valid_intersecting_ip_ranges_in_different_vrfs__returns_true(self):
248+
# Arrange
249+
config_wrapper = gu_common.ConfigWrapper()
250+
config = {
251+
"BGP_PEER_RANGE":
252+
{
253+
"VnetA|WLPARTNER_PASSIVE_V4": {
254+
"ip_range": ["1.1.1.1/31", "10.10.10.10/16", "100.100.100.100/24"]
255+
},
256+
"VnetB|WLPARTNER_PASSIVE_V4": {
257+
"ip_range": ["1.1.1.1/31", "10.10.10.10/16", "100.100.100.100/24"]
258+
},
259+
"WLPARTNER_PASSIVE_V4": {
260+
"ip_range": ["1.1.1.1/31", "10.10.10.10/16", "100.100.100.100/24"]
261+
}
262+
}
263+
}
264+
265+
# Act
266+
actual, error = config_wrapper.validate_bgp_peer_group(config)
267+
268+
# Assert
269+
self.assertTrue(actual)
270+
self.assertIsNone(error)
271+
247272
def test_validate_bgp_peer_group__same_ip_prefix__return_false(self):
248273
# duplicate v4 within same ip_range
249274
self.check_validate_bgp_peer_group(
@@ -275,15 +300,26 @@ def test_validate_bgp_peer_group__same_ip_prefix__return_false(self):
275300
duplicated_ip="fc00:1::32/16")
276301

277302
def check_validate_bgp_peer_group(self, ip_range, other_ip_range=[], duplicated_ip=None):
303+
# Check both default vrf and same vrf name in non-default vrf
304+
self._check_validate_bgp_peer_group(ip_range, other_ip_range, duplicated_ip, is_default_vrf=False)
305+
self._check_validate_bgp_peer_group(ip_range, other_ip_range, duplicated_ip, is_default_vrf=True)
306+
307+
def _check_validate_bgp_peer_group(self, ip_range, other_ip_range=[], duplicated_ip=None, is_default_vrf=False):
278308
# Arrange
279309
config_wrapper = gu_common.ConfigWrapper()
310+
if is_default_vrf:
311+
peer_group_name_1 = "BGPSLBPassive"
312+
peer_group_name_2 = "BgpVac"
313+
else:
314+
peer_group_name_1 = "VnetA|WLPARTNER_PASSIVE_V4"
315+
peer_group_name_2 = "VnetA|WLPARTNER_PASSIVE_V4_2"
280316
config = {
281317
"BGP_PEER_RANGE":
282318
{
283-
"BGPSLBPassive": {
319+
peer_group_name_1: {
284320
"ip_range": ip_range
285321
},
286-
"BgpVac": {
322+
peer_group_name_2: {
287323
"ip_range": other_ip_range
288324
},
289325
}

0 commit comments

Comments
 (0)