From bb1373afb3144be5f8590c0e5c0b0b04c54afc14 Mon Sep 17 00:00:00 2001 From: Lianhao Lu Date: Fri, 29 Nov 2019 12:58:35 +0800 Subject: Support vnf_release_date_time in manifest SOL004 v2.6.1 changes the manifest metadata key name from 'vnf_release_data_time' in v2.4.1 to 'vnf_release_date_time'. Support the new chagnes while keeping backward compatibile with v2.4.1. Change-Id: I205285f05963dc4d60d6867866b5b2fe114d8da3 Issue-ID: VNFSDK-420 Signed-off-by: Lianhao Lu --- tests/packager/test_manifest.py | 30 ++++++++++++++++++++++++++---- vnfsdk_pkgtools/packager/csar.py | 2 +- vnfsdk_pkgtools/packager/manifest.py | 22 +++++++++++++++------- 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/tests/packager/test_manifest.py b/tests/packager/test_manifest.py index 9a0a5d5..7fa3474 100644 --- a/tests/packager/test_manifest.py +++ b/tests/packager/test_manifest.py @@ -24,9 +24,16 @@ METADATA = '\n'.join(["metadata:", "vnf_product_name: test", "vnf_provider_id: test", "vnf_package_version:1.0", - "vnf_release_data_time: 2017-09-15T15:00:10+08:00", + "vnf_release_date_time: 2017-09-15T15:00:10+08:00", ]) +METADATA_241 = '\n'.join(["metadata:", + "vnf_product_name: test", + "vnf_provider_id: test", + "vnf_package_version: 1.0", + "vnf_release_data_time: 2017-09-15T15:00:10+08:00", + ]) + METADATA_MISSING_KEY = '\n'.join(["metadata:", "vnf_product_name: test", "vnf_provider_id: test", @@ -61,7 +68,7 @@ CMS = '\n'.join(['-----BEGIN CMS-----', FILE_SOURCE_ONLY = '\n'.join(['Source: source1', 'Source: source2', - ]) + ]) NON_MANO_ARTIFACTS = '\n'.join(['non_mano_artifact_sets:', 'foo_bar:', @@ -69,7 +76,7 @@ NON_MANO_ARTIFACTS = '\n'.join(['non_mano_artifact_sets:', 'prv.happy-nfv.cool:', 'Source: happy/cool/123.html', 'Source: happy/cool/cool.json', - ]) + ]) def test_metadata(tmpdir): @@ -80,7 +87,22 @@ def test_metadata(tmpdir): assert m.metadata['vnf_product_name'] == 'test' assert m.metadata['vnf_provider_id'] == 'test' assert m.metadata['vnf_package_version'] == '1.0' - assert m.metadata['vnf_release_data_time'] == '2017-09-15T15:00:10+08:00' + assert m.metadata['vnf_release_date_time'] == '2017-09-15T15:00:10+08:00' + + +def test_metadata_241(tmpdir): + # metadata for SOL004 v2.4.1 + p = tmpdir.mkdir('csar').join('test.mf') + p.write(METADATA_241) + + m = manifest.Manifest(p.dirname, 'test.mf') + assert m.metadata['vnf_product_name'] == 'test' + assert m.metadata['vnf_provider_id'] == 'test' + assert m.metadata['vnf_package_version'] == '1.0' + assert m.metadata['vnf_release_date_time'] == '2017-09-15T15:00:10+08:00' + + m241 = manifest.Manifest(p.dirname, 'test.mf', sol241=True) + assert METADATA_241 in m241.return_as_string() def test_metadata_missing_key(tmpdir): diff --git a/vnfsdk_pkgtools/packager/csar.py b/vnfsdk_pkgtools/packager/csar.py index 1797644..3b4cec6 100644 --- a/vnfsdk_pkgtools/packager/csar.py +++ b/vnfsdk_pkgtools/packager/csar.py @@ -56,7 +56,7 @@ def write(source, entry, destination, args): args.tests, args.certificate) if args.manifest: - manifest_file = manifest.Manifest(source, args.manifest) + manifest_file = manifest.Manifest(source, args.manifest, args.sol241) manifest_file_full_path = os.path.join(source, args.manifest) elif args.certificate or args.digest: raise ValueError("Must specify manifest file if certificate or digest is specified") diff --git a/vnfsdk_pkgtools/packager/manifest.py b/vnfsdk_pkgtools/packager/manifest.py index 3c65b94..a518f31 100644 --- a/vnfsdk_pkgtools/packager/manifest.py +++ b/vnfsdk_pkgtools/packager/manifest.py @@ -24,7 +24,7 @@ from vnfsdk_pkgtools.packager import utils METADATA_KEYS = [ 'vnf_provider_id', 'vnf_product_name', - 'vnf_release_data_time', + 'vnf_release_date_time', 'vnf_package_version'] DIGEST_KEYS = [ 'Source', 'Algorithm', 'Hash' ] SUPPORTED_HASH_ALGO = ['SHA-256', 'SHA-512'] @@ -36,7 +36,7 @@ class ManifestException(Exception): class Manifest(object): ' Manifest file in CSAR package' - def __init__(self, root_path, manifest_path): + def __init__(self, root_path, manifest_path, sol241=False): self.path = manifest_path self.root = root_path self.metadata = {} @@ -49,6 +49,7 @@ class Manifest(object): # non_mano_artifact dict # :key = set identifier # :value = list of files + self.sol241=sol241 self.non_mano_artifacts = {} self.blocks = [ ] self._split_blocks() @@ -104,18 +105,21 @@ class Manifest(object): (key, value, remain) = self.__split_line(line) if key in METADATA_KEYS: self.metadata[key] = value + elif key == 'vnf_release_data_time': + #sol004 v2.4.1 compatibility + self.metadata['vnf_release_date_time'] = value else: raise ManifestException("Unrecognized metadata %s:" % line) #validate metadata keys missing_keys = set(METADATA_KEYS) - set(self.metadata.keys()) if missing_keys: raise ManifestException("Missing metadata keys: %s" % ','.join(missing_keys)) - # validate vnf_release_data_time + # validate vnf_release_date_time try: - udatetime.from_string(self.metadata['vnf_release_data_time']) + udatetime.from_string(self.metadata['vnf_release_date_time']) except ValueError: - raise ManifestException("Non IETF RFC 3339 vnf_release_data_time: %s" - % self.metadata['vnf_release_data_time']) + raise ManifestException("Incorrect IETF RFC 3339 vnf_release_date_time: %s" + % self.metadata['vnf_release_date_time']) def parse_cms(self, lines): if '--END CMS--' not in lines[-1]: @@ -186,7 +190,11 @@ class Manifest(object): ret += "vnf_product_name: %s\n" % (self.metadata['vnf_product_name']) ret += "vnf_provider_id: %s\n" % (self.metadata['vnf_provider_id']) ret += "vnf_package_version: %s\n" % (self.metadata['vnf_package_version']) - ret += "vnf_release_data_time: %s\n" % (self.metadata['vnf_release_data_time']) + if self.sol241: + ret += "vnf_release_data_time: %s\n" % (self.metadata['vnf_release_date_time']) + else: + ret += "vnf_release_date_time: %s\n" % (self.metadata['vnf_release_date_time']) + # non_mano_artifacts if self.non_mano_artifacts: ret += "\nnon_mano_artifact_sets:\n" -- cgit 1.2.3-korg