aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLianhao Lu <lianhao.lu@intel.com>2019-11-29 12:58:35 +0800
committerLianhao Lu <lianhao.lu@intel.com>2019-11-29 12:58:35 +0800
commitbb1373afb3144be5f8590c0e5c0b0b04c54afc14 (patch)
treebc6e3229540b90ae3683dd4c8fec04107aca77c6
parent41778272aa04db6357734618d052f263c1953953 (diff)
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 <lianhao.lu@intel.com>
-rw-r--r--tests/packager/test_manifest.py30
-rw-r--r--vnfsdk_pkgtools/packager/csar.py2
-rw-r--r--vnfsdk_pkgtools/packager/manifest.py22
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"