Support getting instances for a project

Change-Id: I1b3e8dce864740221722070a710f5a2f867d6c4b
This commit is contained in:
Lingxian Kong
2020-10-21 22:33:51 +13:00
parent e15a3a2733
commit 7c9a57665d
3 changed files with 54 additions and 3 deletions

View File

@@ -134,12 +134,20 @@ class ListDatabaseInstances(command.Lister):
default=False, default=False,
help=_("Include database instances of all projects (admin only)") help=_("Include database instances of all projects (admin only)")
) )
parser.add_argument(
'--project-id',
help=_("Include database instances of a specific project "
"(admin only)")
)
return parser return parser
def take_action(self, parsed_args): def take_action(self, parsed_args):
if parsed_args.all_projects: extra_params = {}
if parsed_args.all_projects or parsed_args.project_id:
db_instances = self.app.client_manager.database.mgmt_instances db_instances = self.app.client_manager.database.mgmt_instances
cols = self.admin_columns cols = self.admin_columns
if parsed_args.project_id:
extra_params['project_id'] = parsed_args.project_id
else: else:
db_instances = self.app.client_manager.database.instances db_instances = self.app.client_manager.database.instances
cols = self.columns cols = self.columns
@@ -147,7 +155,8 @@ class ListDatabaseInstances(command.Lister):
instances = db_instances.list( instances = db_instances.list(
limit=parsed_args.limit, limit=parsed_args.limit,
marker=parsed_args.marker, marker=parsed_args.marker,
include_clustered=parsed_args.include_clustered include_clustered=parsed_args.include_clustered,
**extra_params
) )
if instances: if instances:
instances = set_attributes_for_print(instances) instances = set_attributes_for_print(instances)

View File

@@ -12,10 +12,12 @@
# #
import os import os
import random
import sys
from unittest import mock from unittest import mock
import uuid
import fixtures import fixtures
import sys
import testtools import testtools
from troveclient.tests.osc import fakes from troveclient.tests.osc import fakes
@@ -35,6 +37,30 @@ class TestCase(testtools.TestCase):
stderr = self.useFixture(fixtures.StringStream("stderr")).stream stderr = self.useFixture(fixtures.StringStream("stderr")).stream
self.useFixture(fixtures.MonkeyPatch("sys.stderr", stderr)) self.useFixture(fixtures.MonkeyPatch("sys.stderr", stderr))
@classmethod
def random_name(cls, name='', prefix=None):
"""Generate a random name that inclues a random number.
:param str name: The name that you want to include
:param str prefix: The prefix that you want to include
:return: a random name. The format is
'<prefix>-<name>-<random number>'.
(e.g. 'prefixfoo-namebar-154876201')
:rtype: string
"""
randbits = str(random.randint(1, 0x7fffffff))
rand_name = randbits
if name:
rand_name = name + '-' + rand_name
if prefix:
rand_name = prefix + '-' + rand_name
return rand_name
@classmethod
def random_uuid(cls):
return str(uuid.uuid4())
class TestCommand(TestCase): class TestCommand(TestCase):
"""Test cliff command classes""" """Test cliff command classes"""

View File

@@ -88,6 +88,22 @@ class TestInstanceList(TestInstances):
] ]
self.assertEqual(expected_instances, instances) self.assertEqual(expected_instances, instances)
def test_instance_list_for_project(self):
self.mgmt_client.list.return_value = common.Paginated(self.data)
project_id = self.random_uuid()
parsed_args = self.check_parser(self.cmd, ["--project-id", project_id],
[("project_id", project_id)])
self.cmd.take_action(parsed_args)
expected_params = {
'include_clustered': False,
'limit': None,
'marker': None,
'project_id': project_id
}
self.mgmt_client.list.assert_called_once_with(**expected_params)
class TestInstanceShow(TestInstances): class TestInstanceShow(TestInstances):
values = ([{'address': '10.0.0.13', 'type': 'private'}], [], 'mysql', values = ([{'address': '10.0.0.13', 'type': 'private'}], [], 'mysql',