from uuid import UUID
import hashlib
import tarfile
+from zipfile import ZipFile
import re
import yaml
def get_key_val_from_pkg(descriptor_file):
- # method opens up a package and finds the name of the resulting
- # descriptor (vnfd or nsd name)
+ if descriptor_file.split(".")[-1] == "zip":
+ return get_key_val_from_pkg_sol004(descriptor_file)
+ else:
+ return get_key_val_from_pkg_old(descriptor_file)
+
+
+def get_key_val_from_pkg_sol004(package_file):
+ """Method opens up a package and finds the name of the resulting
+ descriptor (vnfd or nsd name), using SOL004 spec
+ """
+ with ZipFile(package_file) as zipfile:
+ yamlfile = None
+ for filedata in zipfile.infolist():
+ if (
+ re.match(".*.yaml", filedata.filename)
+ and filedata.filename.find("Scripts") < 0
+ ):
+ yamlfile = filedata.filename
+ break
+ if yamlfile is None:
+ return None
+
+ return get_key_val_from_descriptor(zipfile.open(yamlfile))
+
+
+def get_key_val_from_pkg_old(descriptor_file):
+ """Method opens up a package and finds the name of the resulting
+ descriptor (vnfd or nsd name)
+ """
tar = tarfile.open(descriptor_file)
yamlfile = None
for member in tar.getmembers():
- if (re.match('.*.yaml', member.name) and
- len(member.name.split('/')) == 2):
+ if re.match(".*.yaml", member.name) and len(member.name.split("/")) == 2:
yamlfile = member.name
break
if yamlfile is None:
return None
- dict = yaml.safe_load(tar.extractfile(yamlfile))
+ result = get_key_val_from_descriptor(tar.extractfile(yamlfile))
+
+ tar.close()
+ return result
+
+
+def get_key_val_from_descriptor(descriptor):
+ dict = yaml.safe_load(descriptor)
result = {}
for k in dict:
- if 'nsd' in k:
- result['type'] = 'nsd'
+ if "nsd" in k:
+ result["type"] = "nsd"
else:
- result['type'] = 'vnfd'
- if 'type' not in result:
+ result["type"] = "vnfd"
+
+ if "type" not in result:
for k1, v1 in list(dict.items()):
- if not k1.endswith('-catalog'):
+ if not k1.endswith("-catalog"):
continue
for k2, v2 in v1.items():
- if not k2.endswith('nsd') and not k2.endswith('vnfd'):
+ if not k2.endswith("nsd") and not k2.endswith("vnfd"):
continue
- if 'nsd' in k2:
- result['type'] = 'nsd'
+ if "nsd" in k2:
+ result["type"] = "nsd"
else:
- result['type'] = 'vnfd'
+ result["type"] = "vnfd"
for entry in v2:
for k3, v3 in list(entry.items()):
# strip off preceeding chars before :
- key_name = k3.split(':').pop()
+ key_name = k3.split(":").pop()
result[key_name] = v3
-
- tar.close()
return result