From 52d02640f58a712ce508c46b058544924c6de8a4 Mon Sep 17 00:00:00 2001 From: checktheroads Date: Sun, 22 Mar 2020 08:11:56 -0700 Subject: [PATCH] throw error if a query is received for a disabled afi --- hyperglass/api/models/validators.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/hyperglass/api/models/validators.py b/hyperglass/api/models/validators.py index c7bd608..52f5d19 100644 --- a/hyperglass/api/models/validators.py +++ b/hyperglass/api/models/validators.py @@ -76,13 +76,11 @@ def validate_ip(value, query_type, query_vrf): # noqa: C901 query_type=query_type_params.display_name, ) - """ - Test the valid IP address to determine if it is: - - Unspecified (See RFC5735, RFC2373) - - Loopback (See RFC5735, RFC2373) - - Otherwise IETF Reserved - ...and returns an error if so. - """ + # Test the valid IP address to determine if it is: + # - Unspecified (See RFC5735, RFC2373) + # - Loopback (See RFC5735, RFC2373) + # - Otherwise IETF Reserved + # ...and returns an error if so. if valid_ip.is_reserved or valid_ip.is_unspecified or valid_ip.is_loopback: raise InputInvalid( params.messages.invalid_input, @@ -92,6 +90,13 @@ def validate_ip(value, query_type, query_vrf): # noqa: C901 ip_version = valid_ip.version + if getattr(query_vrf, f"ipv{ip_version}") is None: + raise InputInvalid( + params.messages.feature_not_enabled, + feature=f"IPv{ip_version}", + device_name=f"VRF {query_vrf.display_name}", + ) + vrf_acl = operator.attrgetter(f"ipv{ip_version}.access_list")(query_vrf) for ace in [a for a in vrf_acl if a.network.version == ip_version]: