From 70ac63d834ea82425f453329412c8352745a7fa0 Mon Sep 17 00:00:00 2001 From: Shubham Date: Fri, 3 Apr 2020 17:55:48 +0530 Subject: [PATCH] Remove 'vnf_packages' key from vnf package list response As per ETSI GS NFV-SOL 005 V2.4.1 (2018-02) table 9.4.2.3.2-2, GET Vnf Packages should return list of all Vnf packages, but as per current implemention this api is returning dictionory with resource name as key i.e {'vnf_packages': [{vnf_package1}, {vnf_package2},...]}. Hence removing the resource key and returning api response as a list. As per process to fix this issue we need to provide micro version support in tacker as well as in python-tackerclient for command. The list api was part of VNF package api which released in train cycle. But we can not instantiate, terminate and Heal VNF as these feature is not released yet and about to release in U cycle. The changes we have proposed will be useful after U release and that is why we think we should do these change without micro version support. Closes-bug: #1871054 Change-Id: I7f5105fc7a49f9d31fb32119c725dae0421cfde7 --- ...-get-vnfpackages-response-d9211712cf419bef.yaml | 14 ++++++++++++++ tacker/api/views/vnf_packages.py | 4 ++-- .../tests/functional/vnfpkgm/test_vnf_package.py | 12 ++++++------ tacker/tests/unit/vnfpkgm/fakes.py | 6 ++---- 4 files changed, 24 insertions(+), 12 deletions(-) create mode 100644 releasenotes/notes/bug-1871054-get-vnfpackages-response-d9211712cf419bef.yaml diff --git a/releasenotes/notes/bug-1871054-get-vnfpackages-response-d9211712cf419bef.yaml b/releasenotes/notes/bug-1871054-get-vnfpackages-response-d9211712cf419bef.yaml new file mode 100644 index 000000000..739f40e8b --- /dev/null +++ b/releasenotes/notes/bug-1871054-get-vnfpackages-response-d9211712cf419bef.yaml @@ -0,0 +1,14 @@ +--- +fixes: + - | + Includes the fix for `bug 1871054`_ which as per + `ETSI GS NFV-SOL 005 V2.6.1`_ table 9.4.2.3.2-2 should return list of vnf + packages in ``list`` instead of ``dictionary`` for + ``GET /vnfpkgm/v1/vnf_packages`` API. + + .. note:: Users should use python-tackerclient version >= 1.0.1 to list + vnf packages otherwise it would break as this change is not + backward compatible. + + .. _ETSI GS NFV-SOL 005 V2.6.1: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/005/02.06.01_60/gs_nfv-sol005v020601p.pdf + .. _bug 1871054 : https://bugs.launchpad.net/tacker/+bug/1871054 diff --git a/tacker/api/views/vnf_packages.py b/tacker/api/views/vnf_packages.py index 5ac66bc0d..13f168087 100644 --- a/tacker/api/views/vnf_packages.py +++ b/tacker/api/views/vnf_packages.py @@ -118,5 +118,5 @@ class ViewBuilder(base.BaseViewBuilder): include_fields = set(self.FLATTEN_ATTRIBUTES.keys()) - \ exclude_fields - return {'vnf_packages': [self._get_vnf_package(vnf_package, - include_fields=include_fields)for vnf_package in vnf_packages]} + return [self._get_vnf_package(vnf_package, + include_fields=include_fields)for vnf_package in vnf_packages] diff --git a/tacker/tests/functional/vnfpkgm/test_vnf_package.py b/tacker/tests/functional/vnfpkgm/test_vnf_package.py index 0697f15ed..4775b8158 100644 --- a/tacker/tests/functional/vnfpkgm/test_vnf_package.py +++ b/tacker/tests/functional/vnfpkgm/test_vnf_package.py @@ -146,7 +146,7 @@ class VnfPackageTest(base.BaseTackerTest): resp, body = self.http_client.do_request(self.base_url, "GET") self.assertEqual(200, resp.status_code) - package_uuids = [obj['id'] for obj in body['vnf_packages']] + package_uuids = [obj['id'] for obj in body] self.assertIn(vnf_package_list[0], package_uuids) self.assertIn(vnf_package_list[1], package_uuids) @@ -225,7 +225,7 @@ class VnfPackageTest(base.BaseTackerTest): package = deepcopy(self.package2) for attr in ['softwareImages', 'checksum', 'userDefinedData']: package.pop(attr, None) - expected_result = {'vnf_packages': [package]} + expected_result = [package] self.assertEqual(expected_result, body) def test_index_attribute_selector_all_fields(self): @@ -243,7 +243,7 @@ class VnfPackageTest(base.BaseTackerTest): 'all_fields': ''} filter_url = self.base_url + "?" + urllib.parse.urlencode(filter_expr) resp, body = self.http_client.do_request(filter_url, "GET") - expected_result = {'vnf_packages': [self.package1]} + expected_result = [self.package1] self.assertEqual(expected_result, body) def test_index_attribute_selector_exclude_default(self): @@ -254,7 +254,7 @@ class VnfPackageTest(base.BaseTackerTest): package2 = deepcopy(self.package2) for attr in ['softwareImages', 'checksum', 'userDefinedData']: package2.pop(attr, None) - expected_result = {'vnf_packages': [package2]} + expected_result = [package2] self.assertEqual(expected_result, body) def test_index_attribute_selector_exclude_fields(self): @@ -266,7 +266,7 @@ class VnfPackageTest(base.BaseTackerTest): for software_image in package2['softwareImages']: software_image.pop('checksum', None) package2.pop('checksum', None) - expected_result = {'vnf_packages': [package2]} + expected_result = [package2] self.assertEqual(expected_result, body) def test_index_attribute_selector_fields(self): @@ -286,7 +286,7 @@ class VnfPackageTest(base.BaseTackerTest): 'version']: software_image.pop(attr, None) package1.pop('checksum', None) - expected_result = {'vnf_packages': [package1]} + expected_result = [package1] self.assertEqual(expected_result, body) def _create_and_onboard_vnf_package(self, file_name=None): diff --git a/tacker/tests/unit/vnfpkgm/fakes.py b/tacker/tests/unit/vnfpkgm/fakes.py index 2ab5573b8..f34ad0e0b 100644 --- a/tacker/tests/unit/vnfpkgm/fakes.py +++ b/tacker/tests/unit/vnfpkgm/fakes.py @@ -78,9 +78,7 @@ VNFPACKAGE_RESPONSE = { }], } -VNFPACKAGE_INDEX_RESPONSE = { - 'vnf_packages': [VNFPACKAGE_RESPONSE] -} +VNFPACKAGE_INDEX_RESPONSE = [VNFPACKAGE_RESPONSE] def index_response(remove_attrs=None, vnf_package_updates=None): @@ -94,7 +92,7 @@ def index_response(remove_attrs=None, vnf_package_updates=None): vnf_package.pop(attr, None) if vnf_package_updates: vnf_package.update(vnf_package_updates) - return {'vnf_packages': [vnf_package]} + return [vnf_package] def _fake_software_image(updates=None):