Merge "Add network update quota "limit_check" parameter"
This commit is contained in:
commit
e000fd5f0d
@ -535,6 +535,12 @@ class SetQuota(common.NetDetectionMixin, command.Command):
|
|||||||
action='store_true',
|
action='store_true',
|
||||||
help=_('Force quota update (only supported by compute)')
|
help=_('Force quota update (only supported by compute)')
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--check-limit',
|
||||||
|
action='store_true',
|
||||||
|
help=_('Check quota limit when updating (only supported by '
|
||||||
|
'network)')
|
||||||
|
)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
@ -561,6 +567,9 @@ class SetQuota(common.NetDetectionMixin, command.Command):
|
|||||||
volume_kwargs[k] = value
|
volume_kwargs[k] = value
|
||||||
|
|
||||||
network_kwargs = {}
|
network_kwargs = {}
|
||||||
|
if parsed_args.check_limit:
|
||||||
|
network_kwargs['check_limit'] = True
|
||||||
|
|
||||||
if self.app.client_manager.is_network_endpoint_enabled():
|
if self.app.client_manager.is_network_endpoint_enabled():
|
||||||
for k, v in NETWORK_QUOTAS.items():
|
for k, v in NETWORK_QUOTAS.items():
|
||||||
value = getattr(parsed_args, k, None)
|
value = getattr(parsed_args, k, None)
|
||||||
|
@ -11,6 +11,9 @@
|
|||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
from tempest.lib import exceptions
|
||||||
|
|
||||||
from openstackclient.tests.functional import base
|
from openstackclient.tests.functional import base
|
||||||
|
|
||||||
@ -165,3 +168,25 @@ class QuotaTests(base.TestCase):
|
|||||||
# returned attributes
|
# returned attributes
|
||||||
self.assertTrue(cmd_output["key-pairs"] >= 0)
|
self.assertTrue(cmd_output["key-pairs"] >= 0)
|
||||||
self.assertTrue(cmd_output["snapshots"] >= 0)
|
self.assertTrue(cmd_output["snapshots"] >= 0)
|
||||||
|
|
||||||
|
def test_quota_network_set_with_check_limit(self):
|
||||||
|
if not self.haz_network:
|
||||||
|
self.skipTest('No Network service present')
|
||||||
|
if not self.is_extension_enabled('quota-check-limit'):
|
||||||
|
self.skipTest('No "quota-check-limit" extension present')
|
||||||
|
|
||||||
|
self.openstack('quota set --networks 40 ' + self.PROJECT_NAME)
|
||||||
|
cmd_output = json.loads(self.openstack(
|
||||||
|
'quota list -f json --network'
|
||||||
|
))
|
||||||
|
self.assertIsNotNone(cmd_output)
|
||||||
|
self.assertEqual(40, cmd_output[0]['Networks'])
|
||||||
|
|
||||||
|
# That will ensure we have at least two networks in the system.
|
||||||
|
for _ in range(2):
|
||||||
|
self.openstack('network create --project %s %s' %
|
||||||
|
(self.PROJECT_NAME, uuid.uuid4().hex))
|
||||||
|
|
||||||
|
self.assertRaises(exceptions.CommandFailed, self.openstack,
|
||||||
|
'quota set --networks 1 --check-limit ' +
|
||||||
|
self.PROJECT_NAME)
|
||||||
|
@ -950,6 +950,49 @@ class TestQuotaSet(TestQuota):
|
|||||||
)
|
)
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
def test_quota_set_with_check_limit(self):
|
||||||
|
arglist = [
|
||||||
|
'--subnets', str(network_fakes.QUOTA['subnet']),
|
||||||
|
'--volumes', str(volume_fakes.QUOTA['volumes']),
|
||||||
|
'--cores', str(compute_fakes.core_num),
|
||||||
|
'--check-limit',
|
||||||
|
self.projects[0].name,
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('subnet', network_fakes.QUOTA['subnet']),
|
||||||
|
('volumes', volume_fakes.QUOTA['volumes']),
|
||||||
|
('cores', compute_fakes.core_num),
|
||||||
|
('check_limit', True),
|
||||||
|
('project', self.projects[0].name),
|
||||||
|
]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
kwargs_compute = {
|
||||||
|
'cores': compute_fakes.core_num,
|
||||||
|
}
|
||||||
|
kwargs_volume = {
|
||||||
|
'volumes': volume_fakes.QUOTA['volumes'],
|
||||||
|
}
|
||||||
|
kwargs_network = {
|
||||||
|
'subnet': network_fakes.QUOTA['subnet'],
|
||||||
|
'check_limit': True,
|
||||||
|
}
|
||||||
|
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):
|
class TestQuotaShow(TestQuota):
|
||||||
|
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- Add ``--check-limit`` option to the ``openstack quota set`` command (only
|
||||||
|
for network commands). The network quota engine will check the resource
|
||||||
|
usage before setting the new quota limit.
|
Loading…
x
Reference in New Issue
Block a user