Merge "API: add filters when try to list containers"
This commit is contained in:
commit
8ee7598945
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue