Skip to content

Commit e000fd5

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Add network update quota "limit_check" parameter"
2 parents 746b913 + bef7039 commit e000fd5

File tree

4 files changed

+82
-0
lines changed

4 files changed

+82
-0
lines changed

openstackclient/common/quota.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,12 @@ def get_parser(self, prog_name):
535535
action='store_true',
536536
help=_('Force quota update (only supported by compute)')
537537
)
538+
parser.add_argument(
539+
'--check-limit',
540+
action='store_true',
541+
help=_('Check quota limit when updating (only supported by '
542+
'network)')
543+
)
538544
return parser
539545

540546
def take_action(self, parsed_args):
@@ -561,6 +567,9 @@ def take_action(self, parsed_args):
561567
volume_kwargs[k] = value
562568

563569
network_kwargs = {}
570+
if parsed_args.check_limit:
571+
network_kwargs['check_limit'] = True
572+
564573
if self.app.client_manager.is_network_endpoint_enabled():
565574
for k, v in NETWORK_QUOTAS.items():
566575
value = getattr(parsed_args, k, None)

openstackclient/tests/functional/common/test_quota.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
# under the License.
1212

1313
import json
14+
import uuid
15+
16+
from tempest.lib import exceptions
1417

1518
from openstackclient.tests.functional import base
1619

@@ -165,3 +168,25 @@ def test_quota_set_class(self):
165168
# returned attributes
166169
self.assertTrue(cmd_output["key-pairs"] >= 0)
167170
self.assertTrue(cmd_output["snapshots"] >= 0)
171+
172+
def test_quota_network_set_with_check_limit(self):
173+
if not self.haz_network:
174+
self.skipTest('No Network service present')
175+
if not self.is_extension_enabled('quota-check-limit'):
176+
self.skipTest('No "quota-check-limit" extension present')
177+
178+
self.openstack('quota set --networks 40 ' + self.PROJECT_NAME)
179+
cmd_output = json.loads(self.openstack(
180+
'quota list -f json --network'
181+
))
182+
self.assertIsNotNone(cmd_output)
183+
self.assertEqual(40, cmd_output[0]['Networks'])
184+
185+
# That will ensure we have at least two networks in the system.
186+
for _ in range(2):
187+
self.openstack('network create --project %s %s' %
188+
(self.PROJECT_NAME, uuid.uuid4().hex))
189+
190+
self.assertRaises(exceptions.CommandFailed, self.openstack,
191+
'quota set --networks 1 --check-limit ' +
192+
self.PROJECT_NAME)

openstackclient/tests/unit/common/test_quota.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -950,6 +950,49 @@ def test_quota_set_with_force(self):
950950
)
951951
self.assertIsNone(result)
952952

953+
def test_quota_set_with_check_limit(self):
954+
arglist = [
955+
'--subnets', str(network_fakes.QUOTA['subnet']),
956+
'--volumes', str(volume_fakes.QUOTA['volumes']),
957+
'--cores', str(compute_fakes.core_num),
958+
'--check-limit',
959+
self.projects[0].name,
960+
]
961+
verifylist = [
962+
('subnet', network_fakes.QUOTA['subnet']),
963+
('volumes', volume_fakes.QUOTA['volumes']),
964+
('cores', compute_fakes.core_num),
965+
('check_limit', True),
966+
('project', self.projects[0].name),
967+
]
968+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
969+
970+
result = self.cmd.take_action(parsed_args)
971+
972+
kwargs_compute = {
973+
'cores': compute_fakes.core_num,
974+
}
975+
kwargs_volume = {
976+
'volumes': volume_fakes.QUOTA['volumes'],
977+
}
978+
kwargs_network = {
979+
'subnet': network_fakes.QUOTA['subnet'],
980+
'check_limit': True,
981+
}
982+
self.compute_quotas_mock.update.assert_called_once_with(
983+
self.projects[0].id,
984+
**kwargs_compute
985+
)
986+
self.volume_quotas_mock.update.assert_called_once_with(
987+
self.projects[0].id,
988+
**kwargs_volume
989+
)
990+
self.network_mock.update_quota.assert_called_once_with(
991+
self.projects[0].id,
992+
**kwargs_network
993+
)
994+
self.assertIsNone(result)
995+
953996

954997
class TestQuotaShow(TestQuota):
955998

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- Add ``--check-limit`` option to the ``openstack quota set`` command (only
4+
for network commands). The network quota engine will check the resource
5+
usage before setting the new quota limit.

0 commit comments

Comments
 (0)