+RES_VOLUME = "volume"
+RES_NETWORK = "network"
+RES_SUBNET = "subnet"
+RES_PORT = "port"
+RES_FLAVOR = "flavor"
+RES_VM = "vm"
+
+
+def get_tenant_id(vim_cache, vim_id, tenant_name):
+ if vim_id not in vim_cache:
+ tenants = api.list_tenant(vim_id)
+ vim_cache[vim_id] = {}
+ for tenant in tenants["tenants"]:
+ id, name = tenant["id"], tenant["name"]
+ vim_cache[vim_id][name] = id
+ if tenant_name not in vim_cache[vim_id]:
+ raise VimException("Tenant(%s) not found in vim(%s)" % (tenant_name, vim_id), ERR_CODE)
+ return vim_cache[vim_id][tenant_name]
+
+def set_res_cache(res_cache, res_type, key, val):
+ if res_type not in res_cache:
+ res_cache[res_type] = {}
+ if key in res_cache[res_type]:
+ raise VimException("Duplicate key(%s) of %s" % (key, res_type), ERR_CODE)
+ res_cache[res_type][key] = val
+
+def get_res_id(res_cache, res_type, key):
+ if res_type not in res_cache:
+ raise VimException("%s not found in cache" % res_type, ERR_CODE)
+ if key not in res_cache[res_type]:
+ raise VimException("%s(%s) not found in cache" % (res_type, key), ERR_CODE)
+ return res_cache[res_type][key]
+
+def create_vim_res(data, do_notify):
+ vim_cache, res_cache = {}, {}
+ for vol in ignore_case_get(data, "volume_storages"):
+ create_volume(vim_cache, res_cache, vol, do_notify, RES_VOLUME)
+ for network in ignore_case_get(data, "vls"):
+ create_network(vim_cache, res_cache, network, do_notify, RES_NETWORK)
+ for subnet in ignore_case_get(data, "vls"):
+ create_subnet(vim_cache, res_cache, subnet, do_notify, RES_SUBNET)
+ for port in ignore_case_get(data, "cps"):
+ create_port(vim_cache, res_cache, data, port, do_notify, RES_PORT)
+ for flavor in ignore_case_get(data, "vdus"):
+ create_flavor(vim_cache, res_cache, data, flavor, do_notify, RES_FLAVOR)
+ for vm in ignore_case_get(data, "vdus"):
+ create_vm(vim_cache, res_cache, data, vm, do_notify, RES_VM)