X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_ro%2Fnfvo.py;h=b1c86f9c1981485badb18cbd6aa16a0959ff0264;hb=e2c09f3117bc608a26f2172a0f07a0df41922730;hp=f625b4f6fb0f04cfb44080c1320e7a5adbf81101;hpb=c5293def02d95ed4ee086dd8842437b76ec05c4e;p=osm%2FRO.git diff --git a/osm_ro/nfvo.py b/osm_ro/nfvo.py index f625b4f6..b1c86f9c 100644 --- a/osm_ro/nfvo.py +++ b/osm_ro/nfvo.py @@ -61,6 +61,7 @@ from .http_tools import errors as httperrors from .wim.engine import WimEngine from .wim.persistence import WimPersistence from copy import deepcopy +from pprint import pformat # global global_config @@ -3034,6 +3035,8 @@ def create_instance(mydb, tenant_id, instance_dict): # Auxiliary dictionaries from x to y sce_net2instance = {} net2task_id = {'scenario': {}} + # Mapping between local networks and WIMs + wim_usage = {} def ip_profile_IM2RO(ip_profile_im): # translate from input format to database format @@ -3177,6 +3180,18 @@ def create_instance(mydb, tenant_id, instance_dict): if not involved_datacenters: involved_datacenters.append(default_datacenter_id) + # --> WIM + # TODO: use this information during network creation + wim_account_id = None + if len(involved_datacenters) > 1 and 'uuid' in sce_net: + # OBS: sce_net without uuid are used internally to VNFs + # and the assumption is that VNFs will not be split among + # different datacenters + wim_account_id = wim_engine.find_suitable_wim_account( + involved_datacenters, tenant_id) + wim_usage[sce_net['uuid']] = wim_account_id + # <-- WIM + descriptor_net = {} if instance_dict.get("networks") and instance_dict["networks"].get(sce_net["name"]): descriptor_net = instance_dict["networks"][sce_net["name"]] @@ -3499,7 +3514,8 @@ def create_instance(mydb, tenant_id, instance_dict): db_instance_action["number_tasks"] = task_index # --> WIM - wan_links = wim_engine.derive_wan_links(db_instance_nets, tenant_id) + logger.debug('wim_usage:\n%s\n\n', pformat(wim_usage)) + wan_links = wim_engine.derive_wan_links(wim_usage, db_instance_nets, tenant_id) wim_actions = wim_engine.create_actions(wan_links) wim_actions, db_instance_action = ( wim_engine.incorporate_actions(wim_actions, db_instance_action)) @@ -4711,6 +4727,8 @@ def instance_action_get(mydb, nfvo_tenant, instance_id, action_id): raise NfvoException("Not found any action with this criteria", httperrors.Not_Found) vim_wim_actions = mydb.get_rows(FROM="vim_wim_actions", WHERE={"instance_action_id": action_id}) rows[0]["vim_wim_actions"] = vim_wim_actions + # for backward compatibility set vim_actions = vim_wim_actions + rows[0]["vim_actions"] = vim_wim_actions return {"actions": rows}