def return_vnf_instance( instantiated_state=fields.VnfInstanceState.NOT_INSTANTIATED, **updates): if instantiated_state == fields.VnfInstanceState.NOT_INSTANTIATED: data = _model_non_instantiated_vnf_instance(**updates) data['instantiation_state'] = instantiated_state vnf_instance_obj = objects.VnfInstance(**data) else: data = _model_non_instantiated_vnf_instance(**updates) data['instantiation_state'] = instantiated_state vnf_instance_obj = objects.VnfInstance(**data) inst_vnf_info = objects.InstantiatedVnfInfo.obj_from_primitive( { "ext_cp_info": [], 'ext_virtual_link_info': [], 'ext_managed_virtual_link_info': [], 'vnfc_resource_info': [], 'vnf_virtual_link_resource_info': [], 'virtual_storage_resource_info': [], "flavour_id": "simple", "additional_params": { "key": "value" }, 'vnf_state': "STARTED" }, None) vnf_instance_obj.instantiated_vnf_info = inst_vnf_info return vnf_instance_obj
def create(self, request, body): context = request.environ['tacker.context'] context.can(vnf_lcm_policies.VNFLCM % 'create') req_body = utils.convert_camelcase_to_snakecase(body) vnfd_id = req_body.get('vnfd_id') try: vnfd = objects.VnfPackageVnfd.get_by_id(request.context, vnfd_id) except exceptions.VnfPackageVnfdNotFound as exc: raise webob.exc.HTTPBadRequest(explanation=six.text_type(exc)) vnf_instance = objects.VnfInstance( context=request.context, vnf_instance_name=req_body.get('vnf_instance_name'), vnf_instance_description=req_body.get('vnf_instance_description'), vnfd_id=vnfd_id, instantiation_state=fields.VnfInstanceState.NOT_INSTANTIATED, vnf_provider=vnfd.vnf_provider, vnf_product_name=vnfd.vnf_product_name, vnf_software_version=vnfd.vnf_software_version, vnfd_version=vnfd.vnfd_version, vnf_pkg_id=vnfd.package_uuid, tenant_id=request.context.project_id, vnf_metadata=req_body.get('metadata')) vnf_instance.create() result = self._view_builder.create(vnf_instance) headers = {"location": self._get_vnf_instance_href(vnf_instance)} return wsgi.ResponseObject(result, headers=headers)
def test_save_error(self): vnf_instance_data = fakes.get_vnf_instance_data( self.vnf_package.vnfd_id) vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.id = uuidsentinel.id self.assertRaises(exceptions.VnfInstanceNotFound, vnf_instance.save)
def test_terminate_vnf_instance_already_not_instantiated( self, mock_log, mock_package_in_use, mock_get_lock): vnf_package_vnfd = self._create_and_upload_vnf_package() vnf_instance_data = fake_obj.get_vnf_instance_data( vnf_package_vnfd.vnfd_id) mock_package_in_use.return_value = True vnf_instance_data['instantiation_state'] =\ fields.VnfInstanceState.NOT_INSTANTIATED vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() terminate_vnf_req = objects.TerminateVnfRequest( termination_type=fields.VnfInstanceTerminationType.GRACEFUL) self.conductor.terminate(self.context, vnf_instance, terminate_vnf_req) self.vnflcm_driver.terminate_vnf.assert_not_called() mock_package_in_use.assert_not_called() expected_log = ('Terminate action cannot be performed on vnf %(id)s ' 'which is in %(state)s state.') mock_log.error.assert_called_once_with( expected_log, { 'id': vnf_instance.id, 'state': fields.VnfInstanceState.NOT_INSTANTIATED })
def test_destroy(self, mock_vnf_destroy): vnf_instance_data = fakes.get_vnf_instance_data( self.vnf_package.vnfd_id) vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() vnf_instance.destroy(self.context) mock_vnf_destroy.assert_called_with(self.context, vnf_instance.id)
def _create_vnf_instance(self): vnf_instance_data = fakes.get_vnf_instance_data( self.vnf_package_vnfd.vnfd_id) vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() return vnf_instance
def test_get_all(self): vnf_instance_data = fakes.get_vnf_instance_data( self.vnf_package.vnfd_id) vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() result = objects.VnfInstanceList.get_all(self.context, expected_attrs=None) self.assertTrue(result.objects, list) self.assertTrue(result.objects)
def test_get_by_id(self): vnf_instance_data = fakes.get_vnf_instance_data( self.vnf_package.vnfd_id) vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() vnf_instance_by_id = objects.VnfInstance.get_by_id( self.context, vnf_instance.id) self.compare_obj(vnf_instance, vnf_instance_by_id, allow_missing=['instantiated_vnf_info', 'vim_connection_info'])
def test_update(self, mock_get_by_id): mock_get_by_id.return_value =\ fakes_vnflcm.return_vnf_package_with_deployment_flavour() vnf_instance_data = fakes.get_vnf_instance_data( self.vnf_package.vnfd_id) vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() id = uuidutils.generate_uuid() vnf_lcm_oppccs = fakes.get_lcm_op_occs_data(id, vnf_instance.id) vnf_instance.update(self.context, vnf_lcm_oppccs, self.body_data, self.vnfd_pkg_data, vnf_instance_data['vnfd_id'])
def test_heal_vnf_instance(self, mock_get_lock): 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() vnf_instance.instantiation_state = \ fields.VnfInstanceState.INSTANTIATED vnf_instance.save() heal_vnf_req = objects.HealVnfRequest(cause="healing request") self.conductor.heal(self.context, vnf_instance, heal_vnf_req) self.vnflcm_driver.heal_vnf.assert_called_once_with( self.context, mock.ANY, heal_vnf_req)
def test_create(self): vnf_instance_data = fakes.get_vnf_instance_data( self.vnf_package.vnfd_id) vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() self.assertTrue(vnf_instance.id) self.assertEqual('NOT_INSTANTIATED', vnf_instance.instantiation_state) self.assertEqual(self.vnf_package.vnfd_id, vnf_instance.vnfd_id) self.assertEqual('test vnf provider', vnf_instance.vnf_provider) self.assertEqual('Sample VNF', vnf_instance.vnf_product_name) self.assertEqual('1.0', vnf_instance.vnf_software_version) self.assertEqual('1.0', vnf_instance.vnfd_version) self.assertEqual(vnf_instance_data.get('tenant_id'), vnf_instance.tenant_id)
def test_vnf_instance_list_get_by_filters(self): vnf_instance_data = fakes.get_vnf_instance_data( self.vnf_package.vnfd_id) vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() filters = { 'field': 'instantiation_state', 'model': 'VnfInstance', 'value': 'NOT_INSTANTIATED', 'op': '==' } vnf_instance_list = objects.VnfInstanceList.get_by_filters( self.context, filters=filters) self.assertEqual(1, len(vnf_instance_list))
def test_instantiate_vnf_instance_with_vnf_package_in_use( self, mock_vnf_package_in_use, mock_get_lock): vnf_package_vnfd = self._create_and_upload_vnf_package() vnf_instance_data = fake_obj.get_vnf_instance_data( vnf_package_vnfd.vnfd_id) mock_vnf_package_in_use.return_value = True vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() instantiate_vnf_req = vnflcm_fakes.get_instantiate_vnf_request_obj() self.conductor.instantiate(self.context, vnf_instance, instantiate_vnf_req) self.vnflcm_driver.instantiate_vnf.assert_called_once_with( self.context, mock.ANY, instantiate_vnf_req) mock_vnf_package_in_use.assert_called_once()
def test_save(self, mock_update_vnf): vnf_instance_data = fakes.get_vnf_instance_data( self.vnf_package.vnfd_id) vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() mock_update_vnf.return_value = \ fakes.vnf_instance_model_object(vnf_instance) vnf_instance.vnf_instance_name = 'fake-name' vnf_instance.save() mock_update_vnf.assert_called_with( self.context, vnf_instance.id, { 'vnf_instance_name': 'fake-name', 'vim_connection_info': []}, columns_to_join=['instantiated_vnf_info'])
def _create_vnf_instance(self, vim_connection_info=None): vnf_instance = objects.VnfInstance( context=self.context, vnf_instance_name="Sample vnf instance name", vnf_instance_description="Sample vnf instance description", vnfd_id=uuidsentinel.vnfd_id, instantiation_state=fields.VnfInstanceState.INSTANTIATED, vnf_provider='Company', vnf_product_name='Sample VNF', vnf_software_version='1.0', vnfd_version='1.0', tenant_id=uuidsentinel.tenant_id) if vim_connection_info: vnf_instance.vim_connection_info = vim_connection_info return vnf_instance
def test_instantiate_vnf_instance_failed_with_exception( self, mock_log, mock_is_package_in_use, mock_get_lock): 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() mock_is_package_in_use.side_effect = Exception self.conductor.instantiate(self.context, vnf_instance, instantiate_vnf_req) self.vnflcm_driver.instantiate_vnf.assert_called_once_with( self.context, mock.ANY, instantiate_vnf_req) mock_is_package_in_use.assert_called_once() expected_log = 'Failed to update usage_state of vnf package %s' mock_log.error.assert_called_once_with(expected_log, vnf_package_vnfd.package_uuid)
def get_vnf_instance_object( instantiated_vnf_info=None, instantiation_state=fields.VnfInstanceState.NOT_INSTANTIATED): inst_vnf_info = instantiated_vnf_info or get_vnf_instantiated_info() vnf_instance = objects.VnfInstance( id=uuidsentinel.vnf_instance_id, vnf_instance_name="Test-Vnf-Instance", vnf_instance_description="vnf instance description", instantiation_state=instantiation_state, vnfd_id=uuidsentinel.vnfd_id, vnf_provider="sample provider", vnf_product_name="vnf product name", vnf_software_version='1.0', vnfd_version="2", instantiated_vnf_info=inst_vnf_info) return vnf_instance
def test_instantiate_vnf_instance_already_instantiated(self, mock_log, mock_package_in_use, mock_get_lock): 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_data['instantiation_state'] =\ fields.VnfInstanceState.INSTANTIATED vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() instantiate_vnf_req = vnflcm_fakes.get_instantiate_vnf_request_obj() self.conductor.instantiate(self.context, vnf_instance, instantiate_vnf_req) self.vnflcm_driver.instantiate_vnf.assert_not_called() mock_package_in_use.assert_not_called() expected_log = 'Vnf instance %(id)s is already in %(state)s state.' mock_log.error.assert_called_once_with(expected_log, {'id': vnf_instance.id, 'state': fields.VnfInstanceState.INSTANTIATED})
def test_terminate_vnf_instance_failed_to_update_usage_state( self, mock_log, mock_is_package_in_use, mock_get_lock): 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_data['instantiation_state'] =\ fields.VnfInstanceState.INSTANTIATED vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() terminate_vnf_req = objects.TerminateVnfRequest( termination_type=fields.VnfInstanceTerminationType.GRACEFUL) mock_is_package_in_use.side_effect = Exception self.conductor.terminate(self.context, vnf_instance, terminate_vnf_req) self.vnflcm_driver.terminate_vnf.assert_called_once_with( self.context, mock.ANY, terminate_vnf_req) expected_msg = "Failed to update usage_state of vnf package %s" mock_log.error.assert_called_once_with(expected_msg, vnf_package_vnfd.package_uuid)
def test_terminate_vnf_instance(self, mock_package_in_use, mock_get_lock): vnf_package_vnfd = self._create_and_upload_vnf_package() vnf_instance_data = fake_obj.get_vnf_instance_data( vnf_package_vnfd.vnfd_id) mock_package_in_use.return_value = True vnf_instance_data['instantiation_state'] =\ fields.VnfInstanceState.INSTANTIATED vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() terminate_vnf_req = objects.TerminateVnfRequest( termination_type=fields.VnfInstanceTerminationType.GRACEFUL) self.conductor.terminate(self.context, vnf_instance, terminate_vnf_req) self.vnflcm_driver.terminate_vnf.assert_called_once_with( self.context, mock.ANY, terminate_vnf_req) mock_package_in_use.assert_called_once()
def test_heal_vnf_instance_already_not_instantiated(self, mock_log, mock_get_lock): 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_data['instantiation_state'] =\ fields.VnfInstanceState.NOT_INSTANTIATED vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() heal_vnf_req = objects.HealVnfRequest(cause="healing request") self.conductor.heal(self.context, vnf_instance, heal_vnf_req) self.vnflcm_driver.heal_vnf.assert_not_called() expected_log = ('Heal action cannot be performed on vnf %(id)s ' 'which is in %(state)s state.') mock_log.error.assert_called_once_with(expected_log, {'id': vnf_instance.id, 'state': fields.VnfInstanceState.NOT_INSTANTIATED})
def _create_vnf_instance(self): vnf_package = objects.VnfPackage(context=self.context, **fakes.vnf_package_data) vnf_package.create() vnf_pack_vnfd = fakes.get_vnf_package_vnfd_data( vnf_package.id, uuidsentinel.vnfd_id) vnf_pack_vnfd_obj = objects.VnfPackageVnfd(context=self.context, **vnf_pack_vnfd) vnf_pack_vnfd_obj.create() vnf_package.vnf_package = "ONBOARDED" vnf_package.save() vnf_instance_data = fakes.get_vnf_instance_data( vnf_pack_vnfd_obj.vnfd_id) vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) vnf_instance.create() return vnf_instance
def return_vnf_instance( instantiated_state=fields.VnfInstanceState.NOT_INSTANTIATED, scale_status=None, **updates): if instantiated_state == fields.VnfInstanceState.NOT_INSTANTIATED: data = _model_non_instantiated_vnf_instance(**updates) data['instantiation_state'] = instantiated_state vnf_instance_obj = objects.VnfInstance(**data) elif scale_status: data = _model_non_instantiated_vnf_instance(**updates) data['instantiation_state'] = instantiated_state vnf_instance_obj = objects.VnfInstance(**data) get_instantiated_vnf_info = { 'flavour_id': uuidsentinel.flavour_id, 'vnf_state': 'STARTED', 'instance_id': uuidsentinel.instance_id } instantiated_vnf_info = get_instantiated_vnf_info s_status = {"aspect_id": "SP1", "scale_level": 1} scale_status = objects.ScaleInfo(**s_status) instantiated_vnf_info.update({ "ext_cp_info": [], 'ext_virtual_link_info': [], 'ext_managed_virtual_link_info': [], 'vnfc_resource_info': [], 'vnf_virtual_link_resource_info': [], 'virtual_storage_resource_info': [], "flavour_id": "simple", "scale_status": [scale_status], "vnf_instance_id": "171f3af2-a753-468a-b5a7-e3e048160a79", "additional_params": { "key": "value" }, 'vnf_state': "STARTED" }) info_data = objects.InstantiatedVnfInfo(**instantiated_vnf_info) vnf_instance_obj.instantiated_vnf_info = info_data else: data = _model_non_instantiated_vnf_instance(**updates) data['instantiation_state'] = instantiated_state vnf_instance_obj = objects.VnfInstance(**data) inst_vnf_info = objects.InstantiatedVnfInfo.obj_from_primitive( { "ext_cp_info": [], 'ext_virtual_link_info': [], 'ext_managed_virtual_link_info': [], 'vnfc_resource_info': [], 'vnf_virtual_link_resource_info': [], 'virtual_storage_resource_info': [], "flavour_id": "simple", "additional_params": { "key": "value" }, 'vnf_state': "STARTED" }, None) vnf_instance_obj.instantiated_vnf_info = inst_vnf_info return vnf_instance_obj
def test_destroy_failure_without_id(self): vnf_instance_obj = objects.VnfInstance(context=self.context) self.assertRaises(exceptions.ObjectActionError, vnf_instance_obj.destroy, self.context)
def test_create_failure_with_id(self): vnf_instance_data = fakes.get_vnf_instance_data_with_id( self.vnf_package.vnfd_id) vnf_instance = objects.VnfInstance(context=self.context, **vnf_instance_data) self.assertRaises(exceptions.ObjectActionError, vnf_instance.create)