Merge "Fix issue of vimConnectionInfo in v1 instantiate"

This commit is contained in:
Zuul
2024-09-11 13:50:31 +00:00
committed by Gerrit Code Review
3 changed files with 116 additions and 21 deletions

View File

@@ -2071,7 +2071,10 @@ class Conductor(manager.Manager, v2_hook.ConductorV2Hook):
self._build_instantiated_vnf_info(context,
vnf_instance,
instantiate_vnf_req=instantiate_vnf)
vim_id = instantiate_vnf.vim_connection_info[0].vim_id
if instantiate_vnf.vim_connection_info:
vim_id = instantiate_vnf.vim_connection_info[0].vim_id
else:
vim_id = vnflcm_utils._get_vim(context, None)['vim_id']
self._update_vnf_attributes(context, vnf_instance, vnf_dict,
constants.PENDING_STATUSES,
constants.ACTIVE, vim_id=vim_id)
@@ -2162,8 +2165,15 @@ class Conductor(manager.Manager, v2_hook.ConductorV2Hook):
vnf_dict['current_error_point'] = EP.NOTIFY_COMPLETED
# Register the default VIM in the same as when create
default_vim = vnflcm_utils._get_vim(context, None)
vim_conn = objects.VimConnectionInfo(
id=uuidutils.generate_uuid(), vim_id=default_vim.get('vim_id'),
vim_type=default_vim.get('vim_type'), access_info={},
interface_info={}, extra=default_vim.get('extra', {}))
self.vnflcm_driver._vnf_instance_update(context, vnf_instance,
vim_connection_info=[], task_state=None,
vim_connection_info=[vim_conn], task_state=None,
instantiation_state=fields.VnfInstanceState.NOT_INSTANTIATED)
vnf_instance.instantiated_vnf_info.reinitialize()

View File

