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,
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
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
cols = self.admin_columns
if parsed_args.project_id:
extra_params['project_id'] = parsed_args.project_id
else:
db_instances = self.app.client_manager.database.instances
cols = self.columns
@@ -147,7 +155,8 @@ class ListDatabaseInstances(command.Lister):
instances = db_instances.list(
limit=parsed_args.limit,
marker=parsed_args.marker,
include_clustered=parsed_args.include_clustered
include_clustered=parsed_args.include_clustered,
**extra_params
)
if instances:
instances = set_attributes_for_print(instances)

View File

@@ -12,10 +12,12 @@
#
import os
import random
import sys
from unittest import mock
import uuid
import fixtures
import sys
import testtools
from troveclient.tests.osc import fakes
@@ -35,6 +37,30 @@ class TestCase(testtools.TestCase):
stderr = self.useFixture(fixtures.StringStream("stderr")).stream
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):
"""Test cliff command classes"""

View File

@@ -88,6 +88,22 @@ class TestInstanceList(TestInstances):
]
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):
values = ([{'address': '10.0.0.13', 'type': 'private'}], [], 'mysql',