X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FRO.git;a=blobdiff_plain;f=osm_ro%2Fvimconn_openstack.py;h=8d87b7f744341c9dd48ee4abd16166b5409639e6;hp=b7bcda23005e265ac5d1ddc6b0bca73d8c2b5fa3;hb=a85c54de5c5d1f951b27082a21e5654e15712529;hpb=ff168193a05678df3ee1879095b9c49a1e897154 diff --git a/osm_ro/vimconn_openstack.py b/osm_ro/vimconn_openstack.py index b7bcda23..8d87b7f7 100644 --- a/osm_ro/vimconn_openstack.py +++ b/osm_ro/vimconn_openstack.py @@ -448,6 +448,10 @@ class vimconnector(vimconn.vimconnector): self.security_groups_id = None raise vimconn.vimconnConnectionException("Not found security group {} for this tenant".format(sg)) + def check_vim_connectivity(self): + # just get network list to check connectivity and credentials + self.get_network_list(filter_dict={}) + def get_tenant_list(self, filter_dict={}): '''Obtain tenants of VIM filter_dict can contain the following keys: @@ -499,7 +503,7 @@ class vimconnector(vimconn.vimconnector): except (ksExceptions.ConnectionError, ksExceptions.ClientException, ksExceptions.NotFound, ConnectionError) as e: self._format_exception(e) - def new_network(self,net_name, net_type, ip_profile=None, shared=False, vlan=None): + def new_network(self,net_name, net_type, ip_profile=None, shared=False, provider_network_profile=None): """Adds a tenant network to VIM Params: 'net_name': name of the network @@ -516,7 +520,7 @@ class vimconnector(vimconn.vimconnector): 'dhcp_start_address': ip_schema, first IP to grant 'dhcp_count': number of IPs to grant. 'shared': if this network can be seen/use by other tenants/organization - 'vlan': in case of a data or ptp net_type, the intended vlan tag to be used for the network + 'provider_network_profile': (optional) contains {segmentation-id: vlan, provider-network: vim_netowrk} Returns a tuple with the network 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_network. Can be used to store created segments, created l2gw connections, etc. @@ -525,7 +529,11 @@ class vimconnector(vimconn.vimconnector): """ self.logger.debug("Adding a new network to VIM name '%s', type '%s'", net_name, net_type) # self.logger.debug(">>>>>>>>>>>>>>>>>> IP profile %s", str(ip_profile)) + try: + vlan = None + if provider_network_profile: + vlan = provider_network_profile.get("segmentation-id") new_net = None created_items = {} self._reload_connection() @@ -796,10 +804,10 @@ class vimconnector(vimconn.vimconnector): 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: + extended = flavor_dict.get("extended", {}) + if extended: #TODO - raise vimconn.vimconnNotFoundException("Flavor with EPA still not implemted") + raise vimconn.vimconnNotFoundException("Flavor with EPA still not implemented") # if len(numas) > 1: # raise vimconn.vimconnNotFoundException("Cannot find any flavor with more than one numa") # numa=numas[0] @@ -821,6 +829,20 @@ class vimconnector(vimconn.vimconnector): except (nvExceptions.NotFound, nvExceptions.ClientException, ksExceptions.ClientException, ConnectionError) as e: self._format_exception(e) + def process_resource_quota(self, quota, prefix, extra_specs): + """ + :param prefix: + :param extra_specs: + :return: + """ + if 'limit' in quota: + extra_specs["quota:" + prefix + "_limit"] = quota['limit'] + if 'reserve' in quota: + extra_specs["quota:" + prefix + "_reservation"] = quota['reserve'] + if 'shares' in quota: + extra_specs["quota:" + prefix + "_shares_level"] = "custom" + extra_specs["quota:" + prefix + "_shares_share"] = quota['shares'] + def new_flavor(self, flavor_data, change_name_if_used=True): '''Adds a tenant flavor to openstack VIM if change_name_if_used is True, it will change name in case of conflict, because it is not supported name repetition @@ -848,7 +870,7 @@ class vimconnector(vimconn.vimconnector): ram = flavor_data.get('ram',64) vcpus = flavor_data.get('vcpus',1) - numa_properties=None + extra_specs={} extended = flavor_data.get("extended") if extended: @@ -857,39 +879,47 @@ class vimconnector(vimconn.vimconnector): numa_nodes = len(numas) if numa_nodes > 1: return -1, "Can not add flavor with more than one numa" - numa_properties = {"hw:numa_nodes":str(numa_nodes)} - numa_properties["hw:mem_page_size"] = "large" - numa_properties["hw:cpu_policy"] = "dedicated" - numa_properties["hw:numa_mempolicy"] = "strict" + extra_specs["hw:numa_nodes"] = str(numa_nodes) + extra_specs["hw:mem_page_size"] = "large" + extra_specs["hw:cpu_policy"] = "dedicated" + extra_specs["hw:numa_mempolicy"] = "strict" if self.vim_type == "VIO": - numa_properties["vmware:extra_config"] = '{"numa.nodeAffinity":"0"}' - numa_properties["vmware:latency_sensitivity_level"] = "high" + extra_specs["vmware:extra_config"] = '{"numa.nodeAffinity":"0"}' + extra_specs["vmware:latency_sensitivity_level"] = "high" for numa in numas: #overwrite ram and vcpus #check if key 'memory' is present in numa else use ram value at flavor if 'memory' in numa: ram = numa['memory']*1024 #See for reference: https://specs.openstack.org/openstack/nova-specs/specs/mitaka/implemented/virt-driver-cpu-thread-pinning.html + extra_specs["hw:cpu_sockets"] = 1 if 'paired-threads' in numa: vcpus = numa['paired-threads']*2 #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" + extra_specs["hw:cpu_thread_policy"] = "require" + extra_specs["hw:cpu_policy"] = "dedicated" elif 'cores' in numa: vcpus = numa['cores'] # 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" + extra_specs["hw:cpu_thread_policy"] = "isolate" + extra_specs["hw:cpu_policy"] = "dedicated" elif 'threads' in numa: vcpus = numa['threads'] # 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" + extra_specs["hw:cpu_thread_policy"] = "prefer" + extra_specs["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) # #TODO, add the key 'pci_passthrough:alias"="