Add list vnf instance API
Implemented list vnf instances API. * GET /vnflcm/v1/vnf_instances Co-authored-By: Ajay Parja <ajay.parja@nttdata.com> Co-authored-By: Shubham Potale <shubham.potale@nttdata.com> Change-Id: I1f5d9110e857111232a4ffd4b9c4b229c03a46f8 Blueprint: support-etsi-nfv-specs
This commit is contained in:
parent
cff8c75682
commit
c45c877f36
@ -69,3 +69,7 @@ class ViewBuilder(object):
|
|||||||
|
|
||||||
def show(self, vnf_instance):
|
def show(self, vnf_instance):
|
||||||
return self._get_vnf_instance_info(vnf_instance)
|
return self._get_vnf_instance_info(vnf_instance)
|
||||||
|
|
||||||
|
def index(self, vnf_instances):
|
||||||
|
return [self._get_vnf_instance_info(vnf_instance)
|
||||||
|
for vnf_instance in vnf_instances]
|
||||||
|
@ -202,8 +202,12 @@ class VnfLcmController(wsgi.Controller):
|
|||||||
|
|
||||||
return self._view_builder.show(vnf_instance)
|
return self._view_builder.show(vnf_instance)
|
||||||
|
|
||||||
|
@wsgi.response(http_client.OK)
|
||||||
|
@wsgi.expected_errors((http_client.FORBIDDEN))
|
||||||
def index(self, request):
|
def index(self, request):
|
||||||
raise webob.exc.HTTPNotImplemented()
|
context = request.environ['tacker.context']
|
||||||
|
vnf_instances = objects.VnfInstanceList.get_all(context)
|
||||||
|
return self._view_builder.index(vnf_instances)
|
||||||
|
|
||||||
def delete(self, request, id):
|
def delete(self, request, id):
|
||||||
raise webob.exc.HTTPNotImplemented()
|
raise webob.exc.HTTPNotImplemented()
|
||||||
|
@ -76,7 +76,18 @@ rules = [
|
|||||||
'path': '/vnflcm/v1/vnf_instances/{vnfInstanceId}/heal'
|
'path': '/vnflcm/v1/vnf_instances/{vnfInstanceId}/heal'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
)
|
),
|
||||||
|
policy.DocumentedRuleDefault(
|
||||||
|
name=VNFLCM % 'index',
|
||||||
|
check_str=base.RULE_ADMIN_OR_OWNER,
|
||||||
|
description="Query VNF instances.",
|
||||||
|
operations=[
|
||||||
|
{
|
||||||
|
'method': 'GET',
|
||||||
|
'path': '/vnflcm/v1/vnf_instances'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -972,3 +972,35 @@ class TestController(base.TestCase):
|
|||||||
expected_type=expected_type))
|
expected_type=expected_type))
|
||||||
|
|
||||||
self.assertEqual(expected_message, exception.msg)
|
self.assertEqual(expected_message, exception.msg)
|
||||||
|
|
||||||
|
@mock.patch.object(objects.VnfInstanceList, "get_all")
|
||||||
|
def test_index(self, mock_vnf_list):
|
||||||
|
req = fake_request.HTTPRequest.blank('/vnf_instances')
|
||||||
|
vnf_instance_1 = fakes.return_vnf_instance()
|
||||||
|
vnf_instance_2 = fakes.return_vnf_instance(
|
||||||
|
fields.VnfInstanceState.INSTANTIATED)
|
||||||
|
|
||||||
|
mock_vnf_list.return_value = [vnf_instance_1, vnf_instance_2]
|
||||||
|
resp = self.controller.index(req)
|
||||||
|
expected_result = [fakes.fake_vnf_instance_response(),
|
||||||
|
fakes.fake_vnf_instance_response(
|
||||||
|
fields.VnfInstanceState.INSTANTIATED)]
|
||||||
|
self.assertEqual(expected_result, resp)
|
||||||
|
|
||||||
|
@mock.patch.object(objects.VnfInstanceList, "get_all")
|
||||||
|
def test_index_empty_response(self, mock_vnf_list):
|
||||||
|
req = fake_request.HTTPRequest.blank('/vnf_instances')
|
||||||
|
|
||||||
|
mock_vnf_list.return_value = []
|
||||||
|
resp = self.controller.index(req)
|
||||||
|
self.assertEqual([], resp)
|
||||||
|
|
||||||
|
@ddt.data('HEAD', 'PUT', 'DELETE', 'PATCH')
|
||||||
|
def test_index_invalid_http_method(self, method):
|
||||||
|
# Wrong HTTP method
|
||||||
|
req = fake_request.HTTPRequest.blank(
|
||||||
|
'/vnf_instances')
|
||||||
|
req.headers['Content-Type'] = 'application/json'
|
||||||
|
req.method = method
|
||||||
|
resp = req.get_response(self.app)
|
||||||
|
self.assertEqual(http_client.METHOD_NOT_ALLOWED, resp.status_code)
|
||||||
|
@ -1043,8 +1043,8 @@ class Resource(Application):
|
|||||||
|
|
||||||
if not response:
|
if not response:
|
||||||
resp_obj = None
|
resp_obj = None
|
||||||
if isinstance(action_result, (dict, str)) \
|
if (isinstance(action_result, (dict, list, str)) or
|
||||||
or action_result is None:
|
action_result is None):
|
||||||
resp_obj = ResponseObject(action_result)
|
resp_obj = ResponseObject(action_result)
|
||||||
elif isinstance(action_result, ResponseObject):
|
elif isinstance(action_result, ResponseObject):
|
||||||
resp_obj = action_result
|
resp_obj = action_result
|
||||||
|
Loading…
Reference in New Issue
Block a user