Support getting instances for a project
Change-Id: I1b3e8dce864740221722070a710f5a2f867d6c4b
This commit is contained in:
@@ -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)
|
||||||
|
@@ -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"""
|
||||||
|
@@ -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',
|
||||||
|
Reference in New Issue
Block a user