X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_lcm%2Fns.py;h=5d34b05f02c4737f8e2a0ac542a211e4374286d7;hb=720b07a9145c19a0962ffd947339ca8e978101d9;hp=d7277e7f1b5e125e1834e5118cf12cc9d6d6474d;hpb=12650ecdd976edea3b425603398fa1661a455a24;p=osm%2FLCM.git diff --git a/osm_lcm/ns.py b/osm_lcm/ns.py index d7277e7..5d34b05 100644 --- a/osm_lcm/ns.py +++ b/osm_lcm/ns.py @@ -69,9 +69,9 @@ def populate_dict(target_dict, key_list, value): class NsLcm(LcmBase): timeout_vca_on_error = 5 * 60 # Time for charm from first time at blocked,error status to mark as failed - total_deploy_timeout = 30 * 60 # global timeout for deployment - timeout_charm_delete = 5 * 60 - timeout_primitive = 5 * 60 # timeout for primitive execution + total_deploy_timeout = 2 * 3600 # global timeout for deployment + timeout_charm_delete = 10 * 60 + timeout_primitive = 10 * 60 # timeout for primitive execution def __init__(self, db, msg, fs, lcm_tasks, ro_config, vca_config, loop): """ @@ -242,6 +242,7 @@ class NsLcm(LcmBase): :return: The RO ns descriptor """ vim_2_RO = {} + wim_2_RO = {} # TODO feature 1417: Check that no instantiation is set over PDU # check if PDU forces a concrete vim-network-id and add it # check if PDU contains a SDN-assist info (dpid, switch, port) and pass it to RO @@ -258,6 +259,21 @@ class NsLcm(LcmBase): vim_2_RO[vim_account] = RO_vim_id return RO_vim_id + def wim_account_2_RO(wim_account): + if isinstance(wim_account, str): + if wim_account in wim_2_RO: + return wim_2_RO[wim_account] + + db_wim = self.db.get_one("wim_accounts", {"_id": wim_account}) + if db_wim["_admin"]["operationalState"] != "ENABLED": + raise LcmException("WIM={} is not available. operationalState={}".format( + wim_account, db_wim["_admin"]["operationalState"])) + RO_wim_id = db_wim["_admin"]["deployed"]["RO-account"] + wim_2_RO[wim_account] = RO_wim_id + return RO_wim_id + else: + return wim_account + def ip_profile_2_RO(ip_profile): RO_ip_profile = deepcopy((ip_profile)) if "dns-server" in RO_ip_profile: @@ -281,6 +297,7 @@ class NsLcm(LcmBase): # "name": ns_params["nsName"], # "description": ns_params.get("nsDescription"), "datacenter": vim_account_2_RO(ns_params["vimAccountId"]), + "wim_account": wim_account_2_RO(ns_params.get("wimAccountId")), # "scenario": ns_params["nsdId"], } if n2vc_key_list: @@ -402,6 +419,10 @@ class NsLcm(LcmBase): if "ip-profile" in vld_params: populate_dict(RO_ns_params, ("networks", vld_params["name"], "ip-profile"), ip_profile_2_RO(vld_params["ip-profile"])) + + if "wimAccountId" in vld_params and vld_params["wimAccountId"] is not None: + populate_dict(RO_ns_params, ("networks", vld_params["name"], "wim_account"), + wim_account_2_RO(vld_params["wimAccountId"])), if vld_params.get("vim-network-name"): RO_vld_sites = [] if isinstance(vld_params["vim-network-name"], dict): @@ -426,6 +447,12 @@ class NsLcm(LcmBase): RO_vld_sites.append({"netmap-use": vld_params["vim-network-id"]}) if RO_vld_sites: populate_dict(RO_ns_params, ("networks", vld_params["name"], "sites"), RO_vld_sites) + if vld_params.get("ns-net"): + if isinstance(vld_params["ns-net"], dict): + for vld_id, instance_scenario_id in vld_params["ns-net"].items(): + RO_vld_ns_net = {"instance_scenario_id": instance_scenario_id, "osm_id": vld_id} + if RO_vld_ns_net: + populate_dict(RO_ns_params, ("networks", vld_params["name"], "use-network"), RO_vld_ns_net) if "vnfd-connection-point-ref" in vld_params: for cp_params in vld_params["vnfd-connection-point-ref"]: # look for interface @@ -539,7 +566,7 @@ class NsLcm(LcmBase): continue vnfr_update = {} if vnf_RO.get("ip_address"): - db_vnfr["ip-address"] = vnfr_update["ip-address"] = vnf_RO["ip_address"] + db_vnfr["ip-address"] = vnfr_update["ip-address"] = vnf_RO["ip_address"].split(";")[0] elif not db_vnfr.get("ip-address"): raise LcmExceptionNoMgmtIP("ns member_vnf_index '{}' has no IP address".format(vnf_index)) @@ -554,7 +581,10 @@ class NsLcm(LcmBase): vdur_RO_count_index += 1 continue vdur["vim-id"] = vdur_RO.get("vim_vm_id") - vdur["ip-address"] = vdur_RO.get("ip_address") + if vdur_RO.get("ip_address"): + vdur["ip-address"] = vdur_RO["ip_address"].split(";")[0] + else: + vdur["ip-address"] = None vdur["vdu-id-ref"] = vdur_RO.get("vdu_osm_id") vdur["name"] = vdur_RO.get("vim_name") vdur["status"] = vdur_RO.get("status") @@ -1425,7 +1455,7 @@ class NsLcm(LcmBase): ) while time() - start_primitive_time < self.timeout_primitive: primitive_result_ = await self.n2vc.GetPrimitiveStatus(model_name, primitive_id) - if primitive_result_ == "running": + if primitive_result_ in ("running", "pending"): pass elif primitive_result_ in ("completed", "failed"): primitive_result = "COMPLETED" if primitive_result_ == "completed" else "FAILED"