feature: sol004 and sol007
[osm/osmclient.git] / osmclient / common / utils.py
index aed7d29..5336577 100644 (file)
@@ -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