improve code to handle scalar types 17/49717/3
authoryangyan <yangyanyj@chinamobile.com>
Thu, 31 May 2018 06:23:44 +0000 (14:23 +0800)
committeryangyan <yangyanyj@chinamobile.com>
Thu, 31 May 2018 07:08:38 +0000 (15:08 +0800)
Issue-ID: VFC-926
Change-Id: I611211348bf2efe0ebfa635facc96a3f5cfdc880
Signed-off-by: yangyan <yangyanyj@chinamobile.com>
lcm/ns/vnfs/grant_vnfs.py

index 7f2d44e..c861131 100644 (file)
@@ -99,7 +99,7 @@ class GrantVnfs(object):
                     "numVirtualCpu": int(vdu["virtual_compute"]["virtual_cpu"]["num_virtual_cpu"])
                 },
                 "virtualMemory": {
-                    "virtualMemSize": int(vdu["virtual_compute"]["virtual_memory"]["virtual_mem_size"])
+                    "virtualMemSize": parse_unit(vdu["virtual_compute"]["virtual_memory"]["virtual_mem_size"], "MB")
                 }
             },
             "virtualStorageDescriptor": {
@@ -113,5 +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(self, 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()]