From 78e95d58330dd045c9d2b2a436884a45d6f40291 Mon Sep 17 00:00:00 2001 From: Ai Hamano Date: Tue, 25 Apr 2023 09:25:56 +0900 Subject: [PATCH] Fix vnfdId format for VNF package This patch fixes the format of vnfdId for VNF package. ETSI NFV-SOL002/003 does not specify the format of vnfdId, but the current "vnf package API" can only handle vnfdId in UUID v4 format. In compliance with ETSI NFV-SOL002/003, this patch fixes "vnf package API" to handle vnfdId other than UUID v4 format. And change the vnfdId of the VNF package used in "test_individual_vnfc_mgmt_basic.py" for FT to a format other than UUID v4 format. Closes-Bug: #2015820 Change-Id: I8b5dbc416496c8a46f4b5e3b669c82c76db398c5 --- doc/source/user/vnfd-sol001.rst | 12 ++++ tacker/db/db_sqlalchemy/models.py | 4 +- .../4c0e2e2c2e02_alter_vnfd_id_format.py | 64 +++++++++++++++++++ .../alembic_migrations/versions/HEAD | 2 +- tacker/db/vnfm/vnfm_db.py | 13 ++-- tacker/objects/vnf.py | 2 +- tacker/objects/vnf_instance.py | 2 +- tacker/objects/vnf_package_vnfd.py | 2 +- tacker/objects/vnfd.py | 2 +- tacker/objects/vnfd_attribute.py | 2 +- tacker/tests/functional/base_v2.py | 5 +- .../tests/functional/sol_v2_common/base_v2.py | 4 +- .../basic_lcms_max_individual_vnfc/pkggen.py | 6 +- .../basic_lcms_min_individual_vnfc/pkggen.py | 7 +- .../pkggen.py | 6 +- .../pkggen.py | 6 +- .../update_vnf_max_individual_vnfc/pkggen.py | 6 +- .../test_individual_vnfc_mgmt_basic.py | 21 ++++-- 18 files changed, 129 insertions(+), 37 deletions(-) create mode 100644 tacker/db/migration/alembic_migrations/versions/4c0e2e2c2e02_alter_vnfd_id_format.py diff --git a/doc/source/user/vnfd-sol001.rst b/doc/source/user/vnfd-sol001.rst index 6aba37e76..9da0ba4aa 100644 --- a/doc/source/user/vnfd-sol001.rst +++ b/doc/source/user/vnfd-sol001.rst @@ -112,6 +112,15 @@ in section 6.8.1 in `NFV-SOL001 v2.6.1`_. Its required properties are: * *flavour_description* - is description of the deployment flavour. The default can be "" (empty string). +.. note:: Section 6.8.1 of `NFV-SOL001 v2.6.1`_ states that the + ``descriptor_id`` string shall be UUID (`IETF RFC 4122`_: + "A Universally Unique IDentifier (UUID) URN Namespace"). + Tacker recommends using UUIDs according to `NFV-SOL001 v2.6.1`_, + but ``vnfdId`` defined in `NFV-SOL002 v3.3.1`_ / + `NFV-SOL003 v3.3.1`_ has no format restrictions, so any single-byte + character string (including alphabets, numbers, spaces, hyphens, + underscores, and periods) is also supported. + Topology Template Files ----------------------- @@ -251,5 +260,8 @@ resources such as VDU and CP. The file includes: .. _TOSCA-Simple-Profile-yaml-v1.2 : http://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.2/TOSCA-Simple-Profile-YAML-v1.2.html .. _NFV-SOL001 v2.6.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/001/02.06.01_60/gs_NFV-SOL001v020601p.pdf +.. _IETF RFC 4122 : https://datatracker.ietf.org/doc/html/rfc4122 +.. _NFV-SOL002 v3.3.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/03.03.01_60/gs_nfv-sol002v030301p.pdf +.. _NFV-SOL003 v3.3.1 : https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/03.03.01_60/gs_nfv-sol003v030301p.pdf .. _etsi_nfv_sol001_common_types.yaml : https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_common_types.yaml .. _etsi_nfv_sol001_vnfd_types.yaml : https://forge.etsi.org/rep/nfv/SOL001/raw/v2.6.1/etsi_nfv_sol001_vnfd_types.yaml diff --git a/tacker/db/db_sqlalchemy/models.py b/tacker/db/db_sqlalchemy/models.py index fa0741437..ed8fd6428 100644 --- a/tacker/db/db_sqlalchemy/models.py +++ b/tacker/db/db_sqlalchemy/models.py @@ -137,7 +137,7 @@ class VnfPackageVnfd(model_base.BASE, VnfPackageVnfdSoftDeleteMixin, package_uuid = sa.Column(sa.String(36), sa.ForeignKey('vnf_packages.id'), nullable=False) - vnfd_id = sa.Column(types.Uuid, nullable=False) + vnfd_id = sa.Column(sa.String(255), nullable=False) vnf_provider = sa.Column(sa.String(255), nullable=False) vnf_product_name = sa.Column(sa.String(255), nullable=False) vnf_software_version = sa.Column(sa.String(255), nullable=False) @@ -212,7 +212,7 @@ class VnfInstance(model_base.BASE, models.SoftDeleteMixin, vnf_product_name = sa.Column(sa.String(255), nullable=False) vnf_software_version = sa.Column(sa.String(255), nullable=False) vnfd_version = sa.Column(sa.String(255), nullable=False) - vnfd_id = sa.Column(types.Uuid, nullable=False) + vnfd_id = sa.Column(sa.String(255), nullable=False) instantiation_state = sa.Column(sa.String(255), nullable=False) task_state = sa.Column(sa.String(255), nullable=True) vim_connection_info = sa.Column(sa.JSON(), nullable=True) diff --git a/tacker/db/migration/alembic_migrations/versions/4c0e2e2c2e02_alter_vnfd_id_format.py b/tacker/db/migration/alembic_migrations/versions/4c0e2e2c2e02_alter_vnfd_id_format.py new file mode 100644 index 000000000..8c4c4a141 --- /dev/null +++ b/tacker/db/migration/alembic_migrations/versions/4c0e2e2c2e02_alter_vnfd_id_format.py @@ -0,0 +1,64 @@ +# Copyright 2023 OpenStack Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# + +"""alter_vnfd_id_format + +Revision ID: 4c0e2e2c2e02 +Revises: 34cfceb25a49 +Create Date: 2023-04-28 08:05:13.246214 + +""" + +# revision identifiers, used by Alembic. +revision = '4c0e2e2c2e02' +down_revision = '34cfceb25a49' + +from alembic import op +import sqlalchemy as sa + +# flake8: noqa: E402 + +def upgrade(active_plugins=None, options=None): + bind = op.get_bind() + engine = bind.engine + + fk_tables = ('servicetypes', 'vnf', 'vnfd_attribute') + fk_prefixes = {"servicetypes":"servicetypes", "vnf":"devices", + "vnfd_attribute":"devicetemplateattributes"} + for table in fk_tables: + if engine.name == 'postgresql': + alter_sql_drop_foreign_key = f"ALTER TABLE {table} \ + DROP CONSTRAINT {fk_prefixes[table]}_template_id_fkey;" + else: + alter_sql_drop_foreign_key = f"ALTER TABLE {table} \ + DROP FOREIGN KEY {table}_ibfk_1;" + op.execute(alter_sql_drop_foreign_key) + + op.alter_column('vnfd', 'id', type_=sa.String(255), + existing_type=sa.String(36), nullable=False) + + vnfd_id_tables = ('servicetypes', 'vnf', 'vnfd_attribute', + 'vnf_instances', 'vnf_package_vnfd') + for table in vnfd_id_tables: + op.alter_column(table, 'vnfd_id', type_=sa.String(255), + existing_type=sa.String(36), nullable=False) + + for table in fk_tables: + if engine.name == 'postgresql': + foreign_key = f"{fk_prefixes[table]}_template_id_fkey" + else: + foreign_key = f"{table}_ibfk_1" + op.create_foreign_key(foreign_key, table, 'vnfd', ['vnfd_id'], + ['id']) diff --git a/tacker/db/migration/alembic_migrations/versions/HEAD b/tacker/db/migration/alembic_migrations/versions/HEAD index 603928232..6a7727f6f 100644 --- a/tacker/db/migration/alembic_migrations/versions/HEAD +++ b/tacker/db/migration/alembic_migrations/versions/HEAD @@ -1 +1 @@ -34cfceb25a49 \ No newline at end of file +4c0e2e2c2e02 \ No newline at end of file diff --git a/tacker/db/vnfm/vnfm_db.py b/tacker/db/vnfm/vnfm_db.py index 4e42f11d3..579196228 100644 --- a/tacker/db/vnfm/vnfm_db.py +++ b/tacker/db/vnfm/vnfm_db.py @@ -59,11 +59,14 @@ CREATE_STATES = (constants.PENDING_CREATE, constants.DEAD) ########################################################################### # db tables -class VNFD(model_base.BASE, models_v1.HasId, models_v1.HasTenant, - models_v1.Audit): +class VNFD(model_base.BASE, models_v1.HasTenant, models_v1.Audit): """Represents VNFD to create VNF.""" __tablename__ = 'vnfd' + # vnfdId + id = sa.Column(sa.String(255), primary_key=True, + default=uuidutils.generate_uuid) + # Descriptive name name = sa.Column(sa.String(255), nullable=False) description = sa.Column(sa.Text) @@ -98,7 +101,7 @@ class ServiceType(model_base.BASE, models_v1.HasId, models_v1.HasTenant): Since a vnf may provide many services, This is one-to-many relationship. """ - vnfd_id = sa.Column(types.Uuid, sa.ForeignKey('vnfd.id'), + vnfd_id = sa.Column(sa.String(255), sa.ForeignKey('vnfd.id'), nullable=False) service_type = sa.Column(sa.String(64), nullable=False) @@ -111,7 +114,7 @@ class VNFDAttribute(model_base.BASE, models_v1.HasId): """ __tablename__ = 'vnfd_attribute' - vnfd_id = sa.Column(types.Uuid, sa.ForeignKey('vnfd.id'), + vnfd_id = sa.Column(sa.String(255), sa.ForeignKey('vnfd.id'), nullable=False) key = sa.Column(sa.String(255), nullable=False) value = sa.Column(sa.TEXT(65535), nullable=True) @@ -126,7 +129,7 @@ class VNF(model_base.BASE, models_v1.HasId, models_v1.HasTenant, """ __tablename__ = 'vnf' - vnfd_id = sa.Column(types.Uuid, sa.ForeignKey('vnfd.id')) + vnfd_id = sa.Column(sa.String(255), sa.ForeignKey('vnfd.id')) vnfd = orm.relationship('VNFD') name = sa.Column(sa.String(255), nullable=False) diff --git a/tacker/objects/vnf.py b/tacker/objects/vnf.py index 2ff0ec797..a8aa43db2 100644 --- a/tacker/objects/vnf.py +++ b/tacker/objects/vnf.py @@ -68,7 +68,7 @@ class VNF(base.TackerObject, base.TackerObjectDictCompat, 'id': fields.UUIDField(nullable=False), 'tenant_id': fields.UUIDField(nullable=False), 'name': fields.StringField(nullable=False), - 'vnfd_id': fields.UUIDField(nullable=False), + 'vnfd_id': fields.StringField(nullable=False), 'instance_id': fields.StringField(nullable=True), 'mgmt_ip_address': fields.StringField(nullable=True), 'status': fields.StringField(nullable=True), diff --git a/tacker/objects/vnf_instance.py b/tacker/objects/vnf_instance.py index 8db05f66c..fc009e8be 100644 --- a/tacker/objects/vnf_instance.py +++ b/tacker/objects/vnf_instance.py @@ -360,7 +360,7 @@ class VnfInstance(base.TackerObject, base.TackerPersistentObject, 'vnf_instance_description', 'string', 'VnfInstance'), 'instantiationState': ('instantiation_state', 'string', 'VnfInstance'), 'taskState': ('task_state', 'string', 'VnfInstance'), - 'vnfdId': ('vnfd_id', 'uuid', 'VnfInstance'), + 'vnfdId': ('vnfd_id', 'string', 'VnfInstance'), 'vnfProvider': ('vnf_provider', 'string', 'VnfInstance'), 'vnfProductName': ('vnf_product_name', 'string', 'VnfInstance'), 'vnfSoftwareVersion': ( diff --git a/tacker/objects/vnf_package_vnfd.py b/tacker/objects/vnf_package_vnfd.py index e932e53b5..b4f8019ae 100644 --- a/tacker/objects/vnf_package_vnfd.py +++ b/tacker/objects/vnf_package_vnfd.py @@ -171,7 +171,7 @@ class VnfPackageVnfd(base.TackerObject, base.TackerObjectDictCompat, fields = { 'id': fields.UUIDField(nullable=False), 'package_uuid': fields.UUIDField(nullable=False), - 'vnfd_id': fields.UUIDField(nullable=False), + 'vnfd_id': fields.StringField(nullable=False), 'vnf_provider': fields.StringField(nullable=False), 'vnf_product_name': fields.StringField(nullable=False), 'vnf_software_version': fields.StringField(nullable=False), diff --git a/tacker/objects/vnfd.py b/tacker/objects/vnfd.py index e8a503b4e..a76a9aa37 100644 --- a/tacker/objects/vnfd.py +++ b/tacker/objects/vnfd.py @@ -88,7 +88,7 @@ class Vnfd(base.TackerObject, base.TackerObjectDictCompat, VERSION = '1.0' fields = { - 'id': fields.UUIDField(nullable=False), + 'id': fields.StringField(nullable=False), 'tenant_id': fields.UUIDField(nullable=False), 'name': fields.StringField(nullable=False), 'description': fields.StringField(nullable=True), diff --git a/tacker/objects/vnfd_attribute.py b/tacker/objects/vnfd_attribute.py index 7cefa7b89..96e4d8390 100644 --- a/tacker/objects/vnfd_attribute.py +++ b/tacker/objects/vnfd_attribute.py @@ -80,7 +80,7 @@ class VnfdAttribute(base.TackerObject, base.TackerObjectDictCompat, fields = { 'id': fields.UUIDField(nullable=False), - 'vnfd_id': fields.UUIDField(nullable=False), + 'vnfd_id': fields.StringField(nullable=False), 'key': fields.StringField(nullable=False), 'value': fields.StringField(nullable=True), } diff --git a/tacker/tests/functional/base_v2.py b/tacker/tests/functional/base_v2.py index 7dd00bbc0..8decdda0e 100644 --- a/tacker/tests/functional/base_v2.py +++ b/tacker/tests/functional/base_v2.py @@ -118,9 +118,10 @@ class BaseTackerTestV2(base.BaseTestCase): @classmethod def create_vnf_package(cls, sample_path, user_data={}, image_path=None, nfvo=False, userdata_path=None, - provider=None, namespace=None): + provider=None, namespace=None, vnfd_id=None): + if vnfd_id is None: + vnfd_id = uuidutils.generate_uuid() - vnfd_id = uuidutils.generate_uuid() tmp_dir = tempfile.mkdtemp() utils.make_zip(sample_path, tmp_dir, vnfd_id, image_path, diff --git a/tacker/tests/functional/sol_v2_common/base_v2.py b/tacker/tests/functional/sol_v2_common/base_v2.py index 94807d13a..f8900da07 100644 --- a/tacker/tests/functional/sol_v2_common/base_v2.py +++ b/tacker/tests/functional/sol_v2_common/base_v2.py @@ -49,12 +49,12 @@ class BaseSolV2Test(base_v2.BaseTackerTestV2): @classmethod def create_vnf_package(cls, sample_path, user_data={}, image_path=None, nfvo=False, userdata_path=None, - provider=None): + provider=None, vnfd_id=None): return super().create_vnf_package(sample_path, user_data=user_data, image_path=image_path, nfvo=nfvo, userdata_path=userdata_path, - provider=provider) + provider=provider, vnfd_id=vnfd_id) def get_network_ids(self, networks): path = "/v2.0/networks" diff --git a/tacker/tests/functional/sol_v2_common/samples/basic_lcms_max_individual_vnfc/pkggen.py b/tacker/tests/functional/sol_v2_common/samples/basic_lcms_max_individual_vnfc/pkggen.py index 329b2a9df..070fc10e1 100644 --- a/tacker/tests/functional/sol_v2_common/samples/basic_lcms_max_individual_vnfc/pkggen.py +++ b/tacker/tests/functional/sol_v2_common/samples/basic_lcms_max_individual_vnfc/pkggen.py @@ -16,17 +16,17 @@ import json import os import shutil +import string import tempfile -from oslo_utils import uuidutils - from tacker.tests.functional.sol_v2_common import paramgen from tacker.tests.functional.sol_v2_common import utils +SUPPORT_STRING_FOR_VNFD_ID = string.ascii_letters + string.digits + "-._ " +vnfd_id = SUPPORT_STRING_FOR_VNFD_ID + "max_vnfd_id" zip_file_name = os.path.basename(os.path.abspath(".")) + '.zip' tmp_dir = tempfile.mkdtemp() -vnfd_id = uuidutils.generate_uuid() # tacker/tests/etc... image_dir = "../../../../etc/samples/etsi/nfv/common/Files/images/" diff --git a/tacker/tests/functional/sol_v2_common/samples/basic_lcms_min_individual_vnfc/pkggen.py b/tacker/tests/functional/sol_v2_common/samples/basic_lcms_min_individual_vnfc/pkggen.py index a54ffb49d..53ef137fc 100644 --- a/tacker/tests/functional/sol_v2_common/samples/basic_lcms_min_individual_vnfc/pkggen.py +++ b/tacker/tests/functional/sol_v2_common/samples/basic_lcms_min_individual_vnfc/pkggen.py @@ -16,17 +16,18 @@ import json import os import shutil +import string import tempfile -from oslo_utils import uuidutils - from tacker.tests.functional.sol_v2_common import paramgen from tacker.tests.functional.sol_v2_common import utils +SUPPORT_STRING_FOR_VNFD_ID = string.ascii_letters + string.digits + "-._ " +vnfd_id = SUPPORT_STRING_FOR_VNFD_ID + "min_vnfd_id" zip_file_name = os.path.basename(os.path.abspath(".")) + '.zip' tmp_dir = tempfile.mkdtemp() -vnfd_id = uuidutils.generate_uuid() + # tacker/sol_refactored/infra_drivers/openstack/userdata_standard.py # /tests/functional/sol_v2_common/samples/sampleX userdata_dir = "../../../../../sol_refactored/infra_drivers/openstack/" diff --git a/tacker/tests/functional/sol_v2_common/samples/change_vnfpkg_max_individual_vnfc/pkggen.py b/tacker/tests/functional/sol_v2_common/samples/change_vnfpkg_max_individual_vnfc/pkggen.py index df900461d..30a0e231a 100644 --- a/tacker/tests/functional/sol_v2_common/samples/change_vnfpkg_max_individual_vnfc/pkggen.py +++ b/tacker/tests/functional/sol_v2_common/samples/change_vnfpkg_max_individual_vnfc/pkggen.py @@ -16,17 +16,17 @@ import json import os import shutil +import string import tempfile -from oslo_utils import uuidutils - from tacker.tests.functional.sol_v2_common import paramgen from tacker.tests.functional.sol_v2_common import utils +SUPPORT_STRING_FOR_VNFD_ID = string.ascii_letters + string.digits + "-._ " +vnfd_id = SUPPORT_STRING_FOR_VNFD_ID + "new_max_vnfd_id" zip_file_name = os.path.basename(os.path.abspath(".")) + '.zip' tmp_dir = tempfile.mkdtemp() -vnfd_id = uuidutils.generate_uuid() # tacker/sol_refactored/infra_drivers/openstack/userdata_standard.py # /tests/functional/sol_v2_common/samples/sampleX diff --git a/tacker/tests/functional/sol_v2_common/samples/change_vnfpkg_or_update_min_individual_vnfc/pkggen.py b/tacker/tests/functional/sol_v2_common/samples/change_vnfpkg_or_update_min_individual_vnfc/pkggen.py index 897c011f3..cb6045542 100644 --- a/tacker/tests/functional/sol_v2_common/samples/change_vnfpkg_or_update_min_individual_vnfc/pkggen.py +++ b/tacker/tests/functional/sol_v2_common/samples/change_vnfpkg_or_update_min_individual_vnfc/pkggen.py @@ -16,17 +16,17 @@ import json import os import shutil +import string import tempfile -from oslo_utils import uuidutils - from tacker.tests.functional.sol_v2_common import paramgen from tacker.tests.functional.sol_v2_common import utils +SUPPORT_STRING_FOR_VNFD_ID = string.ascii_letters + string.digits + "-._ " +vnfd_id = SUPPORT_STRING_FOR_VNFD_ID + "upd_new_min_vnfd_id" zip_file_name = os.path.basename(os.path.abspath(".")) + '.zip' tmp_dir = tempfile.mkdtemp() -vnfd_id = uuidutils.generate_uuid() # tacker/tests/etc... image_dir = "../../../../etc/samples/etsi/nfv/common/Files/images/" diff --git a/tacker/tests/functional/sol_v2_common/samples/update_vnf_max_individual_vnfc/pkggen.py b/tacker/tests/functional/sol_v2_common/samples/update_vnf_max_individual_vnfc/pkggen.py index 5100f7882..de3445446 100644 --- a/tacker/tests/functional/sol_v2_common/samples/update_vnf_max_individual_vnfc/pkggen.py +++ b/tacker/tests/functional/sol_v2_common/samples/update_vnf_max_individual_vnfc/pkggen.py @@ -16,17 +16,17 @@ import json import os import shutil +import string import tempfile -from oslo_utils import uuidutils - from tacker.tests.functional.sol_v2_common import paramgen from tacker.tests.functional.sol_v2_common import utils +SUPPORT_STRING_FOR_VNFD_ID = string.ascii_letters + string.digits + "-._ " +vnfd_id = SUPPORT_STRING_FOR_VNFD_ID + "upd_max_vnfd_id" zip_file_name = os.path.basename(os.path.abspath(".")) + '.zip' tmp_dir = tempfile.mkdtemp() -vnfd_id = uuidutils.generate_uuid() # tacker/tests/etc... image_dir = "../../../../etc/samples/etsi/nfv/common/Files/images/" diff --git a/tacker/tests/functional/sol_v2_individual_vnfc_mgmt/test_individual_vnfc_mgmt_basic.py b/tacker/tests/functional/sol_v2_individual_vnfc_mgmt/test_individual_vnfc_mgmt_basic.py index 188ed9fb0..f7e9178d5 100644 --- a/tacker/tests/functional/sol_v2_individual_vnfc_mgmt/test_individual_vnfc_mgmt_basic.py +++ b/tacker/tests/functional/sol_v2_individual_vnfc_mgmt/test_individual_vnfc_mgmt_basic.py @@ -14,11 +14,19 @@ # under the License. import os +import string from tacker.objects import fields from tacker.tests.functional.sol_v2_common import base_v2 from tacker.tests.functional.sol_v2_common import paramgen +SUPPORT_STRING_FOR_VNFD_ID = f"{string.ascii_letters}{string.digits}-._ " +MAX_VNFD_ID = f"{SUPPORT_STRING_FOR_VNFD_ID}max_vnfd_id" +MIN_VNFD_ID = f"{SUPPORT_STRING_FOR_VNFD_ID}min_vnfd_id" +UPD_MAX_VNFD_ID = f"{SUPPORT_STRING_FOR_VNFD_ID}upd_max_vnfd_id" +NEW_MAX_VNFD_ID = f"{SUPPORT_STRING_FOR_VNFD_ID}new_max_vnfd_id" +UPD_NEW_MIN_VNFD_ID = f"{SUPPORT_STRING_FOR_VNFD_ID}upd_new_min_vnfd_id" + class IndividualVnfcMgmtBasicTest(base_v2.BaseSolV2Test): @@ -46,26 +54,28 @@ class IndividualVnfcMgmtBasicTest(base_v2.BaseSolV2Test): "../sol_v2_common/samples/basic_lcms_max_individual_vnfc") cls.max_pkg, cls.max_vnfd_id = cls.create_vnf_package( pkg_path_1, image_path=image_path, - userdata_path=userdata_path) + userdata_path=userdata_path, vnfd_id=MAX_VNFD_ID) # vnf package for basic lcms tests min pattern pkg_path_2 = os.path.join(cur_dir, "../sol_v2_common/samples/basic_lcms_min_individual_vnfc") cls.min_pkg, cls.min_vnfd_id = cls.create_vnf_package( - pkg_path_2, userdata_path=userdata_path) + pkg_path_2, userdata_path=userdata_path, + vnfd_id=MIN_VNFD_ID) # vnf package for update vnf max pattern pkg_path_3 = os.path.join(cur_dir, "../sol_v2_common/samples/update_vnf_max_individual_vnfc") cls.upd_max_pkg, cls.upd_max_vnfd_id = cls.create_vnf_package( pkg_path_3, image_path=image_path, - userdata_path=userdata_path) + userdata_path=userdata_path, vnfd_id=UPD_MAX_VNFD_ID) # vnf package for change vnf package max pattern pkg_path_4 = os.path.join(cur_dir, "../sol_v2_common/samples/change_vnfpkg_max_individual_vnfc") cls.new_max_pkg, cls.new_max_vnfd_id = cls.create_vnf_package( - pkg_path_4, userdata_path=userdata_path) + pkg_path_4, userdata_path=userdata_path, + vnfd_id=NEW_MAX_VNFD_ID) # vnf package for change vnf package or update min pattern pkg_path_5 = os.path.join( @@ -73,7 +83,8 @@ class IndividualVnfcMgmtBasicTest(base_v2.BaseSolV2Test): "../sol_v2_common/samples/" "change_vnfpkg_or_update_min_individual_vnfc") cls.upd_new_min_pkg, cls.upd_new_min_vnfd_id = cls.create_vnf_package( - pkg_path_5, image_path=image_path, userdata_path=userdata_path) + pkg_path_5, image_path=image_path, userdata_path=userdata_path, + vnfd_id=UPD_NEW_MIN_VNFD_ID) cls.expected_list_attrs = [ 'id',