From 0abe67c6ebb07eeb02236cb373b7c42cde03b3ec Mon Sep 17 00:00:00 2001 From: Hongbin Lu Date: Mon, 19 Mar 2018 22:08:05 +0000 Subject: [PATCH] Annotate all the filter parameters for networks Add a 'is_filter' keyword for each network's attribute that can be used as filter. In the future, we will rely on this to perform filter validation: https://review.openstack.org/#/c/554368/ . Change-Id: I0cdc1ff482d4ff7ec6afa391392c27c2c099cc0e Related-Bug: #1749820 --- doc/source/contributor/api_attributes.rst | 1 + neutron_lib/api/definitions/auto_allocated_topology.py | 1 + neutron_lib/api/definitions/base.py | 1 + neutron_lib/api/definitions/external_net.py | 1 + neutron_lib/api/definitions/network.py | 8 ++++++-- neutron_lib/api/definitions/network_mtu.py | 2 +- neutron_lib/api/definitions/provider_net.py | 3 +++ neutron_lib/api/definitions/vlantransparent.py | 3 ++- neutron_lib/tests/unit/api/definitions/base.py | 1 + ...filter-keyword-to-attribute-maps-3fa31e91c353d033.yaml | 5 +++++ 10 files changed, 22 insertions(+), 4 deletions(-) create mode 100644 releasenotes/notes/add-is_filter-keyword-to-attribute-maps-3fa31e91c353d033.yaml diff --git a/doc/source/contributor/api_attributes.rst b/doc/source/contributor/api_attributes.rst index 89bf20257..7d5913e18 100644 --- a/doc/source/contributor/api_attributes.rst +++ b/doc/source/contributor/api_attributes.rst @@ -84,6 +84,7 @@ The following are the defined keys for attribute maps: ``validate`` specifies rules for validating data in the attribute ``convert_to`` transformation to apply to the value before it is returned ``convert_list_to`` if the value is a list, apply this transformation to the value before it is returned +``is_filter`` the attribute can be used in ``GET`` requests as filter ``is_visible`` the attribute is returned in ``GET`` responses ``required_by_policy`` the attribute is required by the policy engine and should therefore be filled by the API layer even if not present in request body ``enforce_policy`` the attribute is actively part of the policy enforcing mechanism, ie: there might be rules which refer to this attribute diff --git a/neutron_lib/api/definitions/auto_allocated_topology.py b/neutron_lib/api/definitions/auto_allocated_topology.py index f5b65cdb7..c88f702d0 100644 --- a/neutron_lib/api/definitions/auto_allocated_topology.py +++ b/neutron_lib/api/definitions/auto_allocated_topology.py @@ -43,6 +43,7 @@ RESOURCE_ATTRIBUTE_MAP = { 'allow_post': True, 'allow_put': True, 'default': False, + 'is_filter': True, 'is_visible': True, 'convert_to': converters.convert_to_boolean, 'enforce_policy': True, diff --git a/neutron_lib/api/definitions/base.py b/neutron_lib/api/definitions/base.py index 3dd6103fe..dc32193eb 100644 --- a/neutron_lib/api/definitions/base.py +++ b/neutron_lib/api/definitions/base.py @@ -142,6 +142,7 @@ KNOWN_KEYWORDS = ( 'default', 'enforce_policy', 'is_visible', + 'is_filter', 'primary_key', 'required_by_policy', 'validate', diff --git a/neutron_lib/api/definitions/external_net.py b/neutron_lib/api/definitions/external_net.py index c38e94139..eeadda084 100644 --- a/neutron_lib/api/definitions/external_net.py +++ b/neutron_lib/api/definitions/external_net.py @@ -36,6 +36,7 @@ RESOURCE_ATTRIBUTE_MAP = { 'allow_put': True, 'default': False, 'is_visible': True, + 'is_filter': True, 'convert_to': converters.convert_to_boolean, 'enforce_policy': True, 'required_by_policy': True diff --git a/neutron_lib/api/definitions/network.py b/neutron_lib/api/definitions/network.py index 464219ae0..64f9bcdce 100644 --- a/neutron_lib/api/definitions/network.py +++ b/neutron_lib/api/definitions/network.py @@ -36,24 +36,27 @@ RESOURCE_ATTRIBUTE_MAP = { 'id': {'allow_post': False, 'allow_put': False, 'validate': {'type:uuid': None}, 'is_visible': True, + 'is_filter': True, 'primary_key': True}, 'name': {'allow_post': True, 'allow_put': True, 'validate': { 'type:string': db_const.NAME_FIELD_SIZE}, - 'default': '', 'is_visible': True}, + 'default': '', 'is_visible': True, 'is_filter': True}, subnet.COLLECTION_NAME: {'allow_post': False, 'allow_put': False, 'default': [], 'is_visible': True}, 'admin_state_up': {'allow_post': True, 'allow_put': True, 'default': True, 'convert_to': converters.convert_to_boolean, + 'is_filter': True, 'is_visible': True}, 'status': {'allow_post': False, 'allow_put': False, - 'is_visible': True}, + 'is_visible': True, 'is_filter': True}, 'tenant_id': {'allow_post': True, 'allow_put': False, 'validate': { 'type:string': db_const.PROJECT_ID_FIELD_SIZE}, 'required_by_policy': True, + 'is_filter': True, 'is_visible': True}, constants.SHARED: { 'allow_post': True, @@ -61,6 +64,7 @@ RESOURCE_ATTRIBUTE_MAP = { 'default': False, 'convert_to': converters.convert_to_boolean, 'is_visible': True, + 'is_filter': True, 'required_by_policy': True, 'enforce_policy': True } diff --git a/neutron_lib/api/definitions/network_mtu.py b/neutron_lib/api/definitions/network_mtu.py index c3be3f991..085103c5b 100644 --- a/neutron_lib/api/definitions/network_mtu.py +++ b/neutron_lib/api/definitions/network_mtu.py @@ -53,7 +53,7 @@ UPDATED_TIMESTAMP = "2015-03-25T10:00:00-00:00" RESOURCE_ATTRIBUTE_MAP = { network.COLLECTION_NAME: { MTU: {'allow_post': False, 'allow_put': False, - 'is_visible': True}, + 'is_visible': True, 'is_filter': True}, }, } diff --git a/neutron_lib/api/definitions/provider_net.py b/neutron_lib/api/definitions/provider_net.py index 80112c416..5d2376c96 100644 --- a/neutron_lib/api/definitions/provider_net.py +++ b/neutron_lib/api/definitions/provider_net.py @@ -65,17 +65,20 @@ RESOURCE_ATTRIBUTE_MAP = { 'validate': {'type:string': NETWORK_TYPE_MAX_LEN}, 'default': constants.ATTR_NOT_SPECIFIED, 'enforce_policy': True, + 'is_filter': True, 'is_visible': True}, PHYSICAL_NETWORK: {'allow_post': True, 'allow_put': True, 'validate': {'type:string': PHYSICAL_NETWORK_MAX_LEN}, 'default': constants.ATTR_NOT_SPECIFIED, 'enforce_policy': True, + 'is_filter': True, 'is_visible': True}, SEGMENTATION_ID: {'allow_post': True, 'allow_put': True, 'convert_to': converters.convert_to_int, 'enforce_policy': True, 'default': constants.ATTR_NOT_SPECIFIED, + 'is_filter': True, 'is_visible': True}, } } diff --git a/neutron_lib/api/definitions/vlantransparent.py b/neutron_lib/api/definitions/vlantransparent.py index 67159c333..52affac91 100644 --- a/neutron_lib/api/definitions/vlantransparent.py +++ b/neutron_lib/api/definitions/vlantransparent.py @@ -49,7 +49,8 @@ RESOURCE_ATTRIBUTE_MAP = { 'allow_put': False, 'convert_to': converters.convert_to_boolean, 'default': constants.ATTR_NOT_SPECIFIED, - 'is_visible': True + 'is_visible': True, + 'is_filter': True } } } diff --git a/neutron_lib/tests/unit/api/definitions/base.py b/neutron_lib/tests/unit/api/definitions/base.py index 2a0ef1a55..1e3a84ea0 100644 --- a/neutron_lib/tests/unit/api/definitions/base.py +++ b/neutron_lib/tests/unit/api/definitions/base.py @@ -58,6 +58,7 @@ ASSERT_FUNCTIONS = { 'convert_list_to': assert_converter, 'default': assert_converter, 'enforce_policy': assert_bool, + 'is_filter': assert_bool, 'is_visible': assert_bool, 'primary_key': assert_true, 'required_by_policy': assert_bool, diff --git a/releasenotes/notes/add-is_filter-keyword-to-attribute-maps-3fa31e91c353d033.yaml b/releasenotes/notes/add-is_filter-keyword-to-attribute-maps-3fa31e91c353d033.yaml new file mode 100644 index 000000000..e23b3d81e --- /dev/null +++ b/releasenotes/notes/add-is_filter-keyword-to-attribute-maps-3fa31e91c353d033.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Add a new keyword ``is_filter`` to attribute maps. This keyword indicates + that the attribute can be used for filtering result on list requests.