From 12d50c7f5bafa113e70569c805d844b449976f36 Mon Sep 17 00:00:00 2001 From: hamza alqtaishat Date: Thu, 7 May 2020 17:31:18 +0000 Subject: [PATCH] Adding the option to set the zone quota to unlimited by assigning negative value for the resource like -1 Change-Id: Iaeca2be8b38075e3e7e8f79621b4b41cbe9934f7 Closes-Bug: #1876198 --- designate/quota/base.py | 4 +- designate/tests/test_quota/test_quota.py | 42 +++++++++++++++++++ doc/source/user/rest/admin/quotas.rst | 1 + ...ones_unlimited_quota-81a2dfba1f532c9c.yaml | 5 +++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 releasenotes/notes/zones_unlimited_quota-81a2dfba1f532c9c.yaml diff --git a/designate/quota/base.py b/designate/quota/base.py index b33b192f3..45d4617a8 100644 --- a/designate/quota/base.py +++ b/designate/quota/base.py @@ -33,7 +33,9 @@ class Quota(DriverPlugin): for resource, value in values.items(): if resource in quotas: - if value >= quotas[resource]: + # Setting the resource quota to a negative value will make + # the resource unlimited + if quotas[resource] >= 0 and value >= quotas[resource]: raise exceptions.OverQuota() else: raise exceptions.QuotaResourceUnknown("%s is not a valid quota" diff --git a/designate/tests/test_quota/test_quota.py b/designate/tests/test_quota/test_quota.py index 9348dec78..99f7d423e 100644 --- a/designate/tests/test_quota/test_quota.py +++ b/designate/tests/test_quota/test_quota.py @@ -13,6 +13,8 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. +import mock + from testscenarios import load_tests_apply_scenarios as load_tests # noqa import testtools from oslo_config import cfg @@ -88,6 +90,46 @@ class QuotaTestCase(tests.TestCase): 'tenant_id', zone_records=cfg.CONF.quota_zone_records) + def test_limit_check_unlimited(self): + context = self.get_admin_context() + self.quota.get_quotas = mock.Mock() + ret = { + 'zones': -1, + 'zone_recordsets': -1, + 'zone_records': -1, + 'recordset_records': -1, + 'api_export_size': -1, + } + self.quota.get_quotas.return_value = ret + self.quota.limit_check(context, 'tenant_id', zones=99999) + self.quota.limit_check(context, 'tenant_id', zone_recordsets=99999) + self.quota.limit_check(context, 'tenant_id', zone_records=99999) + self.quota.limit_check(context, 'tenant_id', recordset_records=99999) + self.quota.limit_check(context, 'tenant_id', api_export_size=99999) + + def test_limit_check_zero(self): + context = self.get_admin_context() + self.quota.get_quotas = mock.Mock() + ret = { + 'zones': 0, + 'zone_recordsets': 0, + 'zone_records': 0, + 'recordset_records': 0, + 'api_export_size': 0, + } + self.quota.get_quotas.return_value = ret + with testtools.ExpectedException(exceptions.OverQuota): + self.quota.limit_check(context, 'tenant_id', zones=0) + with testtools.ExpectedException(exceptions.OverQuota): + self.quota.limit_check(context, 'tenant_id', zone_recordsets=0) + with testtools.ExpectedException(exceptions.OverQuota): + self.quota.limit_check(context, 'tenant_id', zone_records=0) + with testtools.ExpectedException(exceptions.OverQuota): + self.quota.limit_check(context, 'tenant_id', + recordset_records=0) + with testtools.ExpectedException(exceptions.OverQuota): + self.quota.limit_check(context, 'tenant_id', api_export_size=0) + def test_limit_check_over(self): context = self.get_admin_context() diff --git a/doc/source/user/rest/admin/quotas.rst b/doc/source/user/rest/admin/quotas.rst index fe21e20db..52d72a0bf 100644 --- a/doc/source/user/rest/admin/quotas.rst +++ b/doc/source/user/rest/admin/quotas.rst @@ -84,6 +84,7 @@ Update Quotas .. http:patch:: /quotas/TENANT_ID Updates the specified quota(s) to their new values. + Negative quota values mean unlimited. **Example request:** diff --git a/releasenotes/notes/zones_unlimited_quota-81a2dfba1f532c9c.yaml b/releasenotes/notes/zones_unlimited_quota-81a2dfba1f532c9c.yaml new file mode 100644 index 000000000..39533fae5 --- /dev/null +++ b/releasenotes/notes/zones_unlimited_quota-81a2dfba1f532c9c.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Allow the user to set resource quota to unlimited by assigning + a negative value to the resource quota value.