From 4ccb70a90f8b6b8dc63b8f156f7658ead5308fcd Mon Sep 17 00:00:00 2001 From: Duncan Thomas Date: Sun, 30 Nov 2014 18:47:31 +0200 Subject: [PATCH] Support Volume Backup Quota Python-cinderclient support update volume backup quota. Cinder server side commit for this feature was: https://review.openstack.org/#/c/111460/ blueprint volume-backup-quota Change-Id: I1fceeb9fc0eb92370e249c46749a61e4b11420b0 --- cinderclient/tests/v1/fakes.py | 20 +++++++++++++++----- cinderclient/tests/v1/test_quota_classes.py | 19 ++++++++++++++++++- cinderclient/tests/v1/test_quotas.py | 5 +++++ cinderclient/tests/v2/fakes.py | 20 +++++++++++++++----- cinderclient/tests/v2/test_quota_classes.py | 19 ++++++++++++++++++- cinderclient/tests/v2/test_quotas.py | 15 +++++++++++++++ cinderclient/v1/shell.py | 11 ++++++++++- cinderclient/v2/shell.py | 11 ++++++++++- 8 files changed, 106 insertions(+), 14 deletions(-) diff --git a/cinderclient/tests/v1/fakes.py b/cinderclient/tests/v1/fakes.py index f191b4a62..34d5e72fc 100644 --- a/cinderclient/tests/v1/fakes.py +++ b/cinderclient/tests/v1/fakes.py @@ -385,7 +385,9 @@ class FakeHTTPClient(base_client.HTTPClient): 'metadata_items': [], 'volumes': 1, 'snapshots': 1, - 'gigabytes': 1}}) + 'gigabytes': 1, + 'backups': 1, + 'backup_gigabytes': 1}}) def get_os_quota_sets_test_defaults(self): return (200, {}, {'quota_set': { @@ -393,7 +395,9 @@ class FakeHTTPClient(base_client.HTTPClient): 'metadata_items': [], 'volumes': 1, 'snapshots': 1, - 'gigabytes': 1}}) + 'gigabytes': 1, + 'backups': 1, + 'backup_gigabytes': 1}}) def put_os_quota_sets_test(self, body, **kw): assert list(body) == ['quota_set'] @@ -404,7 +408,9 @@ class FakeHTTPClient(base_client.HTTPClient): 'metadata_items': [], 'volumes': 2, 'snapshots': 2, - 'gigabytes': 1}}) + 'gigabytes': 1, + 'backups': 1, + 'backup_gigabytes': 1}}) def delete_os_quota_sets_1234(self, **kw): return (200, {}, {}) @@ -422,7 +428,9 @@ class FakeHTTPClient(base_client.HTTPClient): 'metadata_items': [], 'volumes': 1, 'snapshots': 1, - 'gigabytes': 1}}) + 'gigabytes': 1, + 'backups': 1, + 'backup_gigabytes': 1}}) def put_os_quota_class_sets_test(self, body, **kw): assert list(body) == ['quota_class_set'] @@ -433,7 +441,9 @@ class FakeHTTPClient(base_client.HTTPClient): 'metadata_items': [], 'volumes': 2, 'snapshots': 2, - 'gigabytes': 1}}) + 'gigabytes': 1, + 'backups': 1, + 'backup_gigabytes': 1}}) # # VolumeTypes diff --git a/cinderclient/tests/v1/test_quota_classes.py b/cinderclient/tests/v1/test_quota_classes.py index 0cb3122b0..e0d5db928 100644 --- a/cinderclient/tests/v1/test_quota_classes.py +++ b/cinderclient/tests/v1/test_quota_classes.py @@ -29,14 +29,31 @@ class QuotaClassSetsTest(utils.TestCase): def test_update_quota(self): q = cs.quota_classes.get('test') - q.update(volumes=2, snapshots=2) + q.update(volumes=2, snapshots=2, gigabytes=2000, + backups=2, backup_gigabytes=2000) cs.assert_called('PUT', '/os-quota-class-sets/test') def test_refresh_quota(self): q = cs.quota_classes.get('test') q2 = cs.quota_classes.get('test') self.assertEqual(q.volumes, q2.volumes) + self.assertEqual(q.snapshots, q2.snapshots) + self.assertEqual(q.gigabytes, q2.gigabytes) + self.assertEqual(q.backups, q2.backups) + self.assertEqual(q.backup_gigabytes, q2.backup_gigabytes) q2.volumes = 0 self.assertNotEqual(q.volumes, q2.volumes) + q2.snapshots = 0 + self.assertNotEqual(q.snapshots, q2.snapshots) + q2.gigabytes = 0 + self.assertNotEqual(q.gigabytes, q2.gigabytes) + q2.backups = 0 + self.assertNotEqual(q.backups, q2.backups) + q2.backup_gigabytes = 0 + self.assertNotEqual(q.backup_gigabytes, q2.backup_gigabytes) q2.get() self.assertEqual(q.volumes, q2.volumes) + self.assertEqual(q.snapshots, q2.snapshots) + self.assertEqual(q.gigabytes, q2.gigabytes) + self.assertEqual(q.backups, q2.backups) + self.assertEqual(q.backup_gigabytes, q2.backup_gigabytes) diff --git a/cinderclient/tests/v1/test_quotas.py b/cinderclient/tests/v1/test_quotas.py index beb5b5dcb..b18046ff2 100644 --- a/cinderclient/tests/v1/test_quotas.py +++ b/cinderclient/tests/v1/test_quotas.py @@ -36,6 +36,7 @@ class QuotaSetsTest(utils.TestCase): q = cs.quotas.get('test') q.update(volumes=2) q.update(snapshots=2) + q.update(backups=2) cs.assert_called('PUT', '/os-quota-sets/test') def test_refresh_quota(self): @@ -43,13 +44,17 @@ class QuotaSetsTest(utils.TestCase): q2 = cs.quotas.get('test') self.assertEqual(q.volumes, q2.volumes) self.assertEqual(q.snapshots, q2.snapshots) + self.assertEqual(q.backups, q2.backups) q2.volumes = 0 self.assertNotEqual(q.volumes, q2.volumes) q2.snapshots = 0 self.assertNotEqual(q.snapshots, q2.snapshots) + q2.backups = 0 + self.assertNotEqual(q.backups, q2.backups) q2.get() self.assertEqual(q.volumes, q2.volumes) self.assertEqual(q.snapshots, q2.snapshots) + self.assertEqual(q.backups, q2.backups) def test_delete_quota(self): tenant_id = 'test' diff --git a/cinderclient/tests/v2/fakes.py b/cinderclient/tests/v2/fakes.py index 1ece47919..8962f9354 100644 --- a/cinderclient/tests/v2/fakes.py +++ b/cinderclient/tests/v2/fakes.py @@ -474,7 +474,9 @@ class FakeHTTPClient(base_client.HTTPClient): 'metadata_items': [], 'volumes': 1, 'snapshots': 1, - 'gigabytes': 1}}) + 'gigabytes': 1, + 'backups': 1, + 'backup_gigabytes': 1}}) def get_os_quota_sets_test_defaults(self): return (200, {}, {'quota_set': { @@ -482,7 +484,9 @@ class FakeHTTPClient(base_client.HTTPClient): 'metadata_items': [], 'volumes': 1, 'snapshots': 1, - 'gigabytes': 1}}) + 'gigabytes': 1, + 'backups': 1, + 'backup_gigabytes': 1}}) def put_os_quota_sets_test(self, body, **kw): assert list(body) == ['quota_set'] @@ -493,7 +497,9 @@ class FakeHTTPClient(base_client.HTTPClient): 'metadata_items': [], 'volumes': 2, 'snapshots': 2, - 'gigabytes': 1}}) + 'gigabytes': 1, + 'backups': 1, + 'backup_gigabytes': 1}}) def delete_os_quota_sets_1234(self, **kw): return (200, {}, {}) @@ -511,7 +517,9 @@ class FakeHTTPClient(base_client.HTTPClient): 'metadata_items': [], 'volumes': 1, 'snapshots': 1, - 'gigabytes': 1}}) + 'gigabytes': 1, + 'backups': 1, + 'backup_gigabytes': 1}}) def put_os_quota_class_sets_test(self, body, **kw): assert list(body) == ['quota_class_set'] @@ -522,7 +530,9 @@ class FakeHTTPClient(base_client.HTTPClient): 'metadata_items': [], 'volumes': 2, 'snapshots': 2, - 'gigabytes': 1}}) + 'gigabytes': 1, + 'backups': 1, + 'backup_gigabytes': 1}}) # # VolumeTypes diff --git a/cinderclient/tests/v2/test_quota_classes.py b/cinderclient/tests/v2/test_quota_classes.py index 0fee1e8d7..b2354d72a 100644 --- a/cinderclient/tests/v2/test_quota_classes.py +++ b/cinderclient/tests/v2/test_quota_classes.py @@ -29,14 +29,31 @@ class QuotaClassSetsTest(utils.TestCase): def test_update_quota(self): q = cs.quota_classes.get('test') - q.update(volumes=2, snapshots=2) + q.update(volumes=2, snapshots=2, gigabytes=2000, + backups=2, backup_gigabytes=2000) cs.assert_called('PUT', '/os-quota-class-sets/test') def test_refresh_quota(self): q = cs.quota_classes.get('test') q2 = cs.quota_classes.get('test') self.assertEqual(q.volumes, q2.volumes) + self.assertEqual(q.snapshots, q2.snapshots) + self.assertEqual(q.gigabytes, q2.gigabytes) + self.assertEqual(q.backups, q2.backups) + self.assertEqual(q.backup_gigabytes, q2.backup_gigabytes) q2.volumes = 0 self.assertNotEqual(q.volumes, q2.volumes) + q2.snapshots = 0 + self.assertNotEqual(q.snapshots, q2.snapshots) + q2.gigabytes = 0 + self.assertNotEqual(q.gigabytes, q2.gigabytes) + q2.backups = 0 + self.assertNotEqual(q.backups, q2.backups) + q2.backup_gigabytes = 0 + self.assertNotEqual(q.backup_gigabytes, q2.backup_gigabytes) q2.get() self.assertEqual(q.volumes, q2.volumes) + self.assertEqual(q.snapshots, q2.snapshots) + self.assertEqual(q.gigabytes, q2.gigabytes) + self.assertEqual(q.backups, q2.backups) + self.assertEqual(q.backup_gigabytes, q2.backup_gigabytes) diff --git a/cinderclient/tests/v2/test_quotas.py b/cinderclient/tests/v2/test_quotas.py index e4a723aef..3a12eb78d 100644 --- a/cinderclient/tests/v2/test_quotas.py +++ b/cinderclient/tests/v2/test_quotas.py @@ -36,6 +36,9 @@ class QuotaSetsTest(utils.TestCase): q = cs.quotas.get('test') q.update(volumes=2) q.update(snapshots=2) + q.update(gigabytes=2000) + q.update(backups=2) + q.update(backup_gigabytes=2000) cs.assert_called('PUT', '/os-quota-sets/test') def test_refresh_quota(self): @@ -43,13 +46,25 @@ class QuotaSetsTest(utils.TestCase): q2 = cs.quotas.get('test') self.assertEqual(q.volumes, q2.volumes) self.assertEqual(q.snapshots, q2.snapshots) + self.assertEqual(q.gigabytes, q2.gigabytes) + self.assertEqual(q.backups, q2.backups) + self.assertEqual(q.backup_gigabytes, q2.backup_gigabytes) q2.volumes = 0 self.assertNotEqual(q.volumes, q2.volumes) q2.snapshots = 0 self.assertNotEqual(q.snapshots, q2.snapshots) + q2.gigabytes = 0 + self.assertNotEqual(q.gigabytes, q2.gigabytes) + q2.backups = 0 + self.assertNotEqual(q.backups, q2.backups) + q2.backup_gigabytes = 0 + self.assertNotEqual(q.backup_gigabytes, q2.backup_gigabytes) q2.get() self.assertEqual(q.volumes, q2.volumes) self.assertEqual(q.snapshots, q2.snapshots) + self.assertEqual(q.gigabytes, q2.gigabytes) + self.assertEqual(q.backups, q2.backups) + self.assertEqual(q.backup_gigabytes, q2.backup_gigabytes) def test_delete_quota(self): tenant_id = 'test' diff --git a/cinderclient/v1/shell.py b/cinderclient/v1/shell.py index 072bee850..20e52c69c 100644 --- a/cinderclient/v1/shell.py +++ b/cinderclient/v1/shell.py @@ -650,7 +650,8 @@ def do_credentials(cs, args): utils.print_dict(catalog['token'], "Token") -_quota_resources = ['volumes', 'snapshots', 'gigabytes'] +_quota_resources = ['volumes', 'snapshots', 'gigabytes', + 'backups', 'backup_gigabytes'] _quota_infos = ['Type', 'In_use', 'Reserved', 'Limit'] @@ -737,6 +738,14 @@ def do_quota_defaults(cs, args): metavar='', type=int, default=None, help='The new "gigabytes" quota value. Default=None.') +@utils.arg('--backups', + metavar='', + type=int, default=None, + help='The new "backups" quota value. Default=None.') +@utils.arg('--backup-gigabytes', + metavar='', + type=int, default=None, + help='The new "backup_gigabytes" quota value. Default=None.') @utils.arg('--volume-type', metavar='', default=None, diff --git a/cinderclient/v2/shell.py b/cinderclient/v2/shell.py index f452c1148..7cdf7b285 100644 --- a/cinderclient/v2/shell.py +++ b/cinderclient/v2/shell.py @@ -764,7 +764,8 @@ def do_credentials(cs, args): utils.print_dict(catalog['token'], "Token") -_quota_resources = ['volumes', 'snapshots', 'gigabytes'] +_quota_resources = ['volumes', 'snapshots', 'gigabytes', + 'backups', 'backup_gigabytes'] _quota_infos = ['Type', 'In_use', 'Reserved', 'Limit'] @@ -854,6 +855,14 @@ def do_quota_defaults(cs, args): metavar='', type=int, default=None, help='The new "gigabytes" quota value. Default=None.') +@utils.arg('--backups', + metavar='', + type=int, default=None, + help='The new "backups" quota value. Default=None.') +@utils.arg('--backup-gigabytes', + metavar='', + type=int, default=None, + help='The new "backup_gigabytes" quota value. Default=None.') @utils.arg('--volume-type', metavar='', default=None,