diff options
Diffstat (limited to 'openstackclient')
| -rw-r--r-- | openstackclient/common/quota.py | 5 | ||||
| -rw-r--r-- | openstackclient/compute/v2/server.py | 11 | ||||
| -rw-r--r-- | openstackclient/tests/functional/common/test_quota.py | 47 | ||||
| -rw-r--r-- | openstackclient/tests/unit/common/test_quota.py | 1 | ||||
| -rw-r--r-- | openstackclient/tests/unit/compute/v2/test_server.py | 2 |
5 files changed, 65 insertions, 1 deletions
diff --git a/openstackclient/common/quota.py b/openstackclient/common/quota.py index 677cba03..e096f186 100644 --- a/openstackclient/common/quota.py +++ b/openstackclient/common/quota.py @@ -533,7 +533,8 @@ class SetQuota(common.NetDetectionMixin, command.Command): parser.add_argument( '--force', action='store_true', - help=_('Force quota update (only supported by compute)') + help=_('Force quota update (only supported by compute and ' + 'network)') ) parser.add_argument( '--check-limit', @@ -569,6 +570,8 @@ class SetQuota(common.NetDetectionMixin, command.Command): network_kwargs = {} if parsed_args.check_limit: network_kwargs['check_limit'] = True + if parsed_args.force: + network_kwargs['force'] = True if self.app.client_manager.is_network_endpoint_enabled(): for k, v in NETWORK_QUOTAS.items(): diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py index 47c9c826..69aaa3c5 100644 --- a/openstackclient/compute/v2/server.py +++ b/openstackclient/compute/v2/server.py @@ -2455,6 +2455,9 @@ class ListServer(command.Lister): if c in ('Created At', 'created_at'): columns += ('created',) column_headers += ('Created At',) + if c in ('Security Groups', 'security_groups'): + columns += ('security_groups_name',) + column_headers += ('Security Groups',) # convert back to tuple column_headers = tuple(column_headers) @@ -2559,6 +2562,13 @@ class ListServer(command.Lister): else: s.flavor_name = s.flavor['original_name'] + # Add a list with security group name as attribute + for s in data: + if hasattr(s, 'security_groups'): + s.security_groups_name = [x["name"] for x in s.security_groups] + else: + s.security_groups_name = [] + table = ( column_headers, ( @@ -2574,6 +2584,7 @@ class ListServer(command.Lister): 'OS-EXT-STS:power_state': PowerStateColumn, 'networks': format_columns.DictListColumn, 'metadata': format_columns.DictColumn, + 'security_groups_name': format_columns.ListColumn, }, ) for s in data ), diff --git a/openstackclient/tests/functional/common/test_quota.py b/openstackclient/tests/functional/common/test_quota.py index bf67101a..5096fa06 100644 --- a/openstackclient/tests/functional/common/test_quota.py +++ b/openstackclient/tests/functional/common/test_quota.py @@ -169,12 +169,21 @@ class QuotaTests(base.TestCase): self.assertTrue(cmd_output["key-pairs"] >= 0) self.assertTrue(cmd_output["snapshots"] >= 0) + def _restore_quota_limit(self, resource, limit, project): + self.openstack('quota set --%s %s %s' % (resource, limit, project)) + 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') + cmd_output = json.loads(self.openstack( + 'quota list -f json --network' + )) + self.addCleanup(self._restore_quota_limit, 'network', + cmd_output[0]['Networks'], self.PROJECT_NAME) + self.openstack('quota set --networks 40 ' + self.PROJECT_NAME) cmd_output = json.loads(self.openstack( 'quota list -f json --network' @@ -190,3 +199,41 @@ class QuotaTests(base.TestCase): self.assertRaises(exceptions.CommandFailed, self.openstack, 'quota set --networks 1 --check-limit ' + self.PROJECT_NAME) + + def test_quota_network_set_with_force(self): + if not self.haz_network: + self.skipTest('No Network service present') + # NOTE(ralonsoh): the Neutron support for the flag "check-limit" was + # added with the extension "quota-check-limit". The flag "force" was + # added too in order to change the behaviour of Neutron quota engine + # and mimic the Nova one: by default the engine will check the resource + # usage before setting the new limit; with "force", this check will be + # skipped (in Yoga, this behaviour is still NOT the default in + # Neutron). + if not self.is_extension_enabled('quota-check-limit'): + self.skipTest('No "quota-check-limit" extension present') + + cmd_output = json.loads(self.openstack( + 'quota list -f json --network' + )) + self.addCleanup(self._restore_quota_limit, 'network', + cmd_output[0]['Networks'], self.PROJECT_NAME) + + 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.openstack('quota set --networks 1 --force ' + self.PROJECT_NAME) + cmd_output = json.loads(self.openstack( + 'quota list -f json --network' + )) + self.assertIsNotNone(cmd_output) + self.assertEqual(1, cmd_output[0]['Networks']) diff --git a/openstackclient/tests/unit/common/test_quota.py b/openstackclient/tests/unit/common/test_quota.py index 896a63a7..70fd1436 100644 --- a/openstackclient/tests/unit/common/test_quota.py +++ b/openstackclient/tests/unit/common/test_quota.py @@ -935,6 +935,7 @@ class TestQuotaSet(TestQuota): } kwargs_network = { 'subnet': network_fakes.QUOTA['subnet'], + 'force': True, } self.compute_quotas_mock.update.assert_called_once_with( self.projects[0].id, diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py index 18878109..46ace579 100644 --- a/openstackclient/tests/unit/compute/v2/test_server.py +++ b/openstackclient/tests/unit/compute/v2/test_server.py @@ -4485,6 +4485,7 @@ class TestServerList(_TestServerList): '-c', 'Project ID', '-c', 'User ID', '-c', 'Created At', + '-c', 'Security Groups', '--long' ] verifylist = [ @@ -4498,6 +4499,7 @@ class TestServerList(_TestServerList): self.assertIn('Project ID', columns) self.assertIn('User ID', columns) self.assertIn('Created At', columns) + self.assertIn('Security Groups', columns) def test_server_list_no_name_lookup_option(self): self.data = tuple( |