@@ -730,6 +730,41 @@ class VnfLcmTest(base.BaseTackerTest):
self._delete_vnf_instance(vnf_instance['id'])
def test_instantiate_vnf_without_vim_connection_info(self):
"""Test instantiation API without vimConnectionInfo"""
# Create vnf instance
vnf_instance_name = (
f'vnf_without_vimConnectionInfo-{uuidutils.generate_uuid()}')
vnf_instance_description = 'vnf without vimConnectionInfo'
resp, vnf_instance = self._create_vnf_instance(self.vnfd_id_1,
vnf_instance_name=vnf_instance_name,
vnf_instance_description=vnf_instance_description)
self.assertIsNotNone(vnf_instance['id'])
self.assertEqual(201, resp.status_code)
request_body = self._instantiate_vnf_request('simple', vim_id=None)
self._instantiate_vnf_instance(vnf_instance['id'], request_body)
vnf_instance = self._show_vnf_instance(vnf_instance['id'])
vdu_count = len(vnf_instance['instantiatedVnfInfo']
['vnfcResourceInfo'])
self.assertEqual(1, vdu_count)
self.assertEqual(self.vim_id, vnf_instance['instantiatedVnfInfo']
['vnfcResourceInfo'][0]['computeResource']['vimConnectionId'])
# Terminate vnf gracefully with graceful timeout set to 60
terminate_req_body = {
'terminationType': fields.VnfInstanceTerminationType.GRACEFUL,
'gracefulTerminationTimeout': 60
}
self._terminate_vnf_instance(vnf_instance['id'], terminate_req_body)
self._delete_vnf_instance(vnf_instance['id'])
def test_instantiate_vnf_with_instantiation_level(self):
"""Test instantiation and heal API with instantiation level

View File

@@ -578,6 +578,45 @@ class TestConductor(SqlTestCase, unit_base.FixturedTestCase):
mock.ANY, mock.ANY, mock.ANY, constants.ACTIVE,
vim_id=vim_id)
@mock.patch('tacker.vnflcm.utils._get_vim')
@mock.patch('tacker.conductor.conductor_server.Conductor'
'._update_vnf_attributes')
@mock.patch('tacker.conductor.conductor_server.Conductor'
'._change_vnf_status')
@mock.patch('tacker.conductor.conductor_server.Conductor'
'._build_instantiated_vnf_info')
@mock.patch.object(objects.VnfLcmOpOcc, 'save')
@mock.patch.object(coordination.Coordinator, 'get_lock')
@mock.patch('tacker.vnflcm.utils._get_vnfd_dict')
@mock.patch('tacker.vnflcm.utils._convert_desired_capacity')
@mock.patch.object(objects.VnfLcmOpOcc, 'get_by_id')
def test_instantiate_vnf_instance_without_vim_connection_info(
self, mock_vnf_by_id, mock_des, mock_vnfd_dict, mock_get_lock,
mock_save, mock_build_info, mock_change_vnf_status,
mock_update_vnf_attributes, mock_get_vim):
lcm_op_occs_data = fakes.get_lcm_op_occs_data()
mock_vnf_by_id.return_value = (
objects.VnfLcmOpOcc(context=self.context, **lcm_op_occs_data))
vnf_package_vnfd = self._create_and_upload_vnf_package()
vnf_instance_data = fake_obj.get_vnf_instance_data(
vnf_package_vnfd.vnfd_id)
vnf_instance = objects.VnfInstance(context=self.context,
**vnf_instance_data)
vnf_instance.create()
instantiate_vnf_req = vnflcm_fakes.get_instantiate_vnf_request_obj()
instantiate_vnf_req.vim_connection_info = []
vnf_lcm_op_occs_id = uuidsentinel.vnf_lcm_op_occs_id
vnf_dict = db_utils.get_dummy_vnf_etsi(instance_id=self.instance_uuid,
flavour=instantiate_vnf_req.flavour_id)
vnf_dict['before_error_point'] = fields.ErrorPoint.INITIAL
default_vim_id = uuidsentinel.vim_id
mock_get_vim.return_value = {'vim_id': default_vim_id}
self.conductor.instantiate(self.context, vnf_instance, vnf_dict,
instantiate_vnf_req, vnf_lcm_op_occs_id)
mock_update_vnf_attributes.assert_called_with(self.context,
mock.ANY, mock.ANY, mock.ANY, constants.ACTIVE,
vim_id=default_vim_id)
@mock.patch('tacker.conductor.conductor_server.Conductor'
'._change_vnf_status')
@mock.patch('tacker.conductor.conductor_server.Conductor'
@@ -1134,27 +1173,29 @@ class TestConductor(SqlTestCase, unit_base.FixturedTestCase):
instantiate_vnf_req, vnf_lcm_op_occs_id)
self.vnflcm_driver._vnf_instance_update.assert_called_once()
@mock.patch('tacker.vnflcm.utils._get_vim')
@mock.patch('tacker.conductor.conductor_server.Conductor'
'._change_vnf_status')
@mock.patch('tacker.conductor.conductor_server.Conductor'
'._send_lcm_op_occ_notification')
@mock.patch.object(coordination.Coordinator, 'get_lock')
def test_terminate_vnf_instance(self, mock_get_lock,
mock_send_notification,
mock_change_vnf_status):
mock_send_notification, mock_change_vnf_status, mock_get_vim):
inst_vnf_info = fd_utils.get_vnf_instantiated_info()
vnf_instance = fd_utils. \
get_vnf_instance_object(instantiated_vnf_info=inst_vnf_info)
vnf_instance = (fd_utils.
get_vnf_instance_object(instantiated_vnf_info=inst_vnf_info))
terminate_vnf_req = objects.TerminateVnfRequest(
termination_type=fields.VnfInstanceTerminationType.GRACEFUL,
additional_params={"key": "value"})
additional_params={'key': 'value'})
vnf_lcm_op_occs_id = uuidsentinel.vnf_lcm_op_occs_id
vnf_dict = {
**db_utils.get_dummy_vnf(instance_id=self.instance_uuid),
'before_error_point': fields.ErrorPoint.INITIAL,
'status': ''
}
mock_get_vim.return_value = {'vim_id': uuidsentinel.vim_id,
'vim_type': 'openstack'}
self.conductor.terminate(self.context, vnf_lcm_op_occs_id,
vnf_instance, terminate_vnf_req, vnf_dict)
@@ -1164,6 +1205,7 @@ class TestConductor(SqlTestCase, unit_base.FixturedTestCase):
self.assertEqual(mock_send_notification.call_count, 2)
self.assertEqual(mock_change_vnf_status.call_count, 2)
@mock.patch('tacker.vnflcm.utils._get_vim')
@mock.patch('tacker.conductor.conductor_server.Conductor'
'._change_vnf_status')
@mock.patch('tacker.conductor.conductor_server.Conductor'
@@ -1171,17 +1213,19 @@ class TestConductor(SqlTestCase, unit_base.FixturedTestCase):
@mock.patch.object(coordination.Coordinator, 'get_lock')
def test_terminate_vnf_instance_error_point_notify_processing(
self, mock_get_lock, mock_send_notification,
mock_change_vnf_status):
mock_change_vnf_status, mock_get_vim):
inst_vnf_info = fd_utils.get_vnf_instantiated_info()
vnf_instance = fd_utils. \
get_vnf_instance_object(instantiated_vnf_info=inst_vnf_info)
vnf_instance = (fd_utils.
get_vnf_instance_object(instantiated_vnf_info=inst_vnf_info))
terminate_vnf_req = objects.TerminateVnfRequest(
termination_type=fields.VnfInstanceTerminationType.GRACEFUL,
additional_params={"key": "value"})
additional_params={'key': 'value'})
vnf_lcm_op_occs_id = uuidsentinel.vnf_lcm_op_occs_id
vnf_dict = db_utils.get_dummy_vnf(instance_id=self.instance_uuid)
vnf_dict['before_error_point'] = fields.ErrorPoint.NOTIFY_PROCESSING
mock_get_vim.return_value = {'vim_id': uuidsentinel.vim_id,
'vim_type': 'openstack'}
self.conductor.terminate(self.context, vnf_lcm_op_occs_id,
vnf_instance, terminate_vnf_req, vnf_dict)
@@ -1191,6 +1235,7 @@ class TestConductor(SqlTestCase, unit_base.FixturedTestCase):
self.assertEqual(mock_send_notification.call_count, 2)
self.assertEqual(mock_change_vnf_status.call_count, 2)
@mock.patch('tacker.vnflcm.utils._get_vim')
@mock.patch('tacker.conductor.conductor_server.Conductor'
'._change_vnf_status')
@mock.patch('tacker.conductor.conductor_server.Conductor'
@@ -1198,17 +1243,19 @@ class TestConductor(SqlTestCase, unit_base.FixturedTestCase):
@mock.patch.object(coordination.Coordinator, 'get_lock')
def test_terminate_vnf_instance_error_point_internal_processing(
self, mock_get_lock, mock_send_notification,
mock_change_vnf_status):
mock_change_vnf_status, mock_get_vim):
inst_vnf_info = fd_utils.get_vnf_instantiated_info()
vnf_instance = fd_utils. \
get_vnf_instance_object(instantiated_vnf_info=inst_vnf_info)
vnf_instance = (fd_utils.
get_vnf_instance_object(instantiated_vnf_info=inst_vnf_info))
terminate_vnf_req = objects.TerminateVnfRequest(
termination_type=fields.VnfInstanceTerminationType.GRACEFUL,
additional_params={"key": "value"})
additional_params={'key': 'value'})
vnf_lcm_op_occs_id = uuidsentinel.vnf_lcm_op_occs_id
vnf_dict = db_utils.get_dummy_vnf(instance_id=self.instance_uuid)
vnf_dict['before_error_point'] = fields.ErrorPoint.INTERNAL_PROCESSING
mock_get_vim.return_value = {'vim_id': uuidsentinel.vim_id,
'vim_type': 'openstack'}
self.conductor.terminate(self.context, vnf_lcm_op_occs_id,
vnf_instance, terminate_vnf_req, vnf_dict)
@@ -1218,6 +1265,7 @@ class TestConductor(SqlTestCase, unit_base.FixturedTestCase):
self.assertEqual(mock_send_notification.call_count, 2)
self.assertEqual(mock_change_vnf_status.call_count, 1)
@mock.patch('tacker.vnflcm.utils._get_vim')
@mock.patch('tacker.vnflcm.vnflcm_driver.VnfLcmDriver'
'.terminate_vnf')
@mock.patch('tacker.conductor.conductor_server.Conductor'
@@ -1225,19 +1273,21 @@ class TestConductor(SqlTestCase, unit_base.FixturedTestCase):
@mock.patch('tacker.conductor.conductor_server.Conductor'
'._send_lcm_op_occ_notification')
@mock.patch.object(coordination.Coordinator, 'get_lock')
def test_terminate_vnf_instance_error_point_notify_completed(
self, mock_get_lock, mock_send_notification,
mock_change_vnf_status, mock_vnflcm_driver_terminate_vnf):
def test_terminate_vnf_instance_error_point_notify_completed(self,
mock_get_lock, mock_send_notification, mock_change_vnf_status,
mock_vnflcm_driver_terminate_vnf, mock_get_vim):
inst_vnf_info = fd_utils.get_vnf_instantiated_info()
vnf_instance = fd_utils. \
get_vnf_instance_object(instantiated_vnf_info=inst_vnf_info)
vnf_instance = (fd_utils.
get_vnf_instance_object(instantiated_vnf_info=inst_vnf_info))
terminate_vnf_req = objects.TerminateVnfRequest(
termination_type=fields.VnfInstanceTerminationType.GRACEFUL,
additional_params={"key": "value"})
additional_params={'key': 'value'})
vnf_lcm_op_occs_id = uuidsentinel.vnf_lcm_op_occs_id
vnf_dict = db_utils.get_dummy_vnf(instance_id=self.instance_uuid)
vnf_dict['before_error_point'] = fields.ErrorPoint.NOTIFY_COMPLETED
mock_get_vim.return_value = {'vim_id': uuidsentinel.vim_id,
'vim_type': 'openstack'}
self.conductor.terminate(self.context, vnf_lcm_op_occs_id,
vnf_instance, terminate_vnf_req, vnf_dict)