X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osmclient%2Fcommon%2Futils.py;h=5336577aa2a93875e77f3ad4699d6ca6653d95d5;hb=refs%2Fchanges%2F53%2F11953%2F4;hp=aed7d2964a36359c130f4e64ee9749ed582ab73b;hpb=95686bbc69ded243c346f94dceb0bee567572fb7;p=osm%2Fosmclient.git diff --git a/osmclient/common/utils.py b/osmclient/common/utils.py index aed7d29..5336577 100644 --- a/osmclient/common/utils.py +++ b/osmclient/common/utils.py @@ -18,6 +18,7 @@ import time from uuid import UUID import hashlib import tarfile +from zipfile import ZipFile import re import yaml @@ -54,8 +55,35 @@ def md5(fname): 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(): @@ -65,13 +93,21 @@ def get_key_val_from_pkg(descriptor_file): 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" else: result["type"] = "vnfd" + if "type" not in result: for k1, v1 in list(dict.items()): if not k1.endswith("-catalog"): @@ -88,6 +124,4 @@ def get_key_val_from_pkg(descriptor_file): # strip off preceeding chars before : key_name = k3.split(":").pop() result[key_name] = v3 - - tar.close() return result