diff options
| author | Zuul <zuul@review.opendev.org> | 2020-07-06 20:50:24 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2020-07-06 20:50:24 +0000 |
| commit | d0741d78533ae5f538f3f0be0a8a0035581745cc (patch) | |
| tree | 6256325fd9c03b7769d39aaff3e498487c5b5f09 /openstackclient | |
| parent | 1d8781a3690aec93570d0f0bb3bfe43905f49196 (diff) | |
| parent | b328cf74df7f94a20de85b3c0992dcb65e818458 (diff) | |
| download | python-openstackclient-d0741d78533ae5f538f3f0be0a8a0035581745cc.tar.gz | |
Merge "Add '--force; parameter to 'openstack quota set'"
Diffstat (limited to 'openstackclient')
| -rw-r--r-- | openstackclient/common/quota.py | 8 | ||||
| -rw-r--r-- | openstackclient/tests/functional/common/test_quota.py | 44 | ||||
| -rw-r--r-- | openstackclient/tests/unit/common/test_quota.py | 50 |
3 files changed, 102 insertions, 0 deletions
diff --git a/openstackclient/common/quota.py b/openstackclient/common/quota.py index 71b8ea61..11de986b 100644 --- a/openstackclient/common/quota.py +++ b/openstackclient/common/quota.py @@ -525,6 +525,11 @@ class SetQuota(common.NetDetectionMixin, command.Command): metavar='<volume-type>', help=_('Set quotas for a specific <volume-type>'), ) + parser.add_argument( + '--force', + action='store_true', + help=_('Force quota update (only supported by compute)') + ) return parser def take_action(self, parsed_args): @@ -538,6 +543,9 @@ class SetQuota(common.NetDetectionMixin, command.Command): if value is not None: compute_kwargs[k] = value + if parsed_args.force: + compute_kwargs['force'] = True + volume_kwargs = {} for k, v in VOLUME_QUOTAS.items(): value = getattr(parsed_args, k, None) diff --git a/openstackclient/tests/functional/common/test_quota.py b/openstackclient/tests/functional/common/test_quota.py index 9c057460..4c2fc0e3 100644 --- a/openstackclient/tests/functional/common/test_quota.py +++ b/openstackclient/tests/functional/common/test_quota.py @@ -165,3 +165,47 @@ class QuotaTests(base.TestCase): # returned attributes self.assertTrue(cmd_output["key-pairs"] >= 0) self.assertTrue(cmd_output["snapshots"] >= 0) + + def test_quota_set_force(self): + """Test to set instance value by force """ + json_output = json.loads(self.openstack( + 'quota list -f json --detail --compute' + )) + in_use = limit = None + for j in json_output: + if j["Resource"] == "instances": + in_use = j["In Use"] + limit = j["Limit"] + + # Reduce count of in_use + in_use = in_use - 1 + # cannot have negative instances limit + if in_use < 0: + in_use = 0 + + # set the limit by force now + self.openstack( + 'quota set ' + self.PROJECT_NAME + + '--instances ' + str(in_use) + ' --force' + ) + cmd_output = json.loads(self.openstack( + 'quota show -f json ' + self.PROJECT_NAME + )) + self.assertIsNotNone(cmd_output) + self.assertEqual( + in_use, + cmd_output["instances"] + ) + + # Set instances limit to original limit now + self.openstack( + 'quota set ' + self.PROJECT_NAME + '--instances ' + str(limit) + ) + cmd_output = json.loads(self.openstack( + 'quota show -f json ' + self.PROJECT_NAME + )) + self.assertIsNotNone(cmd_output) + self.assertEqual( + limit, + cmd_output["instances"] + ) diff --git a/openstackclient/tests/unit/common/test_quota.py b/openstackclient/tests/unit/common/test_quota.py index 3fff062b..6504c5b0 100644 --- a/openstackclient/tests/unit/common/test_quota.py +++ b/openstackclient/tests/unit/common/test_quota.py @@ -900,6 +900,56 @@ class TestQuotaSet(TestQuota): self.assertNotCalled(self.network_mock.update_quota) self.assertIsNone(result) + def test_quota_set_with_force(self): + arglist = [ + '--cores', str(compute_fakes.core_num), + '--ram', str(compute_fakes.ram_num), + '--instances', str(compute_fakes.instance_num), + '--volumes', str(volume_fakes.QUOTA['volumes']), + '--subnets', str(network_fakes.QUOTA['subnet']), + '--force', + self.projects[0].name, + ] + verifylist = [ + ('cores', compute_fakes.core_num), + ('ram', compute_fakes.ram_num), + ('instances', compute_fakes.instance_num), + ('volumes', volume_fakes.QUOTA['volumes']), + ('subnet', network_fakes.QUOTA['subnet']), + ('force', True), + ('project', self.projects[0].name), + ] + self.app.client_manager.network_endpoint_enabled = True + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + + kwargs_compute = { + 'cores': compute_fakes.core_num, + 'ram': compute_fakes.ram_num, + 'instances': compute_fakes.instance_num, + 'force': True, + } + kwargs_volume = { + 'volumes': volume_fakes.QUOTA['volumes'], + } + kwargs_network = { + 'subnet': network_fakes.QUOTA['subnet'], + } + self.compute_quotas_mock.update.assert_called_once_with( + self.projects[0].id, + **kwargs_compute + ) + self.volume_quotas_mock.update.assert_called_once_with( + self.projects[0].id, + **kwargs_volume + ) + self.network_mock.update_quota.assert_called_once_with( + self.projects[0].id, + **kwargs_network + ) + self.assertIsNone(result) + class TestQuotaShow(TestQuota): |
