X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FRO.git;a=blobdiff_plain;f=osm_ro%2Fnfvo.py;h=414f36528d3ad1e3fae38b88d8841521d9942a6b;hp=1d55a3c9ecf684bb065f3b5314a86d49ee61a4bc;hb=4d22bdc5e63e019216fde7cd911f35d39093b0c4;hpb=ae5f52ca92fe953fd7b7448f945bf12eb2d62afc diff --git a/osm_ro/nfvo.py b/osm_ro/nfvo.py index 1d55a3c9..414f3652 100644 --- a/osm_ro/nfvo.py +++ b/osm_ro/nfvo.py @@ -126,11 +126,12 @@ def get_non_used_vim_name(datacenter_name, datacenter_id, tenant_name, tenant_id if name not in vim_threads["names"]: vim_threads["names"].append(name) return name - name = datacenter_name[:16] + "." + tenant_name[:16] - if name not in vim_threads["names"]: - vim_threads["names"].append(name) - return name - name = datacenter_id + "-" + tenant_id + if tenant_name: + name = datacenter_name[:16] + "." + tenant_name[:16] + if name not in vim_threads["names"]: + vim_threads["names"].append(name) + return name + name = datacenter_id vim_threads["names"].append(name) return name @@ -237,7 +238,7 @@ def start_service(mydb, persistence=None, wim=None): except Exception as e: raise NfvoException("Error at VIM {}; {}: {}".format(vim["type"], type(e).__name__, e), httperrors.Internal_Server_Error) - thread_name = get_non_used_vim_name(vim['datacenter_name'], vim['vim_tenant_id'], vim['vim_tenant_name'], + thread_name = get_non_used_vim_name(vim['datacenter_name'], vim['datacenter_id'], vim['vim_tenant_name'], vim['vim_tenant_id']) new_thread = vim_thread.vim_thread(task_lock, thread_name, vim['datacenter_name'], vim['datacenter_tenant_id'], db=db, db_lock=db_lock, ovim=ovim) @@ -305,6 +306,9 @@ def clean_db(mydb): nb_deleted += len(actions_to_delete) if len(actions_to_delete) < 100: break + # clean locks + mydb.update_rows("vim_wim_actions", UPDATE={"worker": None}, WHERE={"worker<>": None}) + if nb_deleted: logger.debug("Removed {} unused vim_wim_actions".format(nb_deleted)) @@ -3248,8 +3252,16 @@ def create_instance(mydb, tenant_id, instance_dict): # <-- WIM descriptor_net = {} - if instance_dict.get("networks") and instance_dict["networks"].get(sce_net["name"]): - descriptor_net = instance_dict["networks"][sce_net["name"]] + if instance_dict.get("networks"): + if sce_net.get("uuid") in instance_dict["networks"]: + descriptor_net = instance_dict["networks"][sce_net["uuid"]] + descriptor_net_name = sce_net["uuid"] + elif sce_net.get("osm_id") in instance_dict["networks"]: + descriptor_net = instance_dict["networks"][sce_net["osm_id"]] + descriptor_net_name = sce_net["osm_id"] + elif sce_net["name"] in instance_dict["networks"]: + descriptor_net = instance_dict["networks"][sce_net["name"]] + descriptor_net_name = sce_net["name"] net_name = descriptor_net.get("vim-network-name") # add datacenters from instantiation parameters if descriptor_net.get("sites"): @@ -3259,6 +3271,22 @@ def create_instance(mydb, tenant_id, instance_dict): sce_net2instance[sce_net_uuid] = {} net2task_id['scenario'][sce_net_uuid] = {} + use_network = None + related_network = None + if descriptor_net.get("use-network"): + target_instance_nets = mydb.get_rows( + SELECT="related", + FROM="instance_nets", + WHERE={"instance_scenario_id": descriptor_net["use-network"]["instance_scenario_id"], + "osm_id": descriptor_net["use-network"]["osm_id"]}, + ) + if not target_instance_nets: + raise NfvoException( + "Cannot find the target network at instance:networks[{}]:use-network".format(descriptor_net_name), + httperrors.Bad_Request) + else: + use_network = target_instance_nets[0]["related"] + if sce_net["external"]: number_mgmt_networks += 1 @@ -3346,8 +3374,12 @@ def create_instance(mydb, tenant_id, instance_dict): net_uuid = str(uuid4()) uuid_list.append(net_uuid) sce_net2instance[sce_net_uuid][datacenter_id] = net_uuid + if not related_network: # all db_instance_nets will have same related + related_network = use_network or net_uuid db_net = { "uuid": net_uuid, + "osm_id": sce_net.get("osm_id") or sce_net["name"], + "related": related_network, 'vim_net_id': None, "vim_name": net_vim_name, "instance_scenario_id": instance_uuid, @@ -3366,6 +3398,7 @@ def create_instance(mydb, tenant_id, instance_dict): "action": task_action, "item": "instance_nets", "item_id": net_uuid, + "related": related_network, "extra": yaml.safe_dump(task_extra, default_flow_style=True, width=256) } net2task_id['scenario'][sce_net_uuid][datacenter_id] = task_index @@ -3446,6 +3479,7 @@ def create_instance(mydb, tenant_id, instance_dict): uuid_list.append(sfi_uuid) db_sfi = { "uuid": sfi_uuid, + "related": sfi_uuid, "instance_scenario_id": instance_uuid, 'sce_rsp_hop_id': cp['uuid'], 'datacenter_id': datacenter_id, @@ -3461,6 +3495,7 @@ def create_instance(mydb, tenant_id, instance_dict): "status": "SCHEDULED", "item": "instance_sfis", "item_id": sfi_uuid, + "related": sfi_uuid, "extra": yaml.safe_dump({"params": extra_params, "depends_on": [dependencies[i]]}, default_flow_style=True, width=256) } @@ -3472,6 +3507,7 @@ def create_instance(mydb, tenant_id, instance_dict): uuid_list.append(sf_uuid) db_sf = { "uuid": sf_uuid, + "related": sf_uuid, "instance_scenario_id": instance_uuid, 'sce_rsp_hop_id': cp['uuid'], 'datacenter_id': datacenter_id, @@ -3487,6 +3523,7 @@ def create_instance(mydb, tenant_id, instance_dict): "status": "SCHEDULED", "item": "instance_sfs", "item_id": sf_uuid, + "related": sf_uuid, "extra": yaml.safe_dump({"params": "", "depends_on": sfis_created}, default_flow_style=True, width=256) } @@ -3517,6 +3554,7 @@ def create_instance(mydb, tenant_id, instance_dict): uuid_list.append(classification_uuid) db_classification = { "uuid": classification_uuid, + "related": classification_uuid, "instance_scenario_id": instance_uuid, 'sce_classifier_match_id': match['uuid'], 'datacenter_id': datacenter_id, @@ -3539,6 +3577,7 @@ def create_instance(mydb, tenant_id, instance_dict): "status": "SCHEDULED", "item": "instance_classifications", "item_id": classification_uuid, + "related": classification_uuid, "extra": yaml.safe_dump({"params": classification_params, "depends_on": [dependencies[i]]}, default_flow_style=True, width=256) } @@ -3551,6 +3590,7 @@ def create_instance(mydb, tenant_id, instance_dict): uuid_list.append(sfp_uuid) db_sfp = { "uuid": sfp_uuid, + "related": sfp_uuid, "instance_scenario_id": instance_uuid, 'sce_rsp_id': rsp['uuid'], 'datacenter_id': datacenter_id, @@ -3566,6 +3606,7 @@ def create_instance(mydb, tenant_id, instance_dict): "status": "SCHEDULED", "item": "instance_sfps", "item_id": sfp_uuid, + "related": sfp_uuid, "extra": yaml.safe_dump({"params": "", "depends_on": sfs_created + classifications_created}, default_flow_style=True, width=256) } @@ -3681,6 +3722,7 @@ def instantiate_vnf(mydb, sce_vnf, params, params_out, rollbackList): vnf_net2instance[sce_vnf['uuid']][net['uuid']] = net_uuid db_net = { "uuid": net_uuid, + "related": net_uuid, 'vim_net_id': None, "vim_name": net_name, "instance_scenario_id": instance_uuid, @@ -3711,6 +3753,7 @@ def instantiate_vnf(mydb, sce_vnf, params, params_out, rollbackList): "action": task_action, "item": "instance_nets", "item_id": net_uuid, + "related": net_uuid, "extra": yaml.safe_dump(task_extra, default_flow_style=True, width=256) } task_index += 1 @@ -3950,6 +3993,7 @@ def instantiate_vnf(mydb, sce_vnf, params, params_out, rollbackList): uuid_list.append(vm_uuid) db_vm = { "uuid": vm_uuid, + "related": vm_uuid, 'instance_vnf_id': vnf_uuid, # TODO delete "vim_vm_id": vm_id, "vm_id": vm["uuid"], @@ -3989,6 +4033,7 @@ def instantiate_vnf(mydb, sce_vnf, params, params_out, rollbackList): "status": "SCHEDULED", "item": "instance_vms", "item_id": vm_uuid, + "related": vm_uuid, "extra": yaml.safe_dump({"params": task_params, "depends_on": task_depends_on}, default_flow_style=True, width=256) } @@ -4066,6 +4111,7 @@ def delete_instance(mydb, tenant_id, instance_id): "status": "SCHEDULED", "item": "instance_sfps", "item_id": sfp["uuid"], + "related": sfp["related"], "extra": yaml.safe_dump(extra, default_flow_style=True, width=256) } task_index += 1 @@ -4106,6 +4152,7 @@ def delete_instance(mydb, tenant_id, instance_id): "status": "SCHEDULED", "item": "instance_classifications", "item_id": classification["uuid"], + "related": classification["related"], "extra": yaml.safe_dump(extra, default_flow_style=True, width=256) } task_index += 1 @@ -4144,6 +4191,7 @@ def delete_instance(mydb, tenant_id, instance_id): "status": "SCHEDULED", "item": "instance_sfs", "item_id": sf["uuid"], + "related": sf["related"], "extra": yaml.safe_dump(extra, default_flow_style=True, width=256) } task_index += 1 @@ -4182,6 +4230,7 @@ def delete_instance(mydb, tenant_id, instance_id): "status": "SCHEDULED", "item": "instance_sfis", "item_id": sfi["uuid"], + "related": sfi["related"], "extra": yaml.safe_dump(extra, default_flow_style=True, width=256) } task_index += 1 @@ -4223,6 +4272,7 @@ def delete_instance(mydb, tenant_id, instance_id): "status": "SCHEDULED", "item": "instance_vms", "item_id": vm["uuid"], + "related": vm["related"], "extra": yaml.safe_dump({"params": vm["interfaces"], "depends_on": sfi_dependencies}, default_flow_style=True, width=256) } @@ -4277,6 +4327,7 @@ def delete_instance(mydb, tenant_id, instance_id): "status": "SCHEDULED", "item": "instance_nets", "item_id": net["uuid"], + "related": net["related"], "extra": yaml.safe_dump(extra, default_flow_style=True, width=256) } task_index += 1 @@ -4576,6 +4627,7 @@ def instance_action(mydb,nfvo_tenant,instance_id, action_dict): "status": "SCHEDULED", "item": "instance_vms", "item_id": vdu_id, + "related": vm["related"], "extra": yaml.safe_dump({"params": vm_interfaces}, default_flow_style=True, width=256) } @@ -4666,6 +4718,7 @@ def instance_action(mydb,nfvo_tenant,instance_id, action_dict): "status": "SCHEDULED", "item": "instance_vms", "item_id": vm_uuid, + "related": target_vm["related"], # ALF # ALF # TODO examinar parametros, quitar MAC o incrementar. Incrementar IP y colocar las dependencias con ACTION-asdfasd.