From ecb35e0a650188f84eab9aa34bf5b07f315c1dd1 Mon Sep 17 00:00:00 2001 From: Rodrigo Barbieri Date: Fri, 12 Jul 2024 10:18:49 +0100 Subject: [PATCH] block_storage: Add support for project_id in Limits An admin should be able to list limits of other users. Cinder added such functionality in microversion 3.39. Closes-bug: #2071367 Change-Id: Ie2b33bef15d40a72b9aac4ec5bfe9eed93b0e864 Co-authored-by: Stephen Finucane --- openstack/block_storage/v3/_proxy.py | 6 +++++- openstack/block_storage/v3/limits.py | 6 ++++++ openstack/tests/unit/block_storage/v3/test_proxy.py | 9 +++++---- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/openstack/block_storage/v3/_proxy.py b/openstack/block_storage/v3/_proxy.py index ddea58037..fe36b974d 100644 --- a/openstack/block_storage/v3/_proxy.py +++ b/openstack/block_storage/v3/_proxy.py @@ -1291,7 +1291,11 @@ class Proxy(_base_proxy.BaseBlockStorageProxy): params = {} if project: params['project_id'] = resource.Resource._get_id(project) - return self._get(_limits.Limits, requires_id=False, **params) + + # we don't use Proxy._get since that doesn't allow passing arbitrary + # query string parameters + res = self._get_resource(_limits.Limits, None) + return res.fetch(self, requires_id=False, **params) # ====== CAPABILITIES ====== def get_capabilities(self, host): diff --git a/openstack/block_storage/v3/limits.py b/openstack/block_storage/v3/limits.py index fe726a6e6..71717b4f3 100644 --- a/openstack/block_storage/v3/limits.py +++ b/openstack/block_storage/v3/limits.py @@ -71,6 +71,12 @@ class Limits(resource.Resource): resource_key = "limits" base_path = "/limits" + _max_microversion = "3.39" + + _query_mapping = resource.QueryParameters( + "project_id", + ) + # capabilities allow_fetch = True diff --git a/openstack/tests/unit/block_storage/v3/test_proxy.py b/openstack/tests/unit/block_storage/v3/test_proxy.py index 0a64a0dd5..5254a71c1 100644 --- a/openstack/tests/unit/block_storage/v3/test_proxy.py +++ b/openstack/tests/unit/block_storage/v3/test_proxy.py @@ -19,7 +19,6 @@ from openstack.block_storage.v3 import extension from openstack.block_storage.v3 import group from openstack.block_storage.v3 import group_snapshot from openstack.block_storage.v3 import group_type -from openstack.block_storage.v3 import limits from openstack.block_storage.v3 import quota_class_set from openstack.block_storage.v3 import quota_set from openstack.block_storage.v3 import resource_filter @@ -136,11 +135,13 @@ class TestPools(TestVolumeProxy): class TestLimit(TestVolumeProxy): def test_limits_get(self): - self.verify_get( + self._verify( + 'openstack.resource.Resource.fetch', self.proxy.get_limits, - limits.Limits, method_args=[], - expected_kwargs={'requires_id': False}, + method_kwargs={'project': 'foo'}, + expected_args=[self.proxy], + expected_kwargs={'requires_id': False, 'project_id': 'foo'}, )