From 131d222d2b5b74db600fd3765876ec4d5c2559fa Mon Sep 17 00:00:00 2001 From: Manpreet Kaur Date: Wed, 9 Mar 2022 18:53:39 +0530 Subject: [PATCH] Add specific tenant to vnf resources This patch adds tenant information in VNF resources. Change-Id: I03827c7da57edbb7d1352a6c548b8ef32b2b54c0 --- tacker/db/db_sqlalchemy/models.py | 1 + ...6ae359ab0d6_add_tenant_id_to_lcm_subscriptions_and_.py | 4 ++++ tacker/objects/vnf_resources.py | 3 ++- tacker/tests/unit/objects/fakes.py | 3 ++- tacker/tests/unit/objects/test_vnf_resource.py | 1 + tacker/tests/unit/vnfm/infra_drivers/kubernetes/fakes.py | 1 + .../infra_drivers/kubernetes/test_kubernetes_driver.py | 8 ++++++++ .../openstack/fixture_data/fixture_data_utils.py | 3 ++- .../openstack/test_etsi_translate_template.py | 6 ++++-- tacker/vnfm/infra_drivers/kubernetes/kubernetes_driver.py | 1 + tacker/vnfm/infra_drivers/openstack/openstack.py | 4 +++- 11 files changed, 29 insertions(+), 6 deletions(-) diff --git a/tacker/db/db_sqlalchemy/models.py b/tacker/db/db_sqlalchemy/models.py index f1585f767..4db6e98de 100644 --- a/tacker/db/db_sqlalchemy/models.py +++ b/tacker/db/db_sqlalchemy/models.py @@ -265,6 +265,7 @@ class VnfResource(model_base.BASE, models.SoftDeleteMixin, resource_type = sa.Column(sa.String(255), nullable=False) resource_identifier = sa.Column(sa.String(255), nullable=False) resource_status = sa.Column(sa.String(255), nullable=False) + tenant_id = sa.Column('tenant_id', sa.String(length=64), nullable=False) class VnfLcmFilters(model_base.BASE): diff --git a/tacker/db/migration/alembic_migrations/versions/d6ae359ab0d6_add_tenant_id_to_lcm_subscriptions_and_.py b/tacker/db/migration/alembic_migrations/versions/d6ae359ab0d6_add_tenant_id_to_lcm_subscriptions_and_.py index 4f36f497b..f410e5907 100644 --- a/tacker/db/migration/alembic_migrations/versions/d6ae359ab0d6_add_tenant_id_to_lcm_subscriptions_and_.py +++ b/tacker/db/migration/alembic_migrations/versions/d6ae359ab0d6_add_tenant_id_to_lcm_subscriptions_and_.py @@ -37,3 +37,7 @@ def upgrade(active_plugins=None, options=None): op.add_column('vnf_lcm_op_occs', sa.Column('tenant_id', sa.String(length=64), nullable=False)) + + op.add_column('vnf_resources', + sa.Column('tenant_id', sa.String(length=64), + nullable=False)) diff --git a/tacker/objects/vnf_resources.py b/tacker/objects/vnf_resources.py index 48074d379..eff4f429c 100644 --- a/tacker/objects/vnf_resources.py +++ b/tacker/objects/vnf_resources.py @@ -106,7 +106,8 @@ class VnfResource(base.TackerObject, base.TackerPersistentObject): 'resource_name': fields.StringField(nullable=True), 'resource_type': fields.StringField(nullable=False), 'resource_identifier': fields.StringField(nullable=False), - 'resource_status': fields.StringField(nullable=True, default='status') + 'resource_status': fields.StringField(nullable=True, default='status'), + 'tenant_id': fields.StringField(nullable=False) } def __init__(self, context=None, **kwargs): diff --git a/tacker/tests/unit/objects/fakes.py b/tacker/tests/unit/objects/fakes.py index 6248e3d6d..ef8cac4ec 100644 --- a/tacker/tests/unit/objects/fakes.py +++ b/tacker/tests/unit/objects/fakes.py @@ -299,7 +299,8 @@ def fake_vnf_resource_data(instance_id): 'resource_name': "test", 'resource_type': "image", 'resource_identifier': uuidsentinel.image_id, - 'resource_status': "status" + 'resource_status': "status", + 'tenant_id': uuidsentinel.tenant_id } diff --git a/tacker/tests/unit/objects/test_vnf_resource.py b/tacker/tests/unit/objects/test_vnf_resource.py index 04026228e..2d0769c60 100644 --- a/tacker/tests/unit/objects/test_vnf_resource.py +++ b/tacker/tests/unit/objects/test_vnf_resource.py @@ -59,6 +59,7 @@ class TestVnfResource(SqlTestCase): **fakes.fake_vnf_resource_data(self.vnf_instance.id)) vnf_resource.create() self.assertTrue(vnf_resource.id) + self.assertTrue(vnf_resource.tenant_id) def test_create_with_id(self): diff --git a/tacker/tests/unit/vnfm/infra_drivers/kubernetes/fakes.py b/tacker/tests/unit/vnfm/infra_drivers/kubernetes/fakes.py index cd84a35f5..aea80800a 100644 --- a/tacker/tests/unit/vnfm/infra_drivers/kubernetes/fakes.py +++ b/tacker/tests/unit/vnfm/infra_drivers/kubernetes/fakes.py @@ -1051,6 +1051,7 @@ def get_vnf_resource_list(kind, name='fake_name'): vnf_resource.vnf_instance_id = uuidsentinel.vnf_instance_id vnf_resource.resource_name = name vnf_resource.resource_type = f"v1,{kind}" + vnf_resource.tenant_id = uuidsentinel.tenant_id return [vnf_resource] diff --git a/tacker/tests/unit/vnfm/infra_drivers/kubernetes/test_kubernetes_driver.py b/tacker/tests/unit/vnfm/infra_drivers/kubernetes/test_kubernetes_driver.py index 0d8d07289..71e6f23e6 100644 --- a/tacker/tests/unit/vnfm/infra_drivers/kubernetes/test_kubernetes_driver.py +++ b/tacker/tests/unit/vnfm/infra_drivers/kubernetes/test_kubernetes_driver.py @@ -598,6 +598,7 @@ class TestKubernetes(base.TestCase): vnf_resource.resource_type = "v1,Pod" vnf_resource.resource_identifier = '' vnf_resource.resource_status = '' + vnf_resource.tenant_id = vnf_instance.tenant_id self.assertRaises(exceptions.VnfArtifactNotFound, self.kubernetes.pre_instantiation_vnf, @@ -702,6 +703,7 @@ class TestKubernetes(base.TestCase): vnf_resource.vnf_instance_id = vnf_instance_id vnf_resource.resource_name = resource_name vnf_resource.resource_type = resource_type + vnf_resource.tenant_id = vnf_instance.tenant_id mock_vnf_resource_list.return_value = [vnf_resource] self.kubernetes.delete(plugin=None, context=self.context, vnf_id=vnf_id, @@ -1192,14 +1194,17 @@ class TestKubernetes(base.TestCase): vnf_resource1.vnf_instance_id = vnf_instance_id vnf_resource1.resource_name = "fake_name1" vnf_resource1.resource_type = "storage.k8s.io/v1,StorageClass" + vnf_resource1.tenant_id = vnf_instance.tenant_id vnf_resource2 = models.VnfResource() vnf_resource2.vnf_instance_id = vnf_instance_id vnf_resource2.resource_name = "fake_name2" vnf_resource2.resource_type = "v1,PersistentVolume" + vnf_resource2.tenant_id = vnf_instance.tenant_id vnf_resource3 = models.VnfResource() vnf_resource3.vnf_instance_id = vnf_instance_id vnf_resource3.resource_name = "fake_name3" vnf_resource3.resource_type = "v1,PersistentVolumeClaim" + vnf_resource3.tenant_id = vnf_instance.tenant_id mock_vnf_resource_list.return_value = \ [vnf_resource1, vnf_resource2, vnf_resource3] mock_delete_storage_class.return_value = client.V1Status() @@ -1283,6 +1288,7 @@ class TestKubernetes(base.TestCase): vnf_resource.vnf_instance_id = vnf_instance_id vnf_resource.resource_name = resource_name vnf_resource.resource_type = resource_type + vnf_resource.tenant_id = vnf_instance.tenant_id mock_vnf_resource_list.return_value = [vnf_resource] self.kubernetes.delete_wait(plugin=None, context=self.context, vnf_id=vnf_id, @@ -2853,6 +2859,7 @@ class TestKubernetes(base.TestCase): vnf_resource.vnf_instance_id = self.vnf_instance.id vnf_resource.resource_name = "vdu1" vnf_resource.resource_type = "apps/v1,Deployment" + vnf_resource.tenant_id = self.vnf_instance.tenant_id mock_vnf_resource_list.return_value = [vnf_resource] vnfc_resource_info = [] vnfc_resource_info.append( @@ -2907,6 +2914,7 @@ class TestKubernetes(base.TestCase): vnf_resource.vnf_instance_id = self.vnf_instance.id vnf_resource.resource_name = "vdu1" vnf_resource.resource_type = "apps/v1,Deployment" + vnf_resource.tenant_id = self.vnf_instance.tenant_id mock_vnf_resource_list.return_value = [vnf_resource] vnfc_resource_info = [] vnfc_resource_info.append( diff --git a/tacker/tests/unit/vnfm/infra_drivers/openstack/fixture_data/fixture_data_utils.py b/tacker/tests/unit/vnfm/infra_drivers/openstack/fixture_data/fixture_data_utils.py index 1eecf388d..d436b0a72 100644 --- a/tacker/tests/unit/vnfm/infra_drivers/openstack/fixture_data/fixture_data_utils.py +++ b/tacker/tests/unit/vnfm/infra_drivers/openstack/fixture_data/fixture_data_utils.py @@ -91,7 +91,8 @@ def get_vnf_instance_object(instantiated_vnf_info=None, vnf_provider="sample provider", vnf_product_name="vnf product name", vnf_software_version='1.0', vnfd_version="2", instantiated_vnf_info=inst_vnf_info, - vnf_metadata={'namespace': 'default'}) + vnf_metadata={'namespace': 'default'}, + tenant_id=uuidsentinel.tenant_id) return vnf_instance diff --git a/tacker/tests/unit/vnfm/infra_drivers/openstack/test_etsi_translate_template.py b/tacker/tests/unit/vnfm/infra_drivers/openstack/test_etsi_translate_template.py index edb86b0ae..656a94638 100644 --- a/tacker/tests/unit/vnfm/infra_drivers/openstack/test_etsi_translate_template.py +++ b/tacker/tests/unit/vnfm/infra_drivers/openstack/test_etsi_translate_template.py @@ -113,7 +113,8 @@ class TestEtsiTranslateTemplate(base.TestCase): 'VDU1': [objects.VnfResource(id=uuidsentinel.id, vnf_instance_id=uuidsentinel.vnf_instance_id, resource_type='image', - resource_identifier='glance-image-uuid_VDU1')]} + resource_identifier='glance-image-uuid_VDU1', + tenant_id=uuidsentinel.tenant_id)]} self.tth._generate_hot_from_tosca(vnfd_dict, dev_attrs, inst_req_info, grant_info) @@ -179,7 +180,8 @@ class TestEtsiTranslateTemplate(base.TestCase): 'VDU1': [objects.VnfResource(id=uuidsentinel.id, vnf_instance_id=uuidsentinel.vnf_instance_id, resource_type='image', - resource_identifier='glance-image-uuid_VDU1')]} + resource_identifier='glance-image-uuid_VDU1', + tenant_id=uuidsentinel.tenant_id)]} self.tth._generate_hot_from_tosca(vnfd_dict, dev_attrs, inst_req_info, grant_info) diff --git a/tacker/vnfm/infra_drivers/kubernetes/kubernetes_driver.py b/tacker/vnfm/infra_drivers/kubernetes/kubernetes_driver.py index 1ce33ba44..3be98d3aa 100644 --- a/tacker/vnfm/infra_drivers/kubernetes/kubernetes_driver.py +++ b/tacker/vnfm/infra_drivers/kubernetes/kubernetes_driver.py @@ -1648,6 +1648,7 @@ class Kubernetes(abstract_driver.VnfAbstractDriver, file_content_dict.get('kind', '')]) vnf_resource.resource_identifier = '' vnf_resource.resource_status = '' + vnf_resource.tenant_id = vnf_instance.tenant_id return vnf_resource def pre_instantiation_vnf(self, context, vnf_instance, diff --git a/tacker/vnfm/infra_drivers/openstack/openstack.py b/tacker/vnfm/infra_drivers/openstack/openstack.py index a829fb40f..2c3635657 100644 --- a/tacker/vnfm/infra_drivers/openstack/openstack.py +++ b/tacker/vnfm/infra_drivers/openstack/openstack.py @@ -1038,7 +1038,9 @@ class OpenStack(abstract_driver.VnfAbstractDriver, vnf_resource = objects.VnfResource(context=context, vnf_instance_id=vnf_instance.id, resource_name=name, resource_type="image", - resource_status="CREATED", resource_identifier=image.id) + resource_status="CREATED", + resource_identifier=image.id, + tenant_id=vnf_instance.tenant_id) vnf_resources[node_name] = [vnf_resource] except Exception as exp: with excutils.save_and_reraise_exception():