1
0
mirror of https://github.com/checktheroads/hyperglass synced 2024-05-11 05:55:08 +00:00

add force_cidr option for vrfs

This commit is contained in:
checktheroads
2020-03-22 17:46:08 -07:00
parent afebf8bcf4
commit f89b309f3f
3 changed files with 11 additions and 8 deletions

View File

@@ -2,7 +2,6 @@
# Standard Library
import re
import operator
from ipaddress import ip_network
# Project
@@ -97,9 +96,9 @@ def validate_ip(value, query_type, query_vrf): # noqa: C901
device_name=f"VRF {query_vrf.display_name}",
)
vrf_acl = operator.attrgetter(f"ipv{ip_version}.access_list")(query_vrf)
vrf_afi = getattr(query_vrf, f"ipv{ip_version}")
for ace in [a for a in vrf_acl if a.network.version == ip_version]:
for ace in [a for a in vrf_afi.access_list if a.network.version == ip_version]:
if _member_of(valid_ip, ace.network):
if query_type == "bgp_route" and _prefix_range(valid_ip, ace.ge, ace.le):
pass
@@ -129,7 +128,7 @@ def validate_ip(value, query_type, query_vrf): # noqa: C901
valid_ip = new_ip
elif query_type in ("bgp_route",):
elif query_type in ("bgp_route",) and vrf_afi.force_cidr:
max_le = max(
ace.le
for ace in query_vrf[ip_version].access_list
@@ -145,6 +144,7 @@ def validate_ip(value, query_type, query_vrf): # noqa: C901
)
valid_ip = new_ip
log.debug("Validation passed for {ip}", ip=value)
return valid_ip

View File

@@ -179,6 +179,7 @@ class DeviceVrf4(HyperglassModelExtra):
source_address: IPv4Address
access_list: List[AccessList4] = [AccessList4()]
force_cidr: StrictBool = False
class DeviceVrf6(HyperglassModelExtra):
@@ -186,6 +187,7 @@ class DeviceVrf6(HyperglassModelExtra):
source_address: IPv6Address
access_list: List[AccessList6] = [AccessList6()]
force_cidr: StrictBool = False
class Vrf(HyperglassModel):