Merge "API: add filters when try to list containers"

This commit is contained in:
Jenkins 2015-12-16 01:53:18 +00:00 committed by Gerrit Code Review
commit 8ee7598945
2 changed files with 40 additions and 12 deletions

View File

@ -280,19 +280,23 @@ class ContainersController(rest.RestController):
def _get_containers_collection(self, marker, limit,
sort_key, sort_dir, expand=False,
resource_url=None):
resource_url=None, bay_ident=None):
context = pecan.request.context
limit = api_utils.validate_limit(limit)
sort_dir = api_utils.validate_sort_dir(sort_dir)
marker_obj = None
if marker:
marker_obj = objects.Container.get_by_uuid(pecan.request.context,
marker_obj = objects.Container.get_by_uuid(context,
marker)
containers = objects.Container.list(pecan.request.context, limit,
marker_obj, sort_key=sort_key,
sort_dir=sort_dir)
containers = pecan.request.rpcapi.container_list(context, limit,
marker_obj,
sort_key=sort_key,
sort_dir=sort_dir,
bay_ident=bay_ident)
for i, c in enumerate(containers):
try:
containers[i] = pecan.request.rpcapi.container_show(c.uuid)
@ -310,18 +314,19 @@ class ContainersController(rest.RestController):
@policy.enforce_wsgi("container")
@expose.expose(ContainerCollection, types.uuid, int,
wtypes.text, wtypes.text)
wtypes.text, wtypes.text, types.uuid_or_name)
def get_all(self, marker=None, limit=None, sort_key='id',
sort_dir='asc'):
sort_dir='asc', bay_ident=None):
"""Retrieve a list of containers.
:param marker: pagination marker for large data sets.
:param limit: maximum number of resources to return in a single result.
:param sort_key: column to sort results by. Default: id.
:param sort_dir: direction to sort. "asc" or "desc". Default: asc.
:param bay_indent: UUID or logical name of bay.
"""
return self._get_containers_collection(marker, limit, sort_key,
sort_dir)
sort_dir, bay_ident=bay_ident)
@policy.enforce_wsgi("container")
@expose.expose(ContainerCollection, types.uuid, int,

View File

@ -247,8 +247,8 @@ class TestContainerController(api_base.FunctionalTest):
response = self.app.get('/v1/containers')
mock_container_list.assert_called_once_with(mock.ANY,
1000, None, sort_dir='asc',
sort_key='id')
1000, None, 'id', 'asc',
filters=None)
self.assertEqual(200, response.status_int)
actual_containers = response.json['containers']
self.assertEqual(1, len(actual_containers))
@ -318,8 +318,8 @@ class TestContainerController(api_base.FunctionalTest):
response = self.app.get('/v1/containers')
mock_container_list.assert_called_once_with(mock.ANY,
1000, None, sort_dir='asc',
sort_key='id')
1000, None, 'id', 'asc',
filters=None)
self.assertEqual(200, response.status_int)
actual_containers = response.json['containers']
self.assertEqual(1, len(actual_containers))
@ -329,6 +329,29 @@ class TestContainerController(api_base.FunctionalTest):
self.assertEqual(fields.ContainerStatus.UNKNOWN,
actual_containers[0].get('status'))
@patch('magnum.conductor.api.API.container_show')
@patch('magnum.conductor.utils.retrieve_bay_uuid')
@patch('magnum.objects.Container.list')
def test_get_all_containers_with_bay_ident(self, mock_container_list,
mock_retrive_bay_uuid,
mock_container_show):
test_container = utils.get_test_container()
containers = [objects.Container(self.context, **test_container)]
mock_container_list.return_value = containers
mock_retrive_bay_uuid.return_value = '12'
mock_container_show.return_value = containers[0]
response = self.app.get('/v1/containers/?bay_ident=12')
mock_container_list.assert_called_once_with(mock.ANY,
1000, None, 'id', 'asc',
filters={'bay_uuid': '12'})
self.assertEqual(200, response.status_int)
actual_containers = response.json['containers']
self.assertEqual(1, len(actual_containers))
self.assertEqual(test_container['uuid'],
actual_containers[0].get('uuid'))
@patch('magnum.conductor.api.API.container_show')
@patch('magnum.objects.Container.get_by_uuid')
def test_get_one_by_uuid(self, mock_container_get_by_uuid,