summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLingxian Kong <anlin.kong@gmail.com>2020-10-21 22:33:51 +1300
committerLingxian Kong <anlin.kong@gmail.com>2020-10-22 08:51:55 +1300
commit7c9a57665dd433951a2b70f7557f2d1595e36fdc (patch)
tree7a8a83f4a9e9d822e8b4833d14fc697ddbdb8471
parente15a3a2733cb3f6fca73145ce92bfc7056759e42 (diff)
downloadpython-troveclient-7c9a57665dd433951a2b70f7557f2d1595e36fdc.tar.gz
Support getting instances for a project
Change-Id: I1b3e8dce864740221722070a710f5a2f867d6c4b
-rw-r--r--troveclient/osc/v1/database_instances.py13
-rw-r--r--troveclient/tests/osc/utils.py28
-rw-r--r--troveclient/tests/osc/v1/test_database_instances.py16
3 files changed, 54 insertions, 3 deletions
diff --git a/troveclient/osc/v1/database_instances.py b/troveclient/osc/v1/database_instances.py
index b3e916b..c155e97 100644
--- a/troveclient/osc/v1/database_instances.py
+++ b/troveclient/osc/v1/database_instances.py
@@ -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)
diff --git a/troveclient/tests/osc/utils.py b/troveclient/tests/osc/utils.py
index e40bdd4..ca86cb5 100644
--- a/troveclient/tests/osc/utils.py
+++ b/troveclient/tests/osc/utils.py
@@ -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"""
diff --git a/troveclient/tests/osc/v1/test_database_instances.py b/troveclient/tests/osc/v1/test_database_instances.py
index c050c35..9000acb 100644
--- a/troveclient/tests/osc/v1/test_database_instances.py
+++ b/troveclient/tests/osc/v1/test_database_instances.py
@@ -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',