X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=osm_ro%2Fvimconn_openstack.py;h=3182dbe8077177a1eff4e6516c2465a779a1f570;hb=e26fc7a4106017149fd68b67e313d374c50c041b;hp=35cffaeac9ba67923722fb31f4d1bc870e760fa4;hpb=05a8b7bc29197345f9718796c110d6cf3c2ad176;p=osm%2FRO.git diff --git a/osm_ro/vimconn_openstack.py b/osm_ro/vimconn_openstack.py index 35cffaea..3182dbe8 100644 --- a/osm_ro/vimconn_openstack.py +++ b/osm_ro/vimconn_openstack.py @@ -322,9 +322,7 @@ class vimconnector(vimconn.vimconnector): if 'gateway_address' in ip_profile: subnet['gateway_ip'] = ip_profile['gateway_address'] if ip_profile.get('dns_address'): - #TODO: manage dns_address as a list of addresses separated by commas - subnet['dns_nameservers'] = [] - subnet['dns_nameservers'].append(ip_profile['dns_address']) + subnet['dns_nameservers'] = ip_profile['dns_address'].split(";") if 'dhcp_enabled' in ip_profile: subnet['enable_dhcp'] = False if ip_profile['dhcp_enabled']=="false" else True if 'dhcp_start_address' in ip_profile: @@ -472,11 +470,19 @@ class vimconnector(vimconn.vimconnector): def get_flavor_id_from_data(self, flavor_dict): """Obtain flavor id that match the flavor description Returns the flavor_id or raises a vimconnNotFoundException + flavor_dict: contains the required ram, vcpus, disk + If 'use_existing_flavors' is set to True at config, the closer flavor that provides same or more ram, vcpus + and disk is returned. Otherwise a flavor with exactly same ram, vcpus and disk is returned or a + vimconnNotFoundException is raised """ + exact_match = False if self.config.get('use_existing_flavors') else True try: self._reload_connection() - numa=None - numas = flavor_dict.get("extended",{}).get("numas") + flavor_candidate_id = None + flavor_candidate_data = (10000, 10000, 10000) + flavor_target = (flavor_dict["ram"], flavor_dict["vcpus"], flavor_dict["disk"]) + # numa=None + numas = flavor_dict.get("extended", {}).get("numas") if numas: #TODO raise vimconn.vimconnNotFoundException("Flavor with EPA still not implemted") @@ -488,14 +494,15 @@ class vimconnector(vimconn.vimconnector): epa = flavor.get_keys() if epa: continue - #TODO - if flavor.ram != flavor_dict["ram"]: - continue - if flavor.vcpus != flavor_dict["vcpus"]: - continue - if flavor.disk != flavor_dict["disk"]: - continue - return flavor.id + # TODO + flavor_data = (flavor.ram, flavor.vcpus, flavor.disk) + if flavor_data == flavor_target: + return flavor.id + elif not exact_match and flavor_target < flavor_data < flavor_candidate_data: + flavor_candidate_id = flavor.id + flavor_candidate_data = flavor_data + if not exact_match and flavor_candidate_id: + return flavor_candidate_id raise vimconn.vimconnNotFoundException("Cannot find any flavor matching '{}'".format(str(flavor_dict))) except (nvExceptions.NotFound, nvExceptions.ClientException, ksExceptions.ClientException, ConnectionError) as e: self._format_exception(e) @@ -543,15 +550,22 @@ class vimconnector(vimconn.vimconnector): for numa in numas: #overwrite ram and vcpus ram = numa['memory']*1024 + #See for reference: https://specs.openstack.org/openstack/nova-specs/specs/mitaka/implemented/virt-driver-cpu-thread-pinning.html if 'paired-threads' in numa: vcpus = numa['paired-threads']*2 - numa_properties["hw:cpu_threads_policy"] = "prefer" + #cpu_thread_policy "require" implies that the compute node must have an STM architecture + numa_properties["hw:cpu_thread_policy"] = "require" + numa_properties["hw:cpu_policy"] = "dedicated" elif 'cores' in numa: vcpus = numa['cores'] - #numa_properties["hw:cpu_threads_policy"] = "prefer" + # cpu_thread_policy "prefer" implies that the host must not have an SMT architecture, or a non-SMT architecture will be emulated + numa_properties["hw:cpu_thread_policy"] = "isolate" + numa_properties["hw:cpu_policy"] = "dedicated" elif 'threads' in numa: vcpus = numa['threads'] - numa_properties["hw:cpu_policy"] = "isolated" + # cpu_thread_policy "prefer" implies that the host may or may not have an SMT architecture + numa_properties["hw:cpu_thread_policy"] = "prefer" + numa_properties["hw:cpu_policy"] = "dedicated" # for interface in numa.get("interfaces",() ): # if interface["dedicated"]=="yes": # raise vimconn.vimconnException("Passthrough interfaces are not supported for the openstack connector", http_code=vimconn.HTTP_Service_Unavailable) @@ -1133,15 +1147,22 @@ class vimconnector(vimconn.vimconnector): interface["mac_address"] = port.get("mac_address") interface["vim_net_id"] = port["network_id"] interface["vim_interface_id"] = port["id"] - interface["compute_node"] = vm_vim['OS-EXT-SRV-ATTR:host'] + # check if OS-EXT-SRV-ATTR:host is there, + # in case of non-admin credentials, it will be missing + if vm_vim.get('OS-EXT-SRV-ATTR:host'): + interface["compute_node"] = vm_vim['OS-EXT-SRV-ATTR:host'] interface["pci"] = None - if port['binding:profile'].get('pci_slot'): - # TODO: At the moment sr-iov pci addresses are converted to PF pci addresses by setting the slot to 0x00 - # TODO: This is just a workaround valid for niantinc. Find a better way to do so - # CHANGE DDDD:BB:SS.F to DDDD:BB:00.(F%2) assuming there are 2 ports per nic - pci = port['binding:profile']['pci_slot'] - # interface["pci"] = pci[:-4] + "00." + str(int(pci[-1]) % 2) - interface["pci"] = pci + + # check if binding:profile is there, + # in case of non-admin credentials, it will be missing + if port.get('binding:profile'): + if port['binding:profile'].get('pci_slot'): + # TODO: At the moment sr-iov pci addresses are converted to PF pci addresses by setting the slot to 0x00 + # TODO: This is just a workaround valid for niantinc. Find a better way to do so + # CHANGE DDDD:BB:SS.F to DDDD:BB:00.(F%2) assuming there are 2 ports per nic + pci = port['binding:profile']['pci_slot'] + # interface["pci"] = pci[:-4] + "00." + str(int(pci[-1]) % 2) + interface["pci"] = pci interface["vlan"] = None #if network is of type vlan and port is of type direct (sr-iov) then set vlan id network = self.neutron.show_network(port["network_id"])