summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2020-05-15 18:28:22 +0000
committerGerrit Code Review <review@openstack.org>2020-05-15 18:28:22 +0000
commit9a52ea1cdfad3d208b97cc1a3a08df558bae8d41 (patch)
treebf1b1bae5c9683020b2da304c9694a0edb32d619
parentd6a020a50b5b80b39a0337ce49ba499a196c9c5f (diff)
parent12d50c7f5bafa113e70569c805d844b449976f36 (diff)
downloaddesignate-9a52ea1cdfad3d208b97cc1a3a08df558bae8d41.tar.gz
Merge "Adding the option to set the zone quota to unlimited"
-rw-r--r--designate/quota/base.py4
-rw-r--r--designate/tests/test_quota/test_quota.py42
-rw-r--r--doc/source/user/rest/admin/quotas.rst1
-rw-r--r--releasenotes/notes/zones_unlimited_quota-81a2dfba1f532c9c.yaml5
4 files changed, 51 insertions, 1 deletions
diff --git a/designate/quota/base.py b/designate/quota/base.py
index b33b192f..45d4617a 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 9348dec7..99f7d423 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 fe21e20d..52d72a0b 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 00000000..39533fae
--- /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.