X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_ro%2Fnfvo.py;h=9cd39950e32b65056f0bf89a9c37dd16db0940b7;hb=5a3273cfd0fdf8b898091c1d2a2519bc36842c6b;hp=66ea1b2da2544cb532fdf66a98bdcec8747a75da;hpb=2935631c49a315fb078d05380569f7e1ca21fcde;p=osm%2FRO.git diff --git a/osm_ro/nfvo.py b/osm_ro/nfvo.py index 66ea1b2d..9cd39950 100644 --- a/osm_ro/nfvo.py +++ b/osm_ro/nfvo.py @@ -1700,11 +1700,17 @@ def start_scenario(mydb, tenant_id, scenario_id, instance_scenario_name, instanc #myvim.new_vminstance(self,vimURI,tenant_id,name,description,image_id,flavor_id,net_dict) i = 0 for sce_vnf in scenarioDict['vnfs']: - nfv_availability_zones = [] + vnf_availability_zones = [] for vm in sce_vnf['vms']: vm_av = vm.get('availability_zone') - if vm_av and vm_av not in nfv_availability_zones: - nfv_availability_zones.append(vm_av) + if vm_av and vm_av not in vnf_availability_zones: + vnf_availability_zones.append(vm_av) + + # check if there is enough availability zones available at vim level. + if myvims[datacenter_id].availability_zone and vnf_availability_zones: + if len(vnf_availability_zones) > len(myvims[datacenter_id].availability_zone): + raise NfvoException('No enough availability zones at VIM for this deployment', HTTP_Bad_Request) + for vm in sce_vnf['vms']: i += 1 myVMDict = {} @@ -1793,14 +1799,14 @@ def start_scenario(mydb, tenant_id, scenario_id, instance_scenario_name, instanc #print ">>>>>>>>>>>>>>>>>>>>>>>>>>>" if 'availability_zone' in myVMDict: - counter_availability_zone = nfv_availability_zones.index(myVMDict['availability_zone']) + av_index = vnf_availability_zones.index(myVMDict['availability_zone']) else: - counter_availability_zone = None + av_index = None vm_id = myvim.new_vminstance(myVMDict['name'], myVMDict['description'], myVMDict.get('start', None), myVMDict['imageRef'], myVMDict['flavorRef'], myVMDict['networks'], - availavility_zone_index=counter_availability_zone, - nfv_availability_zones=nfv_availability_zones) + availability_zone_index=av_index, + availability_zone_list=vnf_availability_zones) #print "VIM vm instance id (server id) for scenario %s: %s" % (scenarioDict['name'],vm_id) vm['vim_id'] = vm_id rollbackList.append({'what':'vm','where':'vim','vim_id':datacenter_id,'uuid':vm_id}) @@ -2211,18 +2217,16 @@ def create_instance(mydb, tenant_id, instance_dict): sce_vnf_list = sorted(scenarioDict['vnfs'], key=lambda k: k['name']) #for sce_vnf in scenarioDict['vnfs']: for sce_vnf in sce_vnf_list: - nfv_availability_zones = [] + vnf_availability_zones = [] for vm in sce_vnf['vms']: vm_av = vm.get('availability_zone') - if vm_av and vm_av not in nfv_availability_zones: - nfv_availability_zones.append(vm_av) + if vm_av and vm_av not in vnf_availability_zones: + vnf_availability_zones.append(vm_av) # check if there is enough availability zones available at vim level. - if myvims[datacenter_id].availability_zone: - vim_availability_zones = myvims[datacenter_id].availability_zone - nfv_availability_zones_num = len(vim_availability_zones) - if len(nfv_availability_zones) > nfv_availability_zones_num: - raise NfvoException('No enough availablity zones for this deployment', HTTP_Bad_Request) + if myvims[datacenter_id].availability_zone and vnf_availability_zones: + if len(vnf_availability_zones) > len(myvims[datacenter_id].availability_zone): + raise NfvoException('No enough availability zones at VIM for this deployment', HTTP_Bad_Request) if sce_vnf.get("datacenter"): vim = myvims[ sce_vnf["datacenter"] ] @@ -2340,14 +2344,14 @@ def create_instance(mydb, tenant_id, instance_dict): else: cloud_config_vm = cloud_config - if 'availability_zone' in myVMDict and myVMDict.get('availability_zone'): - counter_availability_zone = nfv_availability_zones.index(myVMDict['availability_zone']) + if myVMDict.get('availability_zone'): + av_index = vnf_availability_zones.index(myVMDict['availability_zone']) else: - counter_availability_zone = None + av_index = None task = new_task("new-vm", (myVMDict['name'], myVMDict['description'], myVMDict.get('start', None), myVMDict['imageRef'], myVMDict['flavorRef'], myVMDict['networks'], - cloud_config_vm, myVMDict['disks'], counter_availability_zone, - nfv_availability_zones), depends=task_depends) + cloud_config_vm, myVMDict['disks'], av_index, + vnf_availability_zones), depends=task_depends) instance_tasks[task["id"]] = task tasks_to_launch[myvim_thread_id].append(task) vm_id = task["id"]