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):