X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_ro%2Fvimconn_vmware.py;h=562cfcca1a53e14f584e899350eacbc0bf366a34;hb=96ebf005b6e73f6cef105aa5f9ab36402f3d26c4;hp=ad4584476fa29472a92ad4c14a05e1de5fb456db;hpb=19860410e2bae0450fa4a18854e128fb79079358;p=osm%2FRO.git diff --git a/osm_ro/vimconn_vmware.py b/osm_ro/vimconn_vmware.py index ad458447..562cfcca 100644 --- a/osm_ro/vimconn_vmware.py +++ b/osm_ro/vimconn_vmware.py @@ -671,6 +671,9 @@ class vimconnector(vimconn.vimconnector): networks = self.vca.get_networks(vdc.get_name()) filter_dict = {} + if not networks: + vimconn.vimconnNotFoundException("Network {} not found".format(net_id)) + for network in networks: vdc_network_id = network.get_id().split(":") if len(vdc_network_id) == 4 and vdc_network_id[3] == net_id: @@ -686,9 +689,16 @@ class vimconnector(vimconn.vimconnector): filter_dict["type"] = "bridge" self.logger.debug("Returning {}".format(filter_dict)) return filter_dict - except: + else: + raise vimconn.vimconnNotFoundException("Network {} not found".format(net_id)) + + except Exception as e: self.logger.debug("Error in get_network") self.logger.debug(traceback.format_exc()) + if isinstance(e, vimconn.vimconnException): + raise + else: + raise vimconn.vimconnNotFoundException("Failed : Network not found {} ".format(e)) return filter_dict @@ -791,7 +801,7 @@ class vimconnector(vimconn.vimconnector): new_flavor=flavor_data ram = flavor_data.get(FLAVOR_RAM_KEY, 1024) cpu = flavor_data.get(FLAVOR_VCPUS_KEY, 1) - disk = flavor_data.get(FLAVOR_DISK_KEY, 1) + disk = flavor_data.get(FLAVOR_DISK_KEY, 0) if not isinstance(ram, int): raise vimconn.vimconnException("Non-integer value for ram") @@ -1388,9 +1398,9 @@ class vimconnector(vimconn.vimconnector): the VLAN tag to be used. In case net_id is provided, the internal network vlan is used for tagging VF 'type': (mandatory) can be one of: 'virtual', in this case always connected to a network of type 'net_type=bridge' - 'PF' (passthrough): depending on VIM capabilities it can be connected to a data/ptp network ot it + 'PCI-PASSTHROUGH' or 'PF' (passthrough): depending on VIM capabilities it can be connected to a data/ptp network ot it can created unconnected - 'VF' (SRIOV with VLAN tag): same as PF for network connectivity. + 'SR-IOV' or 'VF' (SRIOV with VLAN tag): same as PF for network connectivity. 'VFnotShared'(SRIOV without VLAN tag) same as PF for network connectivity. VF where no other VFs are allocated on the same physical NIC 'bw': (optional) only for PF/VF/VFnotShared. Minimal Bandwidth required for the interface in GBPS @@ -1420,7 +1430,11 @@ class vimconnector(vimconn.vimconnector): availability_zone_index: Index of availability_zone_list to use for this this VM. None if not AV required availability_zone_list: list of availability zones given by user in the VNFD descriptor. Ignore if availability_zone_index is None - Returns the instance identifier or raises an exception on error + Returns a tuple with the instance identifier and created_items or raises an exception on error + created_items can be None or a dictionary where this method can include key-values that will be passed to + the method delete_vminstance and action_vminstance. Can be used to store created ports, volumes, etc. + Format is vimconnector dependent, but do not use nested dictionaries and a value of None should be the same + as not present. """ self.logger.info("Creating new instance for entry {}".format(name)) self.logger.debug("desc {} boot {} image_id: {} flavor_id: {} net_list: {} cloud_config {} disk_list {}".format( @@ -1560,9 +1574,9 @@ class vimconnector(vimconn.vimconnector): reserve_memory = False for net in net_list: - if net["type"]=="PF": + if net["type"] == "PF" or net["type"] == "PCI-PASSTHROUGH": pci_devices_info.append(net) - elif (net["type"]=="VF" or net["type"]=="VFnotShared") and 'net_id'in net: + elif (net["type"] == "VF" or net["type"] == "SR-IOV" or net["type"] == "VFnotShared") and 'net_id'in net: sriov_net_info.append(net) #Add PCI @@ -1639,7 +1653,9 @@ class vimconnector(vimconn.vimconnector): if 'net_id' not in net: continue - net_list['vim_id'] = net_list['net_id'] # Provide the same VIM identifier as the VIM network + #Using net_id as a vim_id i.e. vim interface id, as do not have saperate vim interface id + #Same will be returned in refresh_vms_status() as vim_interface_id + net['vim_id'] = net['net_id'] # Provide the same VIM identifier as the VIM network interface_net_id = net['net_id'] interface_net_name = self.get_network_name_by_id(network_uuid=interface_net_id) @@ -1664,7 +1680,7 @@ class vimconnector(vimconn.vimconnector): self.vca.block_until_completed(task) # connect network to VM - with all DHCP by default - type_list = ['PF','VF','VFnotShared'] + type_list = ('PF', 'PCI-PASSTHROUGH', 'VF', 'SR-IOV', 'VFnotShared') if 'type' in net and net['type'] not in type_list: # fetching nic type from vnf if 'model' in net: @@ -1765,7 +1781,7 @@ class vimconnector(vimconn.vimconnector): wait_time +=INTERVAL_TIME if vapp_uuid is not None: - return vapp_uuid + return vapp_uuid, None else: raise vimconn.vimconnUnexpectedResponse("new_vminstance(): Failed create new vm instance {}".format(name)) @@ -1823,7 +1839,7 @@ class vimconnector(vimconn.vimconnector): return vm_dict - def delete_vminstance(self, vm__vim_uuid): + def delete_vminstance(self, vm__vim_uuid, created_items=None): """Method poweroff and remove VM instance from vcloud director network. Args: @@ -2127,7 +2143,7 @@ class vimconnector(vimconn.vimconnector): self.logger.debug("ParseError in response from NSX Manager {}".format(Err.message), exc_info=True) - def action_vminstance(self, vm__vim_uuid=None, action_dict=None): + def action_vminstance(self, vm__vim_uuid=None, action_dict=None, created_items={}): """Send and action over a VM instance from VIM Returns the vm_id if the action was successfully sent to the VIM""" @@ -2137,7 +2153,7 @@ class vimconnector(vimconn.vimconnector): vdc = self.get_vdc_details() if vdc is None: - return -1, "Failed to get a reference of VDC for a tenant {}".format(self.tenant_name) + raise vimconn.vimconnException("Failed to get a reference of VDC for a tenant {}".format(self.tenant_name)) vapp_name = self.get_namebyvappid(vdc, vm__vim_uuid) if vapp_name is None: @@ -2189,7 +2205,7 @@ class vimconnector(vimconn.vimconnector): reboot_task = the_vapp.reboot() else: raise vimconn.vimconnException("action_vminstance: Invalid action {} or action is None.".format(action_dict)) - return vm__vim_uuid + return None except Exception as exp : self.logger.debug("action_vminstance: Failed with Exception {}".format(exp)) raise vimconn.vimconnException("action_vminstance: Failed with Exception {}".format(exp)) @@ -4631,7 +4647,7 @@ class vimconnector(vimconn.vimconnector): for sriov_net in sriov_nets: network_name = sriov_net.get('net_id') dvs_portgr_name = self.create_dvPort_group(network_name) - if sriov_net.get('type') == "VF": + if sriov_net.get('type') == "VF" or sriov_net.get('type') == "SR-IOV": #add vlan ID ,Modify portgroup for vlan ID self.configure_vlanID(content, vcenter_conect, network_name)