update vfc createvl.py
[vfc/nfvo/lcm.git] / lcm / ns / vnfs / grant_vnfs.py
index c93647f..e64bfd1 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import logging
 import json
+import logging
 
-from lcm.pub.msapi import resmgr
-from lcm.pub.database.models import NfPackageModel, NfInstModel
+from lcm.pub.database.models import NfInstModel
 from lcm.pub.exceptions import NSLCMException
+from lcm.pub.msapi import resmgr
+from lcm.pub.msapi.sdc_run_catalog import query_vnfpackage_by_id
 from lcm.pub.utils.values import ignore_case_get
 
 logger = logging.getLogger(__name__)
@@ -42,7 +43,6 @@ class GrantVnfs(object):
         elif ignore_case_get(self.data, "removeResource"):
             grant_type = "removeResource"
         else:
-            #raise NSLCMException("No grant resource is found.")
             has_res_tpl = True
 
         for res in ignore_case_get(self.data, grant_type):
@@ -61,17 +61,16 @@ class GrantVnfs(object):
             if not vnfinsts:
                 raise NSLCMException("Vnfinst(%s) is not found in vnfm(%s)" % (
                     m_vnf_inst_id, vnfm_inst_id))
-                
+
             vnf_pkg_id = vnfinsts[0].package_id
-            vnf_pkgs = NfPackageModel.objects.filter(nfpackageid=vnf_pkg_id)
-            if not vnf_pkgs:
-                raise NSLCMException("vnfpkg(%s) is not found" % vnf_pkg_id)
+            nfpackage_info = query_vnfpackage_by_id(vnf_pkg_id)
+            vnf_pkg = nfpackage_info["packageInfo"]
 
-            vnfd = json.JSONDecoder().decode(vnf_pkgs[0].vnfdmodel)
+            vnfd = json.JSONDecoder().decode(vnf_pkg["vnfdModel"])
 
             req_param = {
-                "vnfInstanceId": m_vnf_inst_id, 
-                "vimId": vim_id, 
+                "vnfInstanceId": m_vnf_inst_id,
+                "vimId": vim_id,
                 "additionalParam": additional_param,
                 grant_type: []
             }
@@ -79,7 +78,7 @@ class GrantVnfs(object):
                 vdu_name = ignore_case_get(res, "vdu")
                 grant_res = {
                     "resourceDefinitionId": ignore_case_get(res, "resourceDefinitionId"),
-                    "type": ignore_case_get(res,"type"),
+                    "type": ignore_case_get(res, "type"),
                     "vdu": vdu_name
                 }
                 for vdu in vnfd["vdus"]:
@@ -97,10 +96,10 @@ class GrantVnfs(object):
         resourceTemplate = {
             "virtualComputeDescriptor": {
                 "virtualCpu": {
-                    "numVirtualCpu": int(vdu["nfv_compute"]["num_cpus"])
+                    "numVirtualCpu": int(vdu["virtual_compute"]["virtual_cpu"]["num_virtual_cpu"])
                 },
                 "virtualMemory": {
-                    "virtualMemSize": int(vdu["nfv_compute"]["mem_size"]) 
+                    "virtualMemSize": parse_unit(vdu["virtual_compute"]["virtual_memory"]["virtual_mem_size"], "MB")
                 }
             },
             "virtualStorageDescriptor": {
@@ -114,12 +113,16 @@ class GrantVnfs(object):
     def get_storage_size(self, storage_id, vnfd):
         for storage in vnfd["local_storages"]:
             if storage_id == storage["local_storage_id"]:
-                return int(storage["properties"]["size"])
+                return parse_unit(storage["properties"]["size"], "GB")
         return 0
 
 
-
-
-
-
-
+def parse_unit(val, base_unit):
+    recognized_units = ["B", "kB", "KiB", "MB", "MiB", "GB", "GiB", "TB", "TiB"]
+    units_rate = [1, 1000, 1024, 1000000, 1048576, 1000000000, 1073741824, 1000000000000, 1099511627776]
+    unit_rate_map = {unit.upper(): rate for unit, rate in zip(recognized_units, units_rate)}
+    num_unit = val.strip().split(" ")
+    if len(num_unit) != 2:
+        return val.strip()
+    num, unit = num_unit[0], num_unit[1]
+    return int(num) * unit_rate_map[unit.upper()] / unit_rate_map[base_unit.upper()]