Show server_id for listing instance by admin
Story: 2008420 Task: 41361 Change-Id: I4dd67cf9aa9a13a520e69872d2752d22f19e63cf
This commit is contained in:
@@ -24,38 +24,44 @@ from troveclient.osc.v1 import base
|
|||||||
from troveclient import utils as trove_utils
|
from troveclient import utils as trove_utils
|
||||||
|
|
||||||
|
|
||||||
def set_attributes_for_print(instances):
|
def get_instances_info(instances):
|
||||||
|
instances_info = []
|
||||||
|
|
||||||
for instance in instances:
|
for instance in instances:
|
||||||
# To avoid invoking GET request to trove.
|
# To avoid invoking GET request to trove.
|
||||||
instance_info = instance.to_dict()
|
instance_info = instance.to_dict()
|
||||||
|
|
||||||
setattr(instance, 'flavor_id', instance.flavor['id'])
|
instance_info['flavor_id'] = instance.flavor['id']
|
||||||
|
|
||||||
|
instance_info['size'] = '-'
|
||||||
if 'volume' in instance_info:
|
if 'volume' in instance_info:
|
||||||
setattr(instance, 'size', instance.volume['size'])
|
instance_info['size'] = instance_info['volume']['size']
|
||||||
else:
|
|
||||||
setattr(instance, 'size', '-')
|
|
||||||
|
|
||||||
setattr(instance, 'role', '')
|
instance_info['role'] = ''
|
||||||
if 'replica_of' in instance_info:
|
if 'replica_of' in instance_info:
|
||||||
setattr(instance, 'role', 'replica')
|
instance_info['role'] = 'replica'
|
||||||
if 'replicas' in instance_info:
|
if 'replicas' in instance_info:
|
||||||
setattr(instance, 'role', 'primary')
|
instance_info['role'] = 'primary'
|
||||||
|
|
||||||
if 'datastore' in instance_info:
|
if 'datastore' in instance_info:
|
||||||
if instance.datastore.get('version'):
|
if instance.datastore.get('version'):
|
||||||
setattr(instance, 'datastore_version',
|
instance_info['datastore_version'] = instance.\
|
||||||
instance.datastore['version'])
|
datastore['version']
|
||||||
setattr(instance, 'datastore', instance.datastore['type'])
|
instance_info['datastore'] = instance.datastore['type']
|
||||||
|
|
||||||
if 'access' in instance_info:
|
if 'access' in instance_info:
|
||||||
setattr(instance, "public",
|
instance_info['public'] = instance_info["access"].get(
|
||||||
instance_info["access"].get("is_public", False))
|
"is_public", False)
|
||||||
|
|
||||||
if 'addresses' not in instance_info:
|
if 'addresses' not in instance_info:
|
||||||
setattr(instance, 'addresses', '')
|
instance_info['addresses'] = ''
|
||||||
|
|
||||||
return instances
|
if 'server' in instance_info:
|
||||||
|
instance_info['server_id'] = instance_info['server'].get('id')
|
||||||
|
|
||||||
|
instances_info.append(instance_info)
|
||||||
|
|
||||||
|
return instances_info
|
||||||
|
|
||||||
|
|
||||||
def set_attributes_for_print_detail(instance):
|
def set_attributes_for_print_detail(instance):
|
||||||
@@ -101,7 +107,7 @@ class ListDatabaseInstances(command.Lister):
|
|||||||
_description = _("List database instances")
|
_description = _("List database instances")
|
||||||
columns = ['ID', 'Name', 'Datastore', 'Datastore Version', 'Status',
|
columns = ['ID', 'Name', 'Datastore', 'Datastore Version', 'Status',
|
||||||
'Public', 'Addresses', 'Flavor ID', 'Size', 'Role']
|
'Public', 'Addresses', 'Flavor ID', 'Size', 'Role']
|
||||||
admin_columns = columns + ["Tenant ID"]
|
admin_columns = columns + ["Server ID", "Tenant ID"]
|
||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super(ListDatabaseInstances, self).get_parser(prog_name)
|
parser = super(ListDatabaseInstances, self).get_parser(prog_name)
|
||||||
@@ -164,9 +170,9 @@ class ListDatabaseInstances(command.Lister):
|
|||||||
**extra_params
|
**extra_params
|
||||||
)
|
)
|
||||||
if instances:
|
if instances:
|
||||||
instances = set_attributes_for_print(instances)
|
instances_info = get_instances_info(instances)
|
||||||
instances = [osc_utils.get_item_properties(i, cols)
|
instances = [osc_utils.get_dict_properties(info, cols)
|
||||||
for i in instances]
|
for info in instances_info]
|
||||||
|
|
||||||
return cols, instances
|
return cols, instances
|
||||||
|
|
||||||
|
@@ -197,8 +197,7 @@ class FakeHTTPClient(base_client.HTTPClient):
|
|||||||
},
|
},
|
||||||
"tenant_id": "fake_tenant_id",
|
"tenant_id": "fake_tenant_id",
|
||||||
"access": {"is_public": False, "allowed_cidrs": []}
|
"access": {"is_public": False, "allowed_cidrs": []}
|
||||||
},
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
@@ -41,10 +41,33 @@ class TestInstanceList(TestInstances):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(TestInstanceList, self).setUp()
|
super(TestInstanceList, self).setUp()
|
||||||
self.cmd = database_instances.ListDatabaseInstances(self.app, None)
|
self.cmd = database_instances.ListDatabaseInstances(self.app, None)
|
||||||
self.data = self.fake_instances.get_instances()
|
|
||||||
|
|
||||||
def test_instance_list_defaults(self):
|
def test_instance_list_defaults(self):
|
||||||
self.instance_client.list.return_value = common.Paginated(self.data)
|
instance_id = self.random_uuid()
|
||||||
|
name = self.random_name('test-list')
|
||||||
|
tenant_id = self.random_uuid()
|
||||||
|
insts = [
|
||||||
|
{
|
||||||
|
"id": instance_id,
|
||||||
|
"name": name,
|
||||||
|
"status": "ACTIVE",
|
||||||
|
"addresses": [
|
||||||
|
{"type": "private", "address": "10.0.0.13"}
|
||||||
|
],
|
||||||
|
"volume": {"size": 2},
|
||||||
|
"flavor": {"id": "02"},
|
||||||
|
"region": "regionOne",
|
||||||
|
"datastore": {
|
||||||
|
"version": "5.6", "type": "mysql",
|
||||||
|
"version_number": "5.7.29"
|
||||||
|
},
|
||||||
|
"tenant_id": tenant_id,
|
||||||
|
"replica_of": self.random_uuid(),
|
||||||
|
"access": {"is_public": False, "allowed_cidrs": []},
|
||||||
|
}
|
||||||
|
]
|
||||||
|
self.instance_client.list.return_value = common.Paginated(
|
||||||
|
[instances.Instance(mock.MagicMock(), inst) for inst in insts])
|
||||||
|
|
||||||
parsed_args = self.check_parser(self.cmd, [], [])
|
parsed_args = self.check_parser(self.cmd, [], [])
|
||||||
columns, data = self.cmd.take_action(parsed_args)
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
@@ -56,21 +79,45 @@ class TestInstanceList(TestInstances):
|
|||||||
)
|
)
|
||||||
|
|
||||||
values = [
|
values = [
|
||||||
('1234', 'test-member-1', 'mysql', '5.6', 'ACTIVE', False,
|
(instance_id, name, 'mysql', '5.6', 'ACTIVE', False,
|
||||||
[{"type": "private", "address": "10.0.0.13"}],
|
[{"type": "private", "address": "10.0.0.13"}],
|
||||||
'02', 2, 'replica'),
|
'02', 2, 'replica'),
|
||||||
('5678', 'test-member-2', 'mysql', '5.6', 'ACTIVE', False,
|
|
||||||
[{"type": "private", "address": "10.0.0.14"}],
|
|
||||||
'2', 2, '')
|
|
||||||
]
|
]
|
||||||
self.assertEqual(values, data)
|
self.assertEqual(values, data)
|
||||||
|
|
||||||
def test_instance_list_all_projects(self):
|
def test_instance_list_all_projects(self):
|
||||||
self.mgmt_client.list.return_value = common.Paginated(self.data)
|
instance_id = self.random_uuid()
|
||||||
|
name = self.random_name('test-list')
|
||||||
|
tenant_id = self.random_uuid()
|
||||||
|
server_id = self.random_uuid()
|
||||||
|
insts = [
|
||||||
|
{
|
||||||
|
"id": instance_id,
|
||||||
|
"name": name,
|
||||||
|
"status": "ACTIVE",
|
||||||
|
"addresses": [
|
||||||
|
{"type": "private", "address": "10.0.0.13"}
|
||||||
|
],
|
||||||
|
"volume": {"size": 2},
|
||||||
|
"flavor": {"id": "02"},
|
||||||
|
"region": "regionOne",
|
||||||
|
"datastore": {
|
||||||
|
"version": "5.6", "type": "mysql",
|
||||||
|
"version_number": "5.7.29"
|
||||||
|
},
|
||||||
|
"tenant_id": tenant_id,
|
||||||
|
"access": {"is_public": False, "allowed_cidrs": []},
|
||||||
|
'server': {
|
||||||
|
'id': server_id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
self.mgmt_client.list.return_value = common.Paginated(
|
||||||
|
[instances.Instance(mock.MagicMock(), inst) for inst in insts])
|
||||||
|
|
||||||
parsed_args = self.check_parser(self.cmd, ["--all-projects"],
|
parsed_args = self.check_parser(self.cmd, ["--all-projects"],
|
||||||
[("all_projects", True)])
|
[("all_projects", True)])
|
||||||
columns, instances = self.cmd.take_action(parsed_args)
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
self.mgmt_client.list.assert_called_once_with(**self.defaults)
|
self.mgmt_client.list.assert_called_once_with(**self.defaults)
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
@@ -79,28 +126,62 @@ class TestInstanceList(TestInstances):
|
|||||||
)
|
)
|
||||||
|
|
||||||
expected_instances = [
|
expected_instances = [
|
||||||
('1234', 'test-member-1', 'mysql', '5.6',
|
(instance_id, name, 'mysql', '5.6', 'ACTIVE', False,
|
||||||
'ACTIVE', False, [{"type": "private", "address": "10.0.0.13"}],
|
[{"type": "private", "address": "10.0.0.13"}],
|
||||||
'02', 2, 'replica', 'fake_tenant_id'),
|
'02', 2, '', server_id, tenant_id),
|
||||||
('5678', 'test-member-2', 'mysql', '5.6',
|
|
||||||
'ACTIVE', False, [{"type": "private", "address": "10.0.0.14"}],
|
|
||||||
'2', 2, '', 'fake_tenant_id')
|
|
||||||
]
|
]
|
||||||
self.assertEqual(expected_instances, instances)
|
self.assertEqual(expected_instances, data)
|
||||||
|
|
||||||
def test_instance_list_for_project(self):
|
def test_instance_list_for_project(self):
|
||||||
self.mgmt_client.list.return_value = common.Paginated(self.data)
|
instance_id = self.random_uuid()
|
||||||
|
name = self.random_name('test-list')
|
||||||
|
tenant_id = self.random_uuid()
|
||||||
|
server_id = self.random_uuid()
|
||||||
|
insts = [
|
||||||
|
{
|
||||||
|
"id": instance_id,
|
||||||
|
"name": name,
|
||||||
|
"status": "ACTIVE",
|
||||||
|
"addresses": [
|
||||||
|
{"type": "private", "address": "10.0.0.13"}
|
||||||
|
],
|
||||||
|
"volume": {"size": 2},
|
||||||
|
"flavor": {"id": "02"},
|
||||||
|
"region": "regionOne",
|
||||||
|
"datastore": {
|
||||||
|
"version": "5.6", "type": "mysql",
|
||||||
|
"version_number": "5.7.29"
|
||||||
|
},
|
||||||
|
"tenant_id": tenant_id,
|
||||||
|
"access": {"is_public": False, "allowed_cidrs": []},
|
||||||
|
'server': {
|
||||||
|
'id': server_id
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
self.mgmt_client.list.return_value = common.Paginated(
|
||||||
|
[instances.Instance(mock.MagicMock(), inst) for inst in insts])
|
||||||
|
|
||||||
project_id = self.random_uuid()
|
parsed_args = self.check_parser(self.cmd, ["--project-id", tenant_id],
|
||||||
parsed_args = self.check_parser(self.cmd, ["--project-id", project_id],
|
[("project_id", tenant_id)])
|
||||||
[("project_id", project_id)])
|
columns, data = self.cmd.take_action(parsed_args)
|
||||||
self.cmd.take_action(parsed_args)
|
|
||||||
|
self.assertEqual(
|
||||||
|
database_instances.ListDatabaseInstances.admin_columns,
|
||||||
|
columns
|
||||||
|
)
|
||||||
|
expected_instances = [
|
||||||
|
(instance_id, name, 'mysql', '5.6', 'ACTIVE', False,
|
||||||
|
[{"type": "private", "address": "10.0.0.13"}],
|
||||||
|
'02', 2, '', server_id, tenant_id),
|
||||||
|
]
|
||||||
|
self.assertEqual(expected_instances, data)
|
||||||
|
|
||||||
expected_params = {
|
expected_params = {
|
||||||
'include_clustered': False,
|
'include_clustered': False,
|
||||||
'limit': None,
|
'limit': None,
|
||||||
'marker': None,
|
'marker': None,
|
||||||
'project_id': project_id
|
'project_id': tenant_id
|
||||||
}
|
}
|
||||||
self.mgmt_client.list.assert_called_once_with(**expected_params)
|
self.mgmt_client.list.assert_called_once_with(**expected_params)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user